单片机课程设计--基于单片机的城市道口交通灯控制系统内容摘要:

N N Y Y 图 8 软件总流程图 开 始 初始化中断、定时器 =0。 Shu=0? LED 闪烁灯显示状态改变 LED 数码管重新倒计时 LED 闪烁灯显示状态 LED数码 管倒计时 中 断 响 应 Shu1=0? 7 软件单元模块分析 主程序 主程序主要负责总体程序管理功能,实现人及交互设定。 由于采用动态扫描方式显示时间,因此主程序大部分要调用扫描显示程序 [5]。 主程序流程图如图 7所示: void main() { init()。 P1 = tab[0]。 a8255_CON=0x89。 //电源控制 , 进入空闲待机状态 , 中断请求有效 while(1) { shuma(shiw,gew)。 //数码管显示时间 deng()。 //灯亮状态 } } 初始化程序 初始化程序主要完成定时器的工作模式、外部中断方式等的设定。 定时器 T0 设为工作方式 1,为 16 为定时器模式,定时时间为 50ms,外部中断方式为外部中断方式 0。 程序如下: void init() //定时器和外中断 0的初始化程序 { TMOD = 0x01。 //工作在定时器工作方式 1 TH0 = 0x3c。 //装入初值 TL0 = 0xb0。 EA = 1。 //开总中断 ET0 = 1。 //开定时器 0 中断 TR0 = 1。 //启动中断 8 EX0=1。 //开外部中断 0 IT0=0。 //触发方式为低电平 } 定时器中断和数码管显示程序 1定时器中断和数码管显示程序流程图 N N Y 图 9 定时器中断和数码管显示程序流程图 2定时器中断和数码管显示程序及说明 定时中断服务程序主要用于车辆及行人的通行时间指示,其通行规则如下:先把数码管 0 至 9 十个数存起来,定时器 T0 的溢出中断周期设为 50ms,中断累计 20 次(即1s)则对倒计时单元减 1 操作。 然后通过取整和取余以及查表法逐一实现在不同的 shiw和 gew 给控制端口送不同数据码值,程序如下: uchar code table[]={ 0xA0, 0xBB,0x62,0x2A,0x39,0x2C, 0x24,0xBA,0x20, 0x28}。 T0 中断程序 现场保护 关中断 T0 T0初值重设 t0++ shu shiw=shu/10。 gew=shu%10。 a8255_PB=table[shiw] a8255_PB=table[gew] shu=0 shu=30 t0=0? 9 //共阳数码管 09 void shuma(uchar shiw, uchar gew) { if(shiw!=0) { a8255_PA=0xff。 a8255_PB=0xff。 a8255_PB=table[shiw]。 //段选,显示十位上数字 a8255_PA=0xfe。 //位选,选择数码管 PA0 作为十位 delay(1)。 } a8255_PA=0xff。 a8255_PB=0xff。 a8255_PB=table[gew]。 //段选,显示个位上数字 a8255_PA=0xfd。 //位选,选择数码管 PA1 作为个位 delay(1)。 } void time0() interrupt 1 //定时器 0中断程序 { TH0 = 0x3c。 //重新装入初始值 TL0 = 0xb0。 t0++。 if(t0%20==0) //1s 时间的变化,改变数码管的显示 shu。 if(shu==0) shu=30。 shiw=shu/10。 gew=shu%10。 } 10 定时器中断和 LED 灯显示程序 1定时器中断和 LED 灯显示程序流程图 N Y N Y 图 10 定时器中断和 LED 灯显示程序流 程图。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。