《单片机15通信》项目三(修改)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

文桦项目三简易加减计数器和交通信号灯设计任务1简易加减计数器的设计1.技能要求单片机输出口接3位数码管和三个独立按键,这3位数码管分别显示一个变量的个位、十位和百位,三个按键分别作为“加”、“减”和“清零”功能,当按下“加”键时,数码管显示的变量加1,当按下“减”键时,数码管显示的变量减1,当按下“清零”键时,数码管显示和变量为0。知识链接一键盘接口电路独立联接式无编码键盘独立联接式编码键盘1、键盘的分类与结构◆独立联接式键盘◆矩阵联接式键盘◆屏幕键盘(触摸屏)◆无编码键盘◆编码键盘无编码,简单有效,键数较少时采用编码,节省I/O口线,键数较多时采用任务1简易加减计数器的设计1.键盘的工作原理及去抖动对应任何按键来说,由于机械触点的弹性作用,触点在闭合和断开瞬间的电接触情况不稳定,造成了电压信号的抖动现象,如图所示。按键的抖动时间一般为5ms~10ms。这种现象会引起单片机对于一次键操作进行多次处理,因此必须设法消除键接通或断开时的抖动现象。常用的去抖动方法有硬件和软件两种。闭合稳定理想波形实际波形前沿抖动后沿抖动任务1简易加减计数器的设计a)硬件去抖硬件消抖可以采用R-S触发器或单稳电路构成去抖电路,分别如图所示。硬件消抖因为要增加硬件开销,造成电路复杂,除了在数字电路里使用外,在单片机系统中不太采用。任务1简易加减计数器的设计b)软件去抖在检测到有键按下时,执行一个10ms的延时程序后,再确认该键是否保持闭合状态。另外一种方法是连续判断按键所在线路的电平,如果连续100次(甚至更多)都出现低电平(一般按键都是低电平表示按下),就认为按键已经稳定,可以进行识别,这是企业实际开发产品中常用的方法。以P1.0所接按键为例,其编程流程图如图所示.P1.0置“1”,设为输入口P1.0按下?延时10msP1.0按下?按键功能代码P1.0释放?继续YYNNN任务1简易加减计数器的设计sbitkey=P1^0;key=1;//P1.0置“1”,作输入口if(key==0)//判断按键是否按下{delay10ms();//延时10msif(key==0)//再次判断按键是否按下{a++;//按键功能代码(变量a加“1”操作)while(key==0);//等待按键释放}}P1.0置“1”,设为输入口P1.0按下?延时10msP1.0按下?按键功能代码P1.0释放?继续YYNNN任务1简易加减计数器的设计以单片机为基础的电子产品设计中,键盘是一种最为常见的人机交互设备。通常,键数较少、键盘的功能简单。1.简单键盘的扫描程序设计★键盘扫描程序嵌入到主程序循环之中,与主程序一起构成主循环套。★键敲击速度约几次/S,设计键盘扫描程序时,必须保证约100mS内就要循环扫描1次。任务1简易加减计数器的设计任务1简易加减计数器的设计任务1简易加减计数器的设计读取值输出值键码键名P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.011101110EEH1#11011110DEH2#10111110BEH3#011111107EH4#11101101EDH5#11011101DDH6#10111101BDH7#011111017DH8#11101011EBH9#11011011DBH10#10111011BBH11#011110117BH12#11100111E7H13#11010111D7H14#10110111B7H15#0111011177H16#1111××××F×H无键按键数量进一步增加时,采用矩阵联接式键盘可节省更多的口线,接口电路也更简单。1.1.2矩阵连接键盘键盘扫描程序的编写(1)判别有无键按下。(2)延时。(3)键盘扫描取得闭合键的行、列值-键值。(4)用计算法或查表法得到键号。*(5)判断闭合键是否释放,如没释放则继续等待。(6)将闭合键键号保存,然后返回。键盘扫描程序一般流程:任务1简易加减计数器的设计矩阵式键盘的工作原理当键盘有键按下时,要逐行或逐列扫描,以判断是哪一个键按下。通常扫描方式有两种:扫描法和反转法。任务1简易加减计数器的设计矩阵连接键盘扫描开始P1.0-P1.3置零P1.3-P.17置高判断是否有键按下?延时去抖判断是否有键按下?置扫描初值输出行扫描信号有键按下?修改行扫描信号最后一行?确定键值返回键值NYYNYNYN知识链接二:数码管显示技术任务1简易加减计数器的设计1.2.1七段LED显示器通常的7段LED显示块中有8个发光二极管,故也叫做8段显示器。其中7个发光二极管构成七笔字形“8”,一个发光二极管构成小数点。1.LED显示器的结构与原理任务1简易加减计数器的设计2.LED显示器的显示方式(1)LED静态显示方式每一位显示都占用单独的具有锁存功能的I/O接口,com端连接在一起。(2)LED动态显示方式是将所有数码管的“a,b,c,d,e,f,g,dp”的同名端连在一起,每个数码管的COM为各自独立的位选信号。即在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态。abcdefgdpabcdefgdpabcdefgdpabcdefgdpabcdefgdpabcdefgdpCOMCOMCOMCOMCOMCOM段选位选任务1简易加减计数器的设计P0.0P1.0P1.5P1.1P1.2P1.3P1.4P1.5P1.4P1.3P1.2P1.1P1.0P0.3P0.4P0.5P0.2P0.6P0.1P0.6P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.0P0.1P0.2P0.3P0.4P0.5XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC130pFC230pFC310uFR910kVCCGNDA02B018A13B117A24B216A35B315A46B414A57B513A68B612A79B711CE19AB/BA1U274LS245R120R220R320R420R520R62012U3:A74LS0534U3:B74LS0556U3:C74LS0598U3:D74LS051110U3:E74LS051312U3:F74LS05显示器由6个共阴极LED数码管构成;P0口输出显示段码,经由一片74LS245驱动输出给LED管;P1口输出位码(片选),经由74LS05输出给LED管。动态扫描过程任务1简易加减计数器的设计首先从段选线上送出字型编码,再控制位选端,字符就显示在指定数码管上,其他位选端无效的数码管都处于熄灭状态,持续1.5ms时间,然后关闭所有显示;接下来又送出新的字型编码,按照上述过程又显示在另外一位数码管上,直到每一位数码管都扫描完为止,这一过程即为动态扫描显示。数码管其实是轮流依次点亮的,但由于人的视觉驻留效应,因此当每个数码管点亮的时间小到一定程度时,人就感觉不出字符的移动或闪烁,觉得每位数码管都一直在显示,达到一种稳定的视觉效果。任务1简易加减计数器的设计参考程序如下:#includereg51.hunsignedcharcodeTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C};unsignedcharcodeCol[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};voidDelay(){unsignedchari;for(i=0;i250;i++);}voidmain()//同时显示123456{unsignedcharj;while(1){for(j=1;j7;j++){P0=Tab[j];P1=Col[j-1];//开第一个(共阴)数码管Delay();P1=0xff;//关数码管Delay();}}}任务1简易加减计数器的设计1.3数码管显示4×4键盘编号1.技能要求单片机P2接1位数码管,P1口接由16个按键组成的4×4行列键盘。当按下这16个按键的其中之一时,数码管显示该按键对应的键盘编号。行0行1行2行3列0列1列2列3P1.4P1.5P1.6P1.7P1.0P1.1P1.2P1.35V任务1简易加减计数器的设计.仿真电路图数码管显示4×4键盘编号的电路图如下图所示,电路中的轻触按键使用元件库中的“button”元件,特别注意16个按键的连接关系及其和单片机之间的连接关系。任务1简易加减计数器的设计.程序设计与调试程序采用线翻转法识别闭合键,反转法原理:行作低电平输出,列作输入,读列线;列作低电平输出,行作输入,读行线。数码管静态显示方式。任务1简易加减计数器的设计intmain(){while(1){keyScan();}}delay(unsignedinti){while(i--);}voidkeyScan(){unsignedchartemp,a;temp=0xff;P1=0xf0;if(P1!=0xf0)//判断是否有按键按下{delay(1000);//延时去抖if(P1!=0xf0)//再次判断是否有按键按下{P1=0xf0;//行作输出,列作输入temp=P1;//读取列值P1=0x0f;//列作输出,行作输入temp=temp|P1;//读取行值并和列值合并switch(temp){case0xee:a=0;break;case0xde:a=1;break;case0xbe:a=2;break;case0x7e:a=3;break;参考程序如下:#includereg51.hunsignedcharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//09的段码0x88,0x83,0xc6,0xa1,0x86,0x8e};//A~F的段码case0xed:a=4;break;case0xdd:a=5;break;case0xbd:a=6;break;case0x7d:a=7;break;case0xeb:a=8;break;case0xdb:a=9;break;case0xbb:a=10;break;case0x7b:a=11;break;case0xe7:a=12;break;case0xd7:a=13;break;case0xb7:a=14;break;case0x77:a=15;break;}P2=seg[a];//将键值对应的段码送到P2口P1=0xf0;while(P1!=0xf0)delay(50);}}}任务1简易加减计数器的设计(1)画出硬件电路图简易加减计数器任务实施:任务1简易加减计数器的设计(2).程序设计与调试要获取一个变量的每一位数字的值,用到除法运算符“/”和模运算符“%”两个算术运算符。当两个整数作除法运算时结果仍为整数,余数则会被丢弃,因此可作为取整操作;模运算“%”表示取余操作。例如,求一个变量temp的“百、十、个”位,分别赋给变量a、b、c的操作如下:a=temp/100%10;//除以100,再对10取余b=temp/10%10;

1 / 98
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功