单片机实践合集.doc_第1页
单片机实践合集.doc_第2页
单片机实践合集.doc_第3页
单片机实践合集.doc_第4页
单片机实践合集.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、 流水灯1、左移符号的运用#include#define uint unsigned int#define uchar unsigned charsbit dula=P12;sbit wela=P11;uchar temp,tt;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main()dula=0;wela=0;while(1)temp=0x01;for(tt=0;tt8;tt+)/流水灯P2=temp;/左移为二进制,0左移,故取反delay(500);temp=1;delay(500);P2=0x0;delay(500);P2=0xff;delay(500);P2=0xbb;delay(500);P2=0xff;delay(500);P2=0x55;delay(500);P2=0xff;delay(500);2、左移函数的运用#include#include#define uint unsigned int#define uchar unsigned charsbit dula=P12;sbit wela=P11;uchar temp,i;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main()temp=0xfe;/流水灯dula=0;wela=0;for(i=0;i500;i+)temp=_crol_(temp,1);/左移函数P2=temp;delay(500); 二、数码管1、 数码管控制#include#define uint unsigned int #define uchar unsigned char sbit LEDLK=P10;sbit dula=P12;sbit wela=P11;uchar num;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main() wela=1;/开启位选P2=0xf0;wela=0;/锁存数据delay(500); while(1) /while语句可不加for(num=0;num16;num+)dula=1;P2=tablenum;delay(50);/下降沿锁存,由于单片机传输比573快,故延时dula=0;delay(500);2、外部中断0的应用#include#define uint unsigned int #define uchar unsigned char sbit LEDLK=P10;sbit dula=P12;sbit wela=P11;uchar num;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delay(uint z);void main()EA=1;/开总中断EX0=1;/开外部中断0/IT0=1;/ 对定时器/计数器控制寄存器控制的位进行控制,外部中断0为边沿触发方式TCON=0x01;/对整个定时器/计数器控制寄存器控制,LEDLK=0;wela=1;/11101010P2=0xf0;wela=0;while(1)for(num=0;num0;x-)for(y=110;y0;y-);void exter0() interrupt 0 /在外部INT0给个低电平即触发,中断启动LEDLK=1;P2=0xfe;/中断时显示一个LED并保持LEDLK=0;3、定时器0的应用#include#include#define uint unsigned int#define uchar unsigned charuchar temp,aa,num;sbit LEDLK=P10;sbit dula=P12;sbit wela=P11;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delay(uint z);void main()num=0;aa=0;TMOD=0x01;/定时器模式设定,设定为工作方式1TH0=(65536-50000)/256;/给高地位置数,设定定时时间TL0=(65536-50000)%256;EA=1;ET0=1;/开启定时器0中断TR0=1;/启动定时器0temp=0xfe;LEDLK=1;P2=temp;/点亮第一个LEDdelay(50);LEDLK=0;dula=1;P2=table0;/开启时给数码管显示0dula=0;wela=1;P2=0xf0;/选位wela=0;while(1)delay(1000);temp=_crol_(temp,1);/流水灯定时运行,采用延时程序定时1sLEDLK=1;P2=temp;LEDLK=0;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void timer0() interrupt 1 TH0=(65536-50000)/256;/定时50msTL0=(65536-50000)%256;aa+;if(aa=20)/定时1秒,定时设定,定时器较延时程序精确aa=0;num+;if(num=16)num=0;dula=1;P2=tablenum;/数字显示delay(50);dula=0;三、 按键的应用(消抖出理)#include#define uint unsigned int#define uchar unsigned charsbit d1=P20;sbit rd=P37;sbit LEDLK=P10;sbit dula=P12;sbit wela=P11;sbit key1=P30;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar num;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main()LEDLK=0;wela=1;P2=0xfe;/选位wela=0;P3=0xff;/开始给键盘赋高电平rd=0;/给key1一端拉地电位while(1)if(key1=0)delay(5);/消按下抖动if(key1=0)/*LEDLK=1;delay(100)d1=0;LEDLK=0;*/num+;if(num=10)num=0;while(!key1);delay(5);/消释放抖动while(!key1);/确保消抖/*elseLEDLK=1;d1=1;LEDLK=0; */dula=1;P2=tablenum;delay(50);dula=0;2、矩阵键盘扫描#include#define uint unsigned int#define uchar unsigned charsbit LEDLK=P10;sbit dula=P12;sbit wela=P11;sbit key1=P30;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0;uchar num,temp,num1;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);uchar keyscan();void display(uchar aa);void main()LEDLK=0;/关闭LED通道num=17;dula=1;P2=0;delay(50);dula=0;wela=1;P2=0xf0;delay(50);wela=0;while(1)display(keyscan();void display(uchar aa)/显示子函数dula=1;P2=tableaa-1;delay(50);dula=0;uchar keyscan()/键盘扫描子程序P3=0xfe;/先扫描第一行,再依次扫描temp=P3;temp=temp&0xf0;/检测是否有键按下,按下必造成0xf0变化while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;switch(temp)case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0;P3=0xfd;/扫描第二行temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;switch(temp)case 0xed:num=5;break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0;P3=0xfb;/扫描第三行temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;switch(temp)case 0xeb:num=9;break;case 0xdb:num=10;break;case 0xbb:num=11;break;case 0x7b:num=12;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0;P3=0xf7;/扫描第四行temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;switch(temp)case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0;return num;/返回扫描值到主函数中aa四、 串口应用#includeunsigned char flag,a;void main()TMOD=0x20;/设置定时器1为工作方式2TH1=0xfd;TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;while(1)/*if(RI=1)RI=0;P1=SBUF;*/if(flag=1)ES=0;flag=0;SBUF=1;/28;while(!TI);TI=0;SBUF=2;/28;while(!TI);TI=0;SBUF=3;/28;while(!TI);TI=0;ES=1;void ser() interrupt 4RI=0;/P1=SBUF;a=SBUF;flag=1;五、 液晶1602应用#include#define uchar unsigned char#define uint unsigned intuchar code table=I LIKE MCU!;uchar code table1=WWW.TXMCU.COM;sbit lcden=P15;sbit lcdrs=P34;sbit LEDLK=P10;sbit dula=P12;sbit wela=P11;uchar num;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)/指令写入子函数lcdrs=0;/开启指令写入,对应时序图软件完成P2=com;delay(5);lcden=1;/使能允许delay(5);/读取指令lcden=0;/关闭指令读取许可void write_data(uchar date)/数据写入子函数lcdrs=1;/开启数据写入P2=date;delay(5);lcden=1;delay(5);/读取数据lcden=0;void init()dula=0;wela=0;lcden=0;/允许指令写入write_com(0x38);/设置16*2的显示write_com(0x0e);/开显示,显光标,不闪烁write_com(0x06); /指针地址加一,光标移动,整屏不移动write_com(0x01);/消除黑点,清屏write_com(0x80+0x10);/第一行写入void main()init();for(num=0;num11;num+)write_data(tablenum);/写入数据delay(20);/write_com(1); /清屏,全消指令write_com(0x80+0x53);/写入第二行for(num=0;num13;num+)write_data(table1num);delay(20);for(num=0;num16;num+)write_com(0x18);/屏幕左移指令delay(20);while(1);2、时钟#include#define uchar unsigned char #define uint unsigned intsbit lcden=P15;sbit lcdrs=P34;sbit LEDLK=P10;sbit dula=P12;sbit wela=P11;sbit s1=P30;sbit s2=P31;sbit s3=P32;sbit rd=P37;uchar count,s1num;char miao,shi,fen;uchar code table= 2007-7-30 MON;uchar code table1= 00:00:00;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)lcdrs=0;lcden=0;P2=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)lcdrs=1;lcden=0;P2=date;delay(5);lcden=1;delay(5);lcden=0;void init()uchar num;dula=0;wela=0;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num15;num+)write_date(tablenum);delay(5);write_com(0x80+0x40);for(num=0;num12;num+)write_date(table1num);delay(5);TMOD=0x01;TH0=(65536-50000)/256;/定时50msTL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;void write_sfm(uchar add,uchar date)/写入时分秒uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void keyscan()rd=0;if(s1=0)delay(5);if(s1=0)s1num+;while(!s1);if(s1num=1)TR0=0;write_com(0x80+0x40+10);write_com(0x0f);if(s1num=2)write_com(0x80+0x40+7);if(s1num=3)write_com(0x80+0x40+4);if(s1num=4)s1num=0;write_com(0x0c);TR0=1;if(s1num!=0)if(s2=0)delay(5);if(s2=0)while(!s2);if(s1num=1)miao+;if(miao=60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);if(s1num=2)fen+;if(fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1num=3)shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);if(s3=0)delay(5);if(s3=0)while(!s3);if(s1num=1)miao-;if(miao=-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);if(s1num=2)fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1num=3)shi-;if(shi=-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);void main()init();while(1)keyscan();void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;count+;if(count=18)count=0;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;shi+;if(shi=24)shi=0;write_sfm(4,shi);write_sfm(7,fen);write_sfm(10,miao);3、#include#includevoid delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void didi() beep=0;delay(50);beep=1;delay(100);beep=0;delay(50);beep=1;void write_com(uchar com)rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;void init()uchar num;EA=1;EX0=1;IT0=1;dula=0;wela=0;lcden=0;/set_time();set_alarm(14,13,10);write_ds(0x0B,0x26);read_ds(0x0c);/fen=59;/miao=53;/shi=23;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num15;num+)write_date(tablenum);delay(5);write_com(0x80+0x40);for(num=0;num12;num+)write_date(table1num);delay(5);void write_sfm(uchar add,uchar date)uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void keyscan()rd=0;if(flag1=1)if(s2=0)delay(5);if(s2=0)while(!s2);flag1=0; if(s3=0)delay(5);if(s3=0)while(!s3);flag1=0; if(s1=0)delay(5);if(s1=0)s1num+;flag=1;flag1=0;while(!s1);if(s1num=1)TR0=0;write_com(0x80+0x40+10);write_com(0x0f);if(s1num=2)write_com(0x80+0x40+7);if(s1num=3)write_com(0x80+0x40+4);if(s1num=4)s1num=0;write_com(0x0c);flag=0;write_ds(0,miao);write_ds(2,fen);write_ds(4,shi);if(s1num!=0)if(s2=0)delay(1);if(s2=0)while(!s2);if(s1num=1)miao+;if(miao=60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);if(s1num=2)fen+;if(fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1num=3)shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);if(s3=0)delay(1);if(s3=0)while(!s3);if(s1num=1)/*if(miao=0)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);*/miao-;if(miao=-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);if(s1num=2)fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1num=

温馨提示

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

评论

0/150

提交评论