单片机程序大全(共29页)

上传人:2127513****773577... 文档编号:52223633 上传时间:2022-02-07 格式:DOC 页数:29 大小:43.50KB
收藏 版权申诉 举报 下载
单片机程序大全(共29页)_第1页
第1页 / 共29页
单片机程序大全(共29页)_第2页
第2页 / 共29页
单片机程序大全(共29页)_第3页
第3页 / 共29页
资源描述:

《单片机程序大全(共29页)》由会员分享,可在线阅读,更多相关《单片机程序大全(共29页)(29页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上独立按键#include#define uchar unsigned char#define uint unsigned intsbit P27=P27;sbit K5=P14;sbit fmq=P36;uchar num;unsigned char code s816=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;void delay1ms(uint i)uchar j; while(i-) for(j=0;j115;j+) /1ms基准延时程序 ;vo

2、id beep()/产生1KHZ频率声音的函数 fmq=0;delay500us();fmq=1;delay500us();void delay500us()unsigned char j; for(j=0;j57;j+) /500us基准延时程序 ; void main() uchar t; P27=0; while(1) if(K5=0)delay1ms(15);if(K5=0)for(t=0;t100;t+) beep(); num=num+1; if(num=16) num=0; while(!K5);/等待按键释放 P0=s8num; #include#define uchar un

3、signed char /数据类型的宏定义#define uint unsigned int /数据类型的宏定义sbit P27=P27;unsigned char code table=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF; /共阳数码管显示字型码数组 1011 1111 -void delay1ms(uint i)uchar j; while(i-) for(j=0;j115;j+); /1ms基准延时程序 void display(unsigned char

4、 i) P27=0; /选通最有端的数码管显示P0=tablei; /显示i参数传来的字型码 void main(void) unsigned char temp; display(16); /初始显示 -while(1) P1=0xff; /先向P1口写1;端口读状态P1=0xf0;temp=P1; if(temp!=0xf0) delay1ms(15); if(temp!=0xf0) P1=0xfe; temp=P1;switch(temp) case(0xee):display(0);break; case(0xde):display(1);break; case(0xbe):displ

5、ay(2);break; case(0x7e):display(3);break; P1=0xfd; temp=P1;switch(temp) case(0xed):display(4);break; case(0xdd):display(5);break; case(0xbd):display(6);break; case(0x7d):display(7);break; P1=0xfb; temp=P1;switch(temp) case(0xeb):display(8);break; case(0xdb):display(9);break; case(0xbb):display(10);b

6、reak; case(0x7b):display(11);break; P1=0xf7; temp=P1;switch(temp) case(0xe7):display(12);break; case(0xd7):display(13);break; case(0xb7):display(14);break; case(0x77):display(15);break; /*行线接P1.0P1.3,列线接P1.4P1.7。根据线反转法扫描键盘返回的键值编码查键值编码表,从而得到键值并送数码管显示。开机时,数码管显示“”。*/#include #include #define uchar unsi

7、gned char#define uint unsigned intsbit P27=P27;sbit fmq=P36;uchar key;unsigned char code disp_code= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf;unsigned char code key_code= 0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77;void

8、 delay1ms(uint i)uchar j; while(i-) for(j=0;j115;j+) /1ms基准延时程序 ; void delay500us()unsigned char j; for(j=0;j57;j+) /500us基准延时程序 ; void beep()/产生1KHZ频率声音的函数 fmq=0;delay500us();fmq=1;delay500us();/*键盘扫描子函数*/uchar keyscan() uchar scan1,scan2,keycode,j; P1=0xf0; scan1=P1; if(scan1&0xf0)!=0xf0) /判键是否按下

9、delay1ms(20); /延时20ms scan1=P1; if(scan1&0xf0)!=0xf0) /二次判键是否按下 P1=0x0f; /线反转法的核心 scan2=P1; keycode=scan1|scan2; /组合成键编码 for(j=0;j=15;j+) if(keycode= key_codej) /查表得键值 key=j; return(key); else P1=0xff; /P1口写1 输入状态 return (16);/-main() uchar tt; P0 = 0xbf; P27 =0; /数码管显示- P1 = 0xff; while(1) P1=0xf0;

10、 if(P1&0xf0)!=0xf0) keyscan(); P0=disp_codekey; for(tt=0;tt200;tt+) beep(); fmq=1; delay1ms(200); 中断#include#define uint unsigned int #define uchar unsigned char sbit dula=P26;sbit wela=P27;sbit d1=P10;uchar num;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0

11、x79,0x71;void delay(uint z);void main()EA=1;/开总中断EX0=1;/开外部中断0/IT0=1;/TCON=0x01;wela=1;/P0=0xea;wela=0;while(1)for(num=0;num0;x-)for(y=110;y0;y-);void exter0() interrupt 0d1=0;定时器#include#include#define uint unsigned int#define uchar unsigned charuchar aa,num;sbit dula=P26;sbit wela=P27;uchar code t

12、able=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void main()num=0;aa=0;/TMOD=0X00;/设定定时器0为工作方式0TMOD=0X01;/设定定时器0为工作方式1/TH0=(8192-5000)/32;/TL0=(8192-5000)%32;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;/开总中断ET0=1;/开定时器0中断TR0=1;/启动定时器0wela=1;P0=0x24;wela=0;dul

13、a=1;P0=0x3f;dula=0;while(1)if(aa=20)aa=0;num+;if(num=10)num=0;dula=1;P0=tablenum;dula=0;void timer0() interrupt 1/TH0=(8192-5000)/32;/TL0=(8192-5000)%32;TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa+;中断控制LED/用定时器T0的中断控制1位LED闪烁#include / 包含51单片机寄存器定义的头文件sbit D0=P00; /将D0位定义为P0.0引脚unsigned int i;/*函数

14、功能:主函数*/void main(void) i=0;EA=1; /开总中断ET0=1; /定时器T0中断允许 TMOD=0x01; /使用定时器T0的模式1TH0=(65536-50000)/256; /定时器T0的高8位赋初值TL0=(65536-50000)%256; /定时器T0的高8位赋初值TR0=1; /启动定时器T0while(1);/无限循环等待中断 /*函数功能:定时器T0的中断服务程序*/void Time0(void) interrupt 1 using 0 /“interrupt”声明函数为中断服务函数 /其后的1为定时器T0的中断编号;0表示使用第0组工作寄存器 i

15、=i+1; if(i=40) D0=D0; /按位取反操作,将P0.0引脚输出电平取反 i=0; TH0=(65536-50000)/256; /定时器T0的高8位重新赋初值TL0=(65536-50000)%256; /定时器T0的高8位重新赋初值 中断控制LED2#include /包含52单片机寄存器定义的头文件/*函数功能:主函数*/void main(void) EA=1; /开放总中断 EX0=1; /允许使用外中断 IT0=1; /选择负跳变来触发外中断 P0=0xff; /关闭所有P0口的LED灯while(1); /无限循环, /*函数功能:外中断T0的中断服务程序*/voi

16、d it0(void) interrupt 0 using 0 /外中断0的中断编号为0 P0=P0; /每产生一次中断请求,P0取反一次。串口查询#include #include unsigned char tmp;void send_char(unsigned char txd);main()TMOD = 0x20;/ 定时器1工作于8位自动重载模式, 用于产生波特率TH1=TL1=0xFD;/ 波特率9600SCON = 0x50;/ 设定串行口工作方式1 允许接收,相当于下面三句/SM0=0;/SM1=1;/REN=1;PCON =0x00;/ 波特率不倍增TR1 = 1;/ 启动定

17、时器1while(1)if(RI=1)/ 是否有数据到来RI = 0;tmp = SBUF;/ 暂存接收到的数据P0 = tmp;/ 数据传送到P0口send_char(tmp);/ 回传接收到的数据void send_char(unsigned char txd)/ 传送一个字符SBUF = txd;while(!TI);/ 等特数据传送TI = 0;/ 清除数据传送标志串口通讯#include#define uchar unsigned char#define uint unsigned intuchar idata trdata=R,I,C,H,M,C,U,R,Z,-,5,1,V,2,.

18、,0,0x0d,0x0a,0x00;sbit K1=P32; /对应开发板K1按键/*-*/串口初始化void UART_Init(void)SCON = 0x50; /串口工作方式为1 , 串行允许接收/SM0=0;/SM1=1;/REN=1;TMOD = 0x20; /定时器1 工作在方式2/PCON = 0x80; /SMOD = 1; 波特率加倍TH1 = 0xfd; /波特率 9600bps fosc=11.0592MHzTL1 = 0xfd; ES = 1; /开串口中断 TR1 = 1; /允许定时器1工作 EA = 1; /开总中断void delay1ms(uint i)uc

19、har j; while(i-) for(j=0;j115;j+) /1ms基准延时程序 ; /*-*/串口发送一个字节void Uart_SendChar(unsigned char dat)SBUF = dat; /待发送的数据写入缓冲区while(!TI); /等待发送完成TI = 0; /清零发送标志位/*-*/串口发送一个字符串void Uart_SendString() uchar i=0; while(trdatai!=0x00)SBUF=trdatai; while(!TI); TI=0; i+; /*-*/主函数void main(void)UART_Init(); /初始化

20、串口while(1) if(K1=0)delay1ms(20);if(K1=0)Uart_SendString(); /发送数据while(!K1);/等待按键释放 /*-*/串口接收中断函数void INT_UartRcv(void) interrupt 4unsigned char Rcv = 0;if(RI) /查询接收标志位(有数据发送过来时置为1)RI = 0; /接收标志位清零Rcv = SBUF; /存储缓冲区的数据P0=SBUF;Uart_SendChar(Rcv); /让从计算机上传到单片机的数据 , 传回的计算机显示/用LED数码管显示计数器对T0的计数值#include

21、/包含52单片机寄存器定义的头文件unsigned char Tab =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /段码表unsigned char x;sbit P34=P34;void delay1ms(unsigned int i)unsigned char j; while(i-) for(j=0;j115;j+) /1ms基准延时程序 ; void Display(unsigned char x)P2=0xdf; /P2.6引脚输出低电平,DS6点亮 P0=Tabx/100; /显示十位 delay1ms(5);P2=0xb

22、f; /P2.6引脚输出低电平,DS6点亮 P0=Tabx%100/10; /显示十位 delay1ms(5); P2=0x7f; /P2.7引脚输出低电平,DS7点亮 P0=Tabx%10; /显示个位 delay1ms(5);P2=0xff; /*函数功能:主函数*/void main(void) TMOD=0x06; / TMOD=0000 0110B,使用计数器T0的模式2 EA=1; /开总中断 ET0=1; /允许定时器T0的中断 EX0=1; /允许外中断INT0 IT0=1; /INT0为下负脉冲触发方式 TR0=1; /启动T0 TH0=TL0=256-1; /计数器T0高8

23、位赋初值 255 while(1) /无限循环,不停地将TL0计数结果送P1口 /x=TL0; Display(x); /INT0终端函数void clear0() interrupt 0 x=0;/T0 计数器中断 void Key_counter() interrupt 1 if(P34=0) delay1ms(20); if(P34=0) x=(x+1)%1000;/因为是3位数码管显示 所以要把计的数控制在1000以内(000999) 外中断字符查询#include #define uchar unsigned char#define uint unsigned intuchar co

24、de trdata=R,I,C,H,M,C,U,0x0d,0x0a,0x00;void delay1ms(uint i)uchar j; while(i-) for(j=0;j115;j+) /1ms基准延时程序 ; main()uchar i;SCON= 0x40; /串口方式1不允许接收/SM0=0;/SM1=1;/REN=0;PCON=0x80; /SMOD=0TMOD= 0x20; /定时器1定时方式2TH1= 0xff; /11.0592M 57600波特率TL1= 0xff;TR1= 1; /启动定时器 while(1)i=0; while(trdatai!=0x00)SBUF=trdatai; while(!TI); TI=0; i+; delay1ms(1000);专心-专注-专业

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!