利用51单片机,结合下面两段代码,实现数码管显示信号灯时间: 第一段: #include <reg51.h> unsigned char code table[] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6, 0xEE, 0x3E, 0x9C, 0x7A, 0x9E, 0x8E}; unsigned char i, j, flag; char Count; void putch(unsigned char n) { SBUF=n; while(TI==0); TI=0; } void main() { TMOD=0X01; EA=1; ET0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; flag=0; Count=59; while(1) { i=table[Count/10]; j=table[Count%10]; putch(i); putch(j); } } void Timer0() interrupt 1 { flag++; TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(flag==20){ flag=0; Count=Count-1; } if(Count<0){ Count=59; } i=table[Count/10]; j=table[Count%10]; putch(i); putch(j); } 第二段: #include<reg52.h> #define uchar unsigned char uchar count,ge,shi,tt,time,color,flag; uchar table[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0, 0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E}; void yellow() { time=3; P1=0x08; if(flag==1) color=3; if(flag==0) color=2; } void red() { time=20; P1=0x10; flag=1; color=1; } void green() { time=20; P1=0x04; flag=0; color=1; } void light() { switch(color){ case 1: yellow();break; case 2: red();break; case 3: green();break; } } void main(){ color=2; flag=0; count=3; time=10; tt=0; TMOD=0x01; TL0=0xB7; TH0=0x3C; EA=1; ET0=1; TR0=1; while(1){ if(tt==20){ if(count<=0){ light(); count=time; } tt=0; TR0=0; count--; TR0=1; } } } void time_0() interrupt 1{ TL0=0xB7; TH0=0x3C; tt++; }
时间: 2023-10-27 22:04:48 浏览: 181
这道题目需要你结合两段代码实现数码管显示信号灯时间,我可以给你一些指导:
1. 首先,你需要了解51单片机的工作原理和寄存器的使用方法,这样才能理解这两段代码的意义和作用。
2. 第一段代码主要是利用定时器中断实现数码管的显示,其中table数组存储了0~9这几个数字在数码管上的编码,每隔50ms就会触发一次定时器中断,然后根据flag和Count的值来更新数码管的显示内容。
3. 第二段代码主要是实现交通信号灯的控制,利用定时器中断和计数器实现每隔一定时间进行颜色的切换,黄灯的时间是3秒,红灯和绿灯的时间是20秒。
4. 你需要将这两段代码结合起来,把数码管的显示和交通信号灯的控制结合起来,当交通信号灯的颜色发生变化时,利用第一段代码实现数码管的显示。
希望这些指导能够对你有所帮助,加油!
阅读全文