文档详情

04107240 张宇君 交通红绿灯.doc

发布:2018-02-27约6.2千字共10页下载文档
文本预览下载声明
单片机实践实验报告 课题:电子闹钟 院 系:机械工程系 班 级:07汽车1班 姓 名: 张宇君 学 号: 指导老师: 朱 罕 非 东南大学成贤学院 2010年11月 交通红绿灯的论文报告 一 功能目标的描述: 在六个数码管上显示红绿黄灯,时间是递减的,红灯从30秒减到0时,黄灯开始从5秒减到0,然后绿灯从35秒减到0之后又重复上述过程,周而复始。 二 程序方案,包括组成程序的各模块的功能以及相互关系,主要的公共变量,功能函数的说明: 模块一: #includereg51.h extern void InitT0(void); //外部函数,初始化定时器TO extern void Init8255(void); //增加8255初始化 extern unsigned char DispBuf[6]; int i; extern bit xTim,xKey; //增加键值读取信号量 sbit ci=P1^0 ; void Delay(int ms); extern void TimUpdate(void); extern void DisplayTim(void); extern unsigned char KeySts; unsigned char red=30,yel=0,gre=0; unsigned char code table[16]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //根据硬件编写的字形表 void DisplayTim() //查字形表,更新显示内容 { DispBuf[0]=table[red%10]; //红灯低位送显示缓冲器 DispBuf[1]=table[red/10]; //红灯高位送显示缓冲器 DispBuf[2]=table[gre%10]; //绿灯低位送显示缓冲器 DispBuf[3]=table[gre/10]; //绿灯高位送显示缓冲器 DispBuf[4]=table[yel%10]; //黄灯低位送显示缓冲器 DispBuf[5]=table[yel/10]; //黄灯高位送显示缓冲器 } void TimUpdate(void) { unsigned char zt=0; unsigned char i; for(i=0;i6;i++) DispBuf[i]=0xFF; //初始时关闭显示 red=30; //红灯初始化时间值 gre=0; yel=0; InitT0(); //调用TO初始化函数 Init8255(); while(1) { if(xTim) //检查信号量 { //若前台置上时钟更新标志 DisplayTim(); //调用显示更新函数 xTim=0; //清标志 switch(zt) { case 0: if (--red==0) //红灯减到0 { yel=5; //则黄灯跳到5 zt=1; red=0; //红灯为0 } break; case 1: if (--yel==0) { gre=35; zt=2; yel=0; } break; case 2: if (--gre==0) { red=30; zt=0; gre=0; }
显示全部
相似文档