新概念51单片机C语言教程实例代码.docx
《新概念51单片机C语言教程实例代码.docx》由会员分享,可在线阅读,更多相关《新概念51单片机C语言教程实例代码.docx(124页珍藏版)》请在三一文库上搜索。
1、新概念51单片机C语言教程-一入门、提高、开发、拓展全攻略编写程序,点亮第一个发光二极管#include/52系列单片机头文件sbitIedl=Pl0;声明单片机Pl口的第一位voidmain()主函数Iedl=O;/*点亮第一个发光二极管*/编写程序,点亮Pl口的假设干二极管#include/52系列单片机头文件voidmain()主函数Pl=Oxaa;/ZwhiIe(I);利用for语句延时特性,编写第个发光二极管以间隔IS亮灭闪动的程序#include/52系列单片机头文件#defineuintunsignedint宏定义sbitIedl=Pl0;声明单片机Pl口的第一位uinti,j;
2、voidmain()主函数(while(l)/大循环(Iedl=O;/*点亮第一个发光二极管*/for(i=1;i0;i)延时for(j=110;j0;j-);Iedl=I;/*关闭第一个发光二极管*/for(i=1000;i0;i-)延时for(j=110y0-);编写程序使第一个发光二极管以间隔50OmS亮灭闪动。#include#defineuintunsignedintsbitIedl=Pl0;voiddelayls();voidmain()while(l)(Iedl=O;delayls();ledl=l;delayls();voiddelayls()(uinti,j;for(i=50
3、0;i0;i)for(j=110J0-);/52系列单片机头文件宏定义声明单片机PI 口的第一位声明子函数主函数大循环/*点亮第一个发光二极管*/ 调用延时子函数/*关闭第一个发光二极管*/ 调用延时子函数子函数体编写程序使第一个二极管以亮200ms、灭800ms的方式闪动。#include/52#defineuintunsignedintsbitIedl=Pl0;voiddelayms(uint);voidmain()(while(l)(Iedl=O;delayms(200);ledl=l;delayms(800);)voiddelayms(uintxms)uinti,j;for(i=xms
4、i0;i)for(j=1100-);系列单片机头文件宏定义声明单片机Pl口的第一位声明子函数主函数大循环/*点亮第一个发光二极管*/延时200毫秒/*关闭第一个发光二极管*/延时800毫秒/i=xms即延时约XmS亳秒利用C51自带库_crol_(),以间隔500ms,实现流水灯程序#include/52系列单片机头文件#include宏定义#defineuintunsignedint#define uchar unsigned char void delayms(uint);uchar aa;void main()aa=0xfe;while(l)(Pl=aa;delayms(500);aa
5、crol_(aa, 1);1)void delayms(uint xms)uint i,j;for(i=xms;i0;i)for(j=110;j0;j-);声明子函数主函数赋初值IullIlO大循环延时500毫秒将aa循环左移1位后再赋给aa/i=xms即延时约XmS亳秒编写程序使第个数码管显示8#include sbit du!a=P26;sbit wela=P27;void main()/52系列单片机头文件申明Ul锁存器的锁存端申明U2锁存器的锁存端wela=1;PO=OxFE;wela=0;翻开U2锁存器送入位选信号关闭U2锁存器dula=l;P0=0x7F;/翻开Ul锁存器送入段
6、选信号dula=O;while(l);关闭U2锁存器程序停止到这里让实验板上6个数码管同时点亮,依次显示。到F,时间间隔为0.5ms,循环下去。(part2.1_2.cP61)#include/52系列单片机头文件#defineucharunsignedchar#defineuintunsignedintsbitdu!a=P26;申明Ul锁存器的锁存端sbitwela=P27;申明U2锁存器的锁存端ucharnum;uncharcodetable=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79
7、0x71;voiddelayms(uint);voidmain()(wela=l;翻开U2锁存端PO=Oxco;送入位选信号wela=0;关闭U2锁存端while(l)(for(num=0;num0;i)/i=xms即延时约xms亳秒for(j=110;j0;j-);第一个数码管显示1,时间为0.5s,然后关闭它,立即让第二个数码管显示2,时间为05s,在关闭它一直到最后一个数码管显示6,时间同样为0.5s,关闭它之后再回来显示第一个数码管,一直循环下去。用定时器0的方式1实现第一个发光二极管以200ms间隔闪烁,用定时器1的方式1实现数码管前两位59s循环计时。用数码管前两位显示一个十进制
8、数,变化范围为0059,开始时显示00,每按下S2键-次,数值加1;每按下S3键-次,数值减1;每按下S4键次,数值归零;按下S5键一次,利用定时器功能使数值开始自动每秒加1,再次按下S5键,数值停止加1,保持显示原数。#include/52系列单片机头文件#defineucharunsignedchar#defineuintunsignedintsbitkeyl=P34;sbitkey2=P35;sbitkey3=P36;sbitkey4=P37;sbitdula=P26;申明Ul锁存器的锁存端sbitweIa=P27;申明U2锁存器的锁存端ucharcodetable=0x3f,0x06,
9、0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71);voiddelayms(uint);ucharnumt,num;voiddisplay(ucharnumdis)显示子函数ucharshi,ge;别离两个分别要显示的数shi=numdis10;ge=numdis%10;dula=l;PO=tableshi;送十位段选数据dula=O;PO=Oxff;送位选数据前关闭所有显示,防止翻开位选锁存时wela=1;原来段选数据通过位选锁存器造成混乱PO=Oxfe;送位选数据wela=0;delayms(5);延
10、时dula=l;PO=tablege;送个位段选数据dula=O;PO=Oxff;wela=1;PO=Oxfd;wela=0;delayms(5);)voiddelayms(uintxms)uinti,j;for(i=xms;i0;i)/i=xms即延时约xms亳秒for(j=110j0-);)voidinit()/初始化函数TMOD=OXo1;/设置定时器0为工作方式1(00000001)THo=(6553645872)/256;装初值50ms一次中断TL0=(65536-45872)%256;EA=I;开总中断ETO=1;开定时器。中断if(keyl=O)(delayms(10);if(k
11、eyl=O)(num+;if(num=60)当到60时重新归Onum=0;While(!keyl);等待按键释放)1if(key2=0)(delayms(10);if(key2=0)(if(num=0)当到O时重新归60num=60;num;while(!key2);I)if(key3=0)(delayms(10);if(key3=0)(num=0;清Owhile(!key3);)1if(key4=0)(delayms(10);if(key4=0)(whilc(!key4);TRO=TR0;启动或停止定时器Ovoidmain()init(/初始化函数while(l)keyscan();disp
12、lay(num);1)voidT0_time()interrupt1THO=(6553645872)/256;重装初值TL0=(65536-45872)%256;numt+;if(numt0=20)如果到了20次,说明1秒时间到(numtO=O;然后把num清0重新再计20次num+;if(num=60)num=0;实验板上电时,数码管不显示,顺序按下矩阵键盘后,数码管上依次显示0F,六个数码管同时静态显示即可。#include/52系列单片机头文件#defineucharunsignedchar#defineuintunsignedintsbitdula=P26;申明Ul锁存器的锁存端sbi
13、tweIa=P27;申明U2锁存器的锁存端ucharcodetable=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71);voiddelayms(uintxms)(uinti,j;for(i=xms;i0;i)/i=xms即延时约xms亳秒for(j=110;j0;j-);1voiddisplay(ucharnum)PO=tablenum;显示函数只送段选数据dula=l;dula=O;)voidmatrixkeyscan()uchartemp,key;P3=0xfe;temp=P3
14、temp=tempfexf;if(temp!=Oxft)delayms(10);temp=P3;temp=temp&OxfD;if(temp!=OxfD)(temp=P3;switch(temp)(caseOxee:key=O;break;caseOxde:key=1;break;caseOxbc:key=2;break;case0x7e:key=3;break;)while(temp!=OxfD)(temp=P3;temp=temp&OxfO;)display(key);1P3=0xfd;temp=P3;temp=temp&OxfO;if(temp!=OxK)delayms(10);tem
15、p=P3;temp=temp&OxfD;if(temp!=OxfD)(temp=P3;switch(temp)caseOxed:key=4;break;caseOxdd:key=5;break;caseOxbd:key=6;break;case0x7d:key=7;break;)while(temp!=OxfD)(temp=P3;temp=temp&OxfO;)display(key);1P3=0xfb;temp=P3;temp=temp&OxfO;if(temp!=0xK)delayms(10);temp=P3;temp=temp&OxfD;if(temp!=OxfD)(temp=P3;sw
16、itch(temp)(caseOxeb:key=8;break;caseOxdb:key=9;break;caseOxbb:key=10;break;case0x7b:key=11;break;while(temp!=OxfD)(temp=P3;temp=temp&0xf0;)display(key);1P3=0xf7;temp=P3;temp=temp&OxfO;if(temp!=OxK)delayms(10);temp=P3;temp=temp&OxfD;if(temp!=OxfD)(temp=P3;switch(temp)(case0xe7:key=12;break;case0xd7:k
17、ey=13;break;case0xb7:key=14;break;case0x77:key=15;break;while(temp!=OxfD)(temp=P3;temp=temp&OxfO;display(key);PO=0;关闭所有数码管段选dula=l;dula=O;PO=OXC0;位选中所有数码管wela=1;wela=0;while(l)(matrixkeyscan();/不停调用键盘扫描程序1用单片机控制ADCo804进行数模转换,当拧动实验板上A/D旁边的电位时,在数码管的前三位以十进制方式显示出A/D转换后的数字量(8位A/D转换后数值在0255变化)。#include #i
18、nclude #define uchar unsigned char/52系列单片机头文件申明Ul锁存器的锁存端 申明U2锁存器的锁存端 定义AD的WR端口 定义AD的RD端口#defineuintunsignedintsbitdu!a=P26;-sbitwela=P27;Jsbitadwr=P36;/sbitadrd=P37;Jucharcodetable=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;voiddelayms(uintxms)uinti,j;/i=xms即延时约x
19、ms亳秒for(i=xms;i0;i-)for(j=110J0y-);voiddisplay(ucharbai,ucharshi,ucharge)显示子函数dula=l;PO=tablebai;送段选数据dula=0;PO=Oxff;送位选数据前关闭所有显示,防止翻开位选锁存时wela=1;原来段选数据通过位选锁存器造成混乱P0=0x7e;送位选数据wela=0;delayms;延时dula=l;PO=tableshi;dula=O;PO=Oxff;wela=1;P0=0x7d;wela=0;delayms(5);dula=l;PO=tablege;dula=O;PO=Oxff;wela=1;
20、P0=0x7b;wela=0;delayms(5);voidmain()/主程序uchara,Al,A2,A3,adval;wela=1;P0=0x7f;置CSAD为0,选通ADCS以后不必再管ADCSwela=0;while(l)adwr=l;-11op-0;adwr=0;启动AD转换_nop_();adwr=l;for(a=10;a0;a-)/TX-IC实验板AD工作频率较低,所以启动转换后要多留点时间用来转换/这里把显示局部放这里的原因也是为了延长转换时间disp!ay(A1,A2,A3);Pl=Oxff;读取Pl之前先给其写全1adrd=1;-11P-();adrd=0;_nop_()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 新概念 51 单片机 语言 教程 实例 代码
