《项目五 简易计算器的制作与实现电子课件 中职 单片机c语言程序设计及仿真.pptx》由会员分享,可在线阅读,更多相关《项目五 简易计算器的制作与实现电子课件 中职 单片机c语言程序设计及仿真.pptx(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、项目五、简易计算器的制作与实现项目五、简易计算器的制作与实现任务任务1 1 数码管静态显示数码管静态显示任务描述任务描述:单片机P1.0连接一个独立按键KEY,当KEY按下时,LED灯亮;当KEY松开时,LED灯灭。1.独立按键工作原理独立按键工作原理典型电路典型电路知识链接知识链接 每个按键单独占用单片机每个按键单独占用单片机I/OI/O口,互不影响。口,互不影响。1.独立按键工作原理独立按键工作原理工作原理工作原理知识链接知识链接1.独立按键工作原理独立按键工作原理消抖消抖知识链接知识链接硬件消抖:可在按键输出端加R-S触发器(双稳态触发器)或单稳态触发器构成去抖电路。软件消抖:在单片机检
2、测到有按键的I/O口为低电平时,不是立即认定该键已被按下,而是执行一个510ms或时间更长的延时程序后,再次检测I/O口,如果仍为低电平,说明该键的确被按下,这实际上是避开了按键按下时的前沿抖动。2.选择判断选择判断if语句语句 知识链接知识链接基本形式:if(表达式)语句;2.选择判断选择判断ifelse语句语句 知识链接知识链接基本形式:if(表达式)语句1;else 语句2;2.选择判断选择判断if-else if-else语句语句 知识链接知识链接基本形式:if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;else if(表达式m)语句m;el
3、se语句n;1.任务分析任务分析任务实施任务实施单片机P3.0连接一个独立控键,P1.0连接发光二极管。当按键按下时,单片机P3.0端口将会检测到一个低电平(0),可以用if语句进行判断,完成按键控制LED灯的目的。2.程序流程程序流程任务实施任务实施3.程序编写程序编写任务实施任务实施void main()while(1)if(key=0)/检测按键key有无按下。delayms(10);/延时10ms,消除按键前沿抖动。if(key=0)/再次检测按键有无按下。led=0;/发光二极管亮。else /按键key没有按下时 led=1;/发光二极管led灭 4.程序电路仿真程序电路仿真绘制电
4、路图绘制电路图任务实施任务实施4.程序电路仿真程序电路仿真仿真仿真任务实施任务实施任务任务2 2 数码管动态显示数码管动态显示任务描述任务描述:利用数码管动态显示方式,编写程序在八位共阳数码管上显示“07”数字。1.数码管动态显示原理数码管动态显示原理知识链接知识链接2.锁存器锁存器74HC573知识链接知识链接2.锁存器锁存器74HC573真值表真值表知识链接知识链接OE:三态输出使能控制端。1 时,输出高阻态;0 时,输出高电平或低电平。LE:锁存使能输入控制端。1 时,输出和输入直通,输出受输入信号控制;0 时,输出锁存数据,输出不受输入信号控制。1.任务分析任务分析任务实施任务实施本任
5、务完成数码管动态的显示,利用了74HC573的锁存输出功能,输出锁存的数据,不受输入数据的影响。所以把数码的段码和位码都用单片机的P0端口输出。在程序设计中,把数码管的显示驱动程序单独定义,这样增强了主函数的可读性和逻辑性。编写数码管动态显示驱动程序,基本函数如下:写段码函数:void writeduan(uchar x);写位码函数:void writewei(uchar x);8位数码管动态扫描显示函数:void display()。2.程序流程程序流程任务实施任务实施3.程序编写程序编写数码动态扫描程序数码动态扫描程序任务实施任务实施/*写段码函数*/void writeduan(uch
6、ar x)leddata=x;/送段码到P0口 du=1;du=0;/完成段码锁存 /*写位码函数*/void writewei(uchar x)leddata=x;/送段码到P0口 we=1;we=0;/完成段码锁存/*8位数码管动态扫描显示函数*/void display()uchar i,wei;wei=0 x01;/位码赋初值,第1位数码管显示 for(i=0;i8;i+)/8位数码管依次扫描完 writeduan(shumaai);/写段码 writewei(wei);/在相应的位显示 delay_ms(2);/显示约2ms writewei(0 x00);/熄灭所有位,消除重影 w
7、ei=wei1;/下一位数码管显示 3.程序编写程序编写主程序主程序任务实施任务实施/*主函数*/void main()uchar i;while(1)for(i=0;i8;i+)ai=i;display();4.程序电路仿真程序电路仿真绘制电路图绘制电路图任务实施任务实施4.程序电路仿真程序电路仿真仿真仿真任务实施任务实施任务任务3 3 电子秒表的制作与实现电子秒表的制作与实现任务描述任务描述:利用8位共阳数码管制作一个电子秒表,显示方式为“00-00-00”,分别对应时、分、秒显示。1.中断中断知识链接知识链接8051系列单片机对中断的处理可以概括为中断请求、中断响应、中断返回三个过程。1
8、.中断中断中断源中断源知识链接知识链接1.中断中断中断系统结构中断系统结构知识链接知识链接2.定时定时/计数器计数器结构结构知识链接知识链接2.定时定时/计数器计数器TMOD知识链接知识链接GATE:门控位。C/T():定时/计数器选择位。M1M0:定时器工作方式选择位。M1M0=00:定时器工作于方式0;M1M0=01:定时器工作于方式1;M1M0=10:定时器工作于方式2;M1M0=11:定时器工作于方式3;2.定时定时/计数器计数器TCON知识链接知识链接TF1/TF0:T1/T0溢出标志位。当T1或T0产生溢出时,由硬件自动置位中断触发器TF(1/0),并向CPU申请中断。如果用中断方
9、式,则CPU在响应中断服务程序后,TF(1/0)被硬件自动清0。如果用软件查询方式对TF(1/0)进行查询,则在定时/计数器回0后,应当用指令将TF(1/0)清0。TR1/TR0:T1/T0运行控制位。可用于对TR1或TR0进行置位或清0,即可启动或关闭T1或T0的运行。2.定时定时/计数器计数器工作方式工作方式知识链接知识链接工作方式02.定时定时/计数器计数器工作方式工作方式知识链接知识链接工作方式1定时/计数器工作方式1是16位计数器方式,由TL1/TL0和TH1/TH0共同构成16位计数器。工作方式1与工作方式0的基本工作过程相似,但由于工作方式1是16位计数器,因此,它比工作方式0有
10、较宽的定时/计数范围。2.定时定时/计数器计数器工作方式工作方式知识链接知识链接工作方式2定时/计数器的工作方式2是自动再装入时间常数8位计数器方式。TH1/TH0仅用来存放TL1/TL0初次置入的时间常数。在TL1/TL0计数满后,即置位TF1/TF0,向CPU申请中断,同时存放在TH(1/0)中的时间常自动再装入TL1/TL0,然后重新开始定时或计数。2.定时定时/计数器计数器工作方式工作方式知识链接知识链接工作方式3定时/计数器工作方式3是两个独立的8位计数器且仅T0有这种工作方式,如果将T1置为工作3方式,则T1将处于关闭状态。当T0工作于方式3时,TL0构成8位计数器可工作于定时/计
11、数状态,并使用T0的控制位和TF0的中断源。THO则只能工作于定时器状态,使用T1中的TR1、TF1的中断源。2.定时定时/计数器计数器计数初值设定计数初值设定知识链接知识链接设置工作方式TMOD=0 x01;/TMOD=0000 0001B,低四位GATE=0,C/=0,M1M0=01。2.定时定时/计数器计数器计数初值设定计数初值设定知识链接知识链接计算实际计数值设单片机时钟电路的振荡频率为11.0592MHz,则12分频后得到的机器周期为:2.定时定时/计数器计数器计数初值设定计数初值设定知识链接知识链接计算实际计数值2.定时定时/计数器计数器计数初值设定计数初值设定知识链接知识链接初值
12、计算定时/计数器计数初值的计算公式如下:式中,n为由工作方式决定的定时/计数器位数。工作方式0:n=13,工作方式1:n=16,3.数码管取模软件的使用数码管取模软件的使用知识链接知识链接左边选择数码管的类型:共阳极、共阴极。右边选择取模方式。对于单个数字或字符而言,采用手动取模,分别把相应的字段点亮即可。数字或字母比较多的情况下,通常采用定义数组的形式,则采用“生成C语言代码”形式,该软件自动把所有数字或字母以数组的形式成生十六进制的代码,再复制出来即可。1.任务分析任务分析任务实施任务实施本任务利用8位共阳数管,完成时钟显示。为了节约硬件资源采用数码管动态显示和定时器中断形式。定时器中断初
13、始化分析采用定时器T0,工作1方式,所以TMOD=0 x01;定时器中断1次假设为50ms,中断20次为1s钟。所以实际计数值为46083;定时器T0的计数初值为:TH0=(65536-46083)/256;/定时器T0高8位赋初值TL0=(65536-46083)%256;/定时器T0低8位赋初值2.程序流程程序流程任务实施任务实施3.编写程序编写程序主程序主程序任务实施任务实施void main()定时器中断初始化 while(1)a0=h/10;a1=h%10;/第一、二位数码管显示小时 a2=22;/第三位数码管显示“”a3=m/10;a4=m%10;/第四、五位数码管显示分钟 a5=
14、22;/第六位数码管显示“”a6=s/10;a7=s%10;/第七、八位数码管显示秒钟 display();/调用数码管动态扫描函数定时器中断初始化TMOD=0X01;TH0=(65536-46083)/256;TL0=(65536-46083)%256;EA=1;ET0=1;TR0=1;3.编写程序编写程序中断服务程序中断服务程序任务实施任务实施void time0()interrupt 1 /设置中断类型TH0=(65536-46083)/256;TL0=(65536-46083)%256;n+;/中断计数,中断1次50ms if(n=20)/中断20次为1秒钟 n=0;s+;if(s=60)s=0;m+;if(m=60)m=0;h+;if(h=24)h=0;4.程序电路仿真程序电路仿真绘制电路绘制电路任务实施任务实施4.程序电路仿真程序电路仿真仿真仿真任务实施任务实施