ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:19.92KB ,
资源ID:6870021      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6870021.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机程序大全.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机程序大全.docx

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基准延时程序 ;void be

2、ep() /产生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

3、 unsigned 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 c

4、har 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):di

5、splay(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

6、);break; 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 u

7、nsigned 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;v

8、oid 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)

10、P1=0xf0; 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,0x3

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

12、26;sbit wela=P27;uchar code table=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为工作方式0 TMOD=0X01;/设定定时器0为工作方式1 /TH0=(8192-5000)/32; /TL0=(8192-5000)%32; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;/开总中断 ET0=1;/开定时器0中

13、断 TR0=1;/启动定时器0 wela=1; P0=0x24; wela=0; dula=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 / 包

14、含51单片机寄存器定义的头文件sbit D0=P00; /将D0位定义为P0.0引脚unsigned int i;/*函数功能:主函数*/void main(void) i=0; EA=1; /开总中断 ET0=1; /定时器T0中断允许 TMOD=0x01; /使用定时器T0的模式1 TH0=(65536-50000)/256; /定时器T0的高8位赋初值 TL0=(65536-50000)%256; /定时器T0的高8位赋初值 TR0=1; /启动定时器T0 while(1);/无限循环等待中断 /*函数功能:定时器T0的中断服务程序*/void Time0(void) interrupt

15、 1 using 0 /“interrupt”声明函数为中断服务函数 /其后的1为定时器T0的中断编号;0表示使用第0组工作寄存器 i=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; /选择负跳变来

16、触发外中断 P0=0xff; /关闭所有P0口的LED灯 while(1); /无限循环, /*函数功能:外中断T0的中断服务程序*/void 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; / 波特率9600 SCON = 0x50; /

17、设定串行口工作方式1 允许接收,相当于下面三句 /SM0=0; /SM1=1; /REN=1; PCON =0x00; / 波特率不倍增 TR1 = 1; / 启动定时器1 while(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#

18、define uchar unsigned char#define uint unsigned intuchar idata trdata=R,I,C,H,M,C,U,R,Z,-,5,1,V,2,.,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; /波特率 9600bp

19、s fosc=11.0592MHzTL1 = 0xfd; ES = 1; /开串口中断 TR1 = 1; /允许定时器1工作 EA = 1; /开总中断void delay1ms(uint i)uchar 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=

20、0; while(trdatai!=0x00) SBUF=trdatai; while(!TI); TI=0; i+; /*-*/主函数void main(void)UART_Init(); /初始化串口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

21、 = SBUF; /存储缓冲区的数据P0=SBUF;Uart_SendChar(Rcv); /让从计算机上传到单片机的数据 , 传回的计算机显示/用LED数码管显示计数器对T0的计数值#include /包含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基准

22、延时程序 ; void Display(unsigned char x) P2=0xdf; /P2.6引脚输出低电平,DS6点亮 P0=Tabx/100; /显示十位 delay1ms(5); P2=0xbf; /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

23、=1; /开总中断 ET0=1; /允许定时器T0的中断 EX0=1; /允许外中断INT0 IT0=1; /INT0为下负脉冲触发方式 TR0=1; /启动T0 TH0=TL0=256-1; /计数器T0高8位赋初值 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 code trdata=R,I,C,H,M,C,U,0x

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1