求问用c语言编写单片机程序

求问用c语言编写单片机程序,第1张

unsigned data char i,x;

unsigned xdata char p;

p=0x1000;

x=0;

for(i=0;i<11;i++)x+=p;

DBYTE[0x20]=x;

unsigned data char x1 _at_ 0x30;

unsigned data char x2 _at_ 0x40;

unsigned int x;

unsigned xdata char p;

x=x1+x2;

p=0x2000;

p=x;

p++;

p=x>>8;

Proteus仿真原理图:

程序如下:

#include <reg51h>

#define uchar unsigned char

#define uint  unsigned int

uchar data buf[4];

uchar data sec_dx=20;//东西数默认

uchar data sec_nb=30;//南北默认值

uchar data set_timedx=20;

uchar data set_timenb=30;

int n;

uchar data b;//定时器中断次数

sbit  k1=P1^6;//定义5组开关

sbit  k2=P1^7;

sbit  k3=P2^7;

sbit  k4=P3^0;

sbit  k5=P3^1;

sbit Yellow_nb=P2^5;       //南北黄灯标志

sbit Yellow_dx=P2^2;       //东西黄灯标志

sbit Green_nb=P2^4;

sbit Green_dx=P2^1;

sbit Buzz=P3^7;

bit Buzzer_Indicate;

bit time=0;//灯状态循环标志

bit   set=1;//调时方向切换键标志

uchar code table[11]={       //共阴极字型码

0x3f,  //--0

0x06,  //--1

0x5b,  //--2

0x4f,  //--3

0x66,  //--4

0x6d,  //--5

0x7d,  //--6

0x07,  //--7

0x7f,  //--8

0x6f,  //--9

0x00   //--NULL

};

//函数的声明部分

void delay(int ms);//延时子程序

void key();//按键扫描子程序

void key_to1();//键处理子程序

void key_to2();

void key_to3();

void display();//显示子程序

void logo();   //开机LOGO

void Buzzer();

//主程序

void main()

{

TMOD=0X01;

TH0=0XD8;

TL0=0XF0;

EA=1;

ET0=1;

TR0=1;

EX0=1;

EX1=1;

logo();

P2=0Xc3;// 开始默认状态,东西绿灯,南北黄灯

sec_nb=sec_dx+5;

while(1)

{     

key(); //调用按键扫描程序

display(); //调用显示程序

Buzzer();

}   

}

//函数的定义部分

void key()    //按键扫描子程序

{

if(k1!=1)

{

delay(10);

if(k1!=1)

{

while(k1!=1)

{

key_to1();

for(n=0;n<40;n++)

{ display();}

}

}

}

if(k2!=1)

{

delay(10);

if(k2!=1)

{

while(k2!=1)

{

key_to2();

for(n=0;n<40;n++)

{ display();}

}

}

}

if(k3!=1)

{

TR0=1;   //启动定时器

Buzzer_Indicate=0;

sec_nb=set_timenb;  //从中断回复,仍显示设置过的数值

sec_dx=set_timedx;

if(time==0)

{ P2=0X99;sec_nb=sec_dx+5; }

else { P2=0xC3;sec_dx=sec_nb+5; }

}     

if(k4!=1)

{

delay(5);

if(k4!=1)

{

while(k4!=1);

set=!set;

}

}

if(k5!=1)

{

delay(5);

if(k5!=1)

{

while(k5!=1)

key_to3();

}

}

}

void display() //显示子程序

{

buf[1]=sec_dx/10; //第1位 东西秒十位

buf[2]=sec_dx%10; //第2位 东西秒个位

buf[3]=sec_nb/10; //第3位 南北秒十位

buf[0]=sec_nb%10; //第4位 南北秒个位

P1=0xff;                                // 初始灯为灭的

P0=0x00;

P1=0xfe;                              //片选LCD1

P0=table[buf[1]];

delay(1);

P1=0xff;

P0=0x00;

P1=0xfd;                           //片选LCD2

P0=table[buf[2]];

delay(1);

P1=0xff;

P0=0x00;

P1=0Xfb;              //片选LCD3

P0=table[buf[3]];

delay(1);

P1=0xff;

P0=0x00;

P1=0Xf7;

P0=table[buf[0]];               //片选LCD4

delay(1);

}

void time0(void) interrupt 1 using 1  //定时中断子程序

{

b++;

if(b==19)                        // 定时器中断次数

{      b=0;

sec_dx--;

sec_nb--;

if(sec_nb<=5&&time==0)  //东西黄灯闪

{  Green_dx=0;Yellow_dx=!Yellow_dx;}               

if(sec_dx<=5&&time==1)  //南北黄灯闪

{  Green_nb=0;Yellow_nb=!Yellow_nb;}            

if(sec_dx==0&&sec_nb==5)

sec_dx=5;

if(sec_nb==0&&sec_dx==5)

sec_nb=5;

if(time==0&&sec_nb==0)

{ P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;}

if(time==1&&sec_dx==0)

{P2=0Xc3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;}

}

}

void key_to1()    //键盘处理子程序之+

{

TR0=0;          //关定时器

if(set==0)

set_timenb++;    //南北加1S

else

set_timedx++;    //东西加1S

if(set_timenb==100)

set_timenb=1;

if(    set_timedx==100)

set_timedx=1;   //加到100置1

sec_nb=set_timenb ;    //设置的数值赋给东西南北

sec_dx=set_timedx;

}

void key_to2()       //键盘处理子程序之-

{

TR0=0;         //关定时器

if(set==0)

set_timenb--;  //南北减1S

else

set_timedx--;  //东西减1S

if(set_timenb==0)

set_timenb=99;

if(    set_timedx==0 )

set_timedx=99;   //减到1重置99

sec_nb=set_timenb ;    //设置的数值赋给东西南北

sec_dx=set_timedx;

}

void key_to3()   //键盘处理之紧急车通行

{

TR0=0;

P2=0Xc9;

sec_dx=00;

sec_nb=00;

Buzzer_Indicate=1;

}

void int0(void) interrupt 0 using 1  //只允许东西通行

{

TR0=0;

P2=0Xc3;

Buzzer_Indicate=0;

sec_dx=00;

sec_nb=00;

}

void int1(void) interrupt 2 using 1       //只允许南北通行

{

TR0=0;

P2=0X99;

Buzzer_Indicate=0;

sec_nb=00;

sec_dx=00;

}

void logo()//开机的Logo  "- - - -"

{ for(n=0;n<50;n++)

{

P0=0x40;

P1=0xfe;

delay(1);

P1=0xfd;

delay(1);

P1=0Xfb;

delay(1);

P1=0Xf7;

delay(1);

P1 = 0xff;

}

}

void Buzzer()

{

if(Buzzer_Indicate==1)

Buzz=!Buzz;

else Buzz=0;

}

void delay(int ms)            //延时子程序

{

uint j,k;

for(j=0;j<ms;j++)

for(k=0;k<124;k++);

}

// 电话本Dlgcpp : 实现文件

//

#include stdafxh

#include 电话本h

#include 电话本Dlgh

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// C电话本Dlg 对话框

C电话本Dlg::C电话本Dlg(CWnd pParent /=NULL/)

: CDialog(C电话本Dlg::IDD, pParent)

{

m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);

}

void C电话本Dlg::DoDataExchange(CDataExchange pDX)

{

CDialog::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(C电话本Dlg, CDialog)

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

//}}AFX_MSG_MAP

ON_EN_CHANGE(IDC_EDIT1, C电话本Dlg::OnName)

ON_EN_CHANGE(IDC_EDIT2, C电话本Dlg::OnPhoto)

ON_EN_CHANGE(IDC_EDIT3, C电话本Dlg::OnAddress)

ON_EN_CHANGE(IDC_EDIT4, C电话本Dlg::OnShow)

ON_BN_CLICKED(IDC_BUTTON1, C电话本Dlg::OnFill)

ON_BN_CLICKED(IDC_BUTTON2, C电话本Dlg::OnInsert)

ON_BN_CLICKED(IDC_BUTTON3, C电话本Dlg::OnFind)

ON_BN_CLICKED(IDC_BUTTON4, C电话本Dlg::OnDelete)

ON_BN_CLICKED(IDC_BUTTON5, C电话本Dlg::OnEdit)

ON_BN_CLICKED(IDC_BUTTON7, C电话本Dlg::OnSave)

END_MESSAGE_MAP()

// C电话本Dlg 消息处理程序

BOOL C电话本Dlg::OnInitDialog()

{

CDialog::OnInitDialog();

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动

// 执行此 *** 作

SetIcon(m_hIcon, TRUE); // 设置大图标

SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码

ifstream InFile(Wabfsd,ios::in);

listWabList::iterator ItWab;

char Tmp1[8],Tmp2[16],Tmp3[32];

Wabclear();

while(InFile Tmp1 Tmp2 Tmp3)

{

OutWabName=Tmp1;

OutWabPhoto=Tmp2;

OutWabAddress=Tmp3;

Wabpush_front(OutWab);

}

C电话本Dlg::OnFill();

return TRUE; // 除非将焦点设置到控件,否则返回 TRUE

}

// 如果向对话框添加最小化按钮,则需要下面的代码

// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,

// 这将由框架自动完成。

void C电话本Dlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_castWPARAM(dcGetSafeHdc()), 0);

// 使图标在工作矩形中居中

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(rect);

int x = (rectWidth() - cxIcon 1) / 2;

int y = (rectHeight() - cyIcon 1) / 2;

// 绘制图标

dcDrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。

//

HCURSOR C电话本Dlg::OnQueryDragIcon()

{

return static_castHCURSOR(m_hIcon);

}

void C电话本Dlg::OnName()

{

CEdit pMaxLen=(CEdit)GetDlgItem(IDC_EDIT1);

pMaxLen-SetLimitText(6);

GetDlgItemText(IDC_EDIT1,InWabName);

}

void C电话本Dlg::OnPhoto()

{

CEdit pMaxLen=(CEdit)GetDlgItem(IDC_EDIT2);

pMaxLen-SetLimitText(11);

GetDlgItemText(IDC_EDIT2,InWabPhoto);

}

void C电话本Dlg::OnAddress()

{

CEdit pMaxLen=(CEdit)GetDlgItem(IDC_EDIT3);

pMaxLen-SetLimitText(30);

GetDlgItemText(IDC_EDIT3,InWabAddress);

}

void C电话本Dlg::OnShow()

{

// TODO: 如果该控件是 RICHEDIT 控件,则它将不会

// 发送该通知,除非重写 CDialog::OnInitDialog()

// 函数并调用 CRichEditCtrl()SetEventMask(),

// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

// TODO: 在此添加控件通知处理程序代码

}

void C电话本Dlg::OnFill()

{

CString OutAll,OutTemp,Space,Enter;

Space=_T( );

Enter=_T(\r\n);

listWabList::iterator ItWab;

for(ItWab=Wabbegin();ItWab!=Wabend();ItWab )

{

OutWab=ItWab;

OutTemp=OutWabName Space OutWabPhoto Space OutWabAddress;

OutAll=OutAll OutTemp Enter;

}

SetDlgItemText(IDC_EDIT4,OutAll);

}

void C电话本Dlg::OnInsert()

{

Wabpush_front(InWab);

C电话本Dlg::OnFill();

}

void C电话本Dlg::OnFind()

{

CString OutAll,OutTemp,Space,Enter;

Space=_T( );

Enter=_T(\r\n);

listWabList::iterator ItWab;

for(ItWab=Wabbegin();ItWab!=Wabend();ItWab )

{

if(ItWab-Name==InWabName)

{

OutTemp=ItWab-Name Space ItWab-Photo Space ItWab-Address;

OutAll=OutAll OutTemp Enter;

}

}

SetDlgItemText(IDC_EDIT4,OutAll);

}

void C电话本Dlg::OnDelete()

{

CString OutAll,OutTemp,Space,Enter;

Space=_T( );

Enter=_T(\r\n);

listWabList::iterator ItWab;

for(ItWab=Wabbegin();ItWab!=Wabend();ItWab )

{

if(ItWab-Name==InWabName)

{

OutTemp=ItWab-Name Space ItWab-Photo Space ItWab-Address;

OutAll=OutAll OutTemp Enter;

break;

}

}

SetDlgItemText(IDC_EDIT4,OutAll);

if(ItWab!=Wabend()) Waberase(ItWab);

}

void C电话本Dlg::OnEdit()

{

CString OutAll,OutTemp,Space,Enter;

Space=_T( );

Enter=_T(\r\n);

listWabList::iterator ItWab;

for(ItWab=Wabbegin();ItWab!=Wabend();ItWab )

{

if(ItWab-Name==InWabName)

{

OutTemp=ItWab-Name Space ItWab-Photo Space ItWab-Address;

OutAll=OutAll OutTemp Enter;

break;

}

}

SetDlgItemText(IDC_EDIT4,OutAll);

if(ItWab!=Wabend())

{

Waberase(ItWab);

Wabpush_front(InWab);

}

}

void C电话本Dlg::OnSave()

{

CString Tmp1,Tmp2,Tmp3;

ofstream OutFile(Wabfsd,ios::out);

listWabList::iterator ItWab;

for(ItWab=Wabbegin();ItWab!=Wabend();ItWab )

{

Tmp1=ItWab-Name;

Tmp2=ItWab-Photo;

Tmp3=ItWab-Address;

OutFile Tmp1 ' ' Tmp2 ' ' Tmp3 endl;

}

}

只是个用C语言编写的电话本程序 很有实用意义

单片机c语言编程100个实例目录1

函数的使用和熟悉

实例3:用单片机控制第一个灯亮

实例4:用单片机控制一个灯闪烁:认识单片机的工作频率

实例5:将 P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能

实例6:使用P3口流水点亮8位LED

实例7:通过对P3口地址的 *** 作流水点亮8位LED

实例8:用不同数据类型控制灯闪烁时间

实例9:用P0口、P1 口分别显示加法和减法运算结果

实例10:用P0、P1口显示乘法运算结果

实例11:用P1、P0口显示除法运算结果

实例12:用自增运算控制P0口8位LED流水花样

实例13:用P0口显示逻辑"与"运算结果

实例14:用P0口显示条件运算结果

实例15:用P0口显示按位"异或"运算结果

实例16:用P0显示左移运算结果

实例17:"万能逻辑电路"实验

实例18:用右移运算流水点亮P1口8位LED

实例19:用if语句控制P0口8位LED的流水方向

实例20:用swtich语句的控制P0口8位LED的点亮状态

实例21:用for语句控制蜂鸣器鸣笛次数

实例22:用while语句控制LED

实例23:用do-while语句控制P0口8位LED流水点亮

实例24:用字符型数组控制P0口8位LED流水点亮

实例25: 用P0口显示字符串常量

实例26:用P0 口显示指针运算结果

实例27:用指针数组控制P0口8位LED流水点亮

实例28:用数组的指针控制P0 口8 位LED流水点亮

实例29:用P0 、P1口显示整型函数返回值

实例30:用有参函数控制P0口8位LED流水速度

实例31:用数组作函数参数控制流水花样

实例32:用指针作函数参数控制P0口8位LED流水点亮

实例33:用函数型指针控制P1口灯花样

实例34:用指针数组作为函数的参数显示多个字符串

单片机c语言编程100个实例目录2

实例35:字符函数ctypeh应用举例

实例36:内部函数intrinsh应用举例

实例37:标准函数stdlibh应用举例

实例38:字符串函数stringh应用举例

实例39:宏定义应用举例2

实例40:宏定义应用举例2

实例41:宏定义应用举例3

中断、定时器中断、定时器 中断、定时器中断、定时器 /

实例42:用定时器T0查询方式P2口8位控制LED闪烁

实例43:用定时器T1查询方式控制单片机发出1KHz音频

实例44:将计数器T0计数的结果送P1口8位LED显示

实例45:用定时器T0的中断控制1位LED闪烁

实例46:用定时器T0的中断实现长时间定时

实例47:用定时器T1中断控制两个LED以不同周期闪烁

实例48:用计数器T1的中断控制蜂鸣器发出1KHz音频

实例49:用定时器T0的中断实现"渴望"主题曲的播放

实例50-1:输出50个矩形脉冲

实例50-2:计数器T0统计外部脉冲数

实例51-2:定时器T0的模式2测量正脉冲宽度

实例52:用定时器T0控制输出高低宽度不同的矩形波

实例53:用外中断0的中断方式进行数据采集

实例54-1:输出负脉宽为200微秒的方波

实例54-2:测量负脉冲宽度

实例55:方式0控制流水灯循环点亮

实例56-1:数据发送程序

实例56-2:数据接收程序

实例57-1:数据发送程序

实例57-2:数据接收程序

实例58:单片机向PC发送数据

实例59:单片机接收PC发出的数据

数码管显示数码管显示 数码管显示数码管显示/

实例60:用LED数码显示数字5

实例61:用LED数码显示器循环显示数字0~9

实例62:用数码管慢速动态扫描显示数字"1234"

实例63:用LED数码显示器伪静态显示数字1234

实例64:用数码管显示动态检测结果

实例65:数码秒表设计

实例66:数码时钟设计

实例67:用LED数码管显示计数器T0的计数值

实例68:静态显示数字“59”

单片机c语言编程100个实例目录3

键盘控制键盘控制 键盘控制 键盘控制 /

实例69:无软件消抖的独立式键盘输入实验

实例70:软件消抖的独立式键盘输入实验

实例71:CPU控制的独立式键盘扫描实验

实例72:定时器中断控制的独立式键盘扫描实验

实例73:独立式键盘控制的4级变速流水灯

实例74:独立式键盘的按键功能扩展:"以一当四"

实例75:独立式键盘调时的数码时钟实验

实例76:独立式键盘控制步进电机实验

实例77:矩阵式键盘按键值的数码管显示实验

//实例78:矩阵式键盘按键音

实例79:简易电子琴

实例80:矩阵式键盘实现的电子密码锁

液晶显示LCD液晶显示LCD 液晶显示LCD 液晶显示LCD液晶显示LCD 液晶显示LCD /

实例81:用LCD显示字符'A'

实例82:用LCD循环右移显示"Welcome to China"

实例83:用LCD显示适时检测结果

实例84:液晶时钟设计

一些芯片的使用24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302 红外遥控/

实例85:将数据"0x0f"写入AT24C02再读出送P1口显示

实例86:将按键次数写入AT24C02,再读出并用1602LCD显示

实例87:对I2C总线上挂接多个AT24C02的读写 *** 作

实例88:基于AT24C02的多机通信 读取程序

实例89:基于AT24C02的多机通信 写入程序

实例90:DS18B20温度检测及其液晶显示

实例91:将数据"0xaa"写入X5045再读出送P1口显示

实例92:将流水灯控制码写入X5045并读出送P1口显示

实例93:对SPI总线上挂接多个X5045的读写 *** 作

实例94:基于ADC0832的数字电压表

实例95:用DAC0832产生锯齿波电压

实例96:用P1口显示红外遥控器的按键值

实例97:用红外遥控器控制继电器

实例98:基于DS1302的日历时钟

实例99:单片机数据发送程序

实例100:电机转速表设计

模拟霍尔脉冲

>

以上就是关于求问用c语言编写单片机程序全部的内容,包括:求问用c语言编写单片机程序、c51单片机c语言交通灯的程序、c语言程序设计实例等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9327731.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存