04107240 张宇君 交通红绿灯.doc
文本预览下载声明
单片机实践实验报告
课题:电子闹钟
院 系:机械工程系
班 级: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;
}
显示全部