51单片机仿真交通灯倒计时显示失败

作者&投稿:大叔荔 (若有异议请与网页底部的电邮联系)
求51单片机控制的交通灯C程序和仿真图,要求红灯30秒,绿灯25秒,黄灯闪5秒,倒计时显示~

你好!
是这样的效果吗,私信联系我吧

#include
#define uchar unsigned char
#define uint unsigned int
sbit RED_A=P3^0; //东西向指示灯
sbit YELLOW_A=P3^1;
sbit GREEN_A=P3^2;
sbit RED_B=P3^3; //南北向指示灯
sbit YELLOW_B=P3^4;
sbit GREEN_B=P3^5;
sbit KEY1=P1^0;
sbit KEY2=P1^1;
sbit KEY3=P1^2;
//延时倍数,闪烁次数,操作类型变量
uchar Flash_Count=0,Operation_Type=1,LEDsng,LEDsns,LEDewg,LEDews,discnt;
uint Time_Count=0,time;
uchar ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
void displaysn()
{
LEDsng=((time-Time_Count)/20)%10;
LEDsns=((time-Time_Count)/20)/10;
LEDewg=0x10;
LEDews=0x10;
}
void displayew()
{
LEDewg=((time-Time_Count)/20)%10;
LEDews=((time-Time_Count)/20)/10;
LEDsng=0x10;
LEDsns=0x10;
}
//定时器0 中断函数
void T0_INT() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
switch(Operation_Type)
{
case 1: //东西向绿灯与南北向红灯亮
if((Time_Count%20)==0)displayew();
RED_A=0;YELLOW_A=0;GREEN_A=1;
RED_B=1;YELLOW_B=0;GREEN_B=0;
if(++Time_Count!=time) return;
Time_Count=0;
Operation_Type=2;
break;
case 2: //东西向黄灯开始闪烁,绿灯关闭
LEDewg=0x0;
LEDews=0x0;
if(++Time_Count!=8) return;
Time_Count=0;
YELLOW_A=~YELLOW_A;GREEN_A=0;
if(++Flash_Count!=6) return; //闪烁
Flash_Count=0;
Operation_Type=3;
break;
case 3: //东西向红灯与南北向绿灯亮
if((Time_Count%20)==0)displaysn();
RED_A=1;YELLOW_A=0;GREEN_A=0;
RED_B=0;YELLOW_B=0;GREEN_B=1;
if(++Time_Count!=time) return;
Time_Count=0;
Operation_Type=4;
break;
case 4: //南北向黄灯开始闪烁,绿灯关闭
LEDsng=0x0;
LEDsns=0x0;
if(++Time_Count!=8) return;
Time_Count=0;
YELLOW_B=~YELLOW_B;GREEN_A=0;
if(++Flash_Count!=6) return; //闪烁
Flash_Count=0;
Operation_Type=1;
break;
}
}
void t1_isr() interrupt 3
{
TR1=0;
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
TR1=1;
switch(discnt)
{
case 0:
P2=0x02;
P0=ledtab[LEDewg];
break;
case 1:
P2=0x01;
P0=ledtab[LEDews];
break;
case 2:
P2=0x08;
P0=ledtab[LEDsng];
break;
case 3:
P2=0x04;
P0=ledtab[LEDsns];
break;
default:discnt=0;break;
}
discnt++;
discnt&=0x03;
}
void delay()
{
uint i;
for(i=0;i<1000;i++);
}
//主程序
void main()
{
TMOD=0x11; //T0 方式1
EA=1;
ET0=1;
TR0=1;
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
TR1=1;
ET1=1;
time=120;
Time_Count=100;
Time_Count=0;
Operation_Type=1;
while(1)
{
if(KEY1==0) //按一下加1S
{
delay();
if(KEY1==0)
{
while(KEY1==0);
TR0=0;
time+=20;
LEDsng=(time/20)%10;
LEDsns=(time/20)/10;
LEDewg=0x10;
LEDews=0x10;
}
}
if(KEY2==0) //按一下减1S
{
delay();
if(KEY2==0)
{
while(KEY2==0);
TR0=0;
time-=20;
if(time==0)time=20;
LEDewg=(time/20)%10;
LEDews=(time/20)/10;
LEDsng=0x10;
LEDsns=0x10;
}
}
if(KEY3==0) //启动
{
delay();
if(KEY3==0)
{
while(KEY2==0);
TR0=1;
Time_Count=0;
}
}
}
}

interrupt 0是外部中断0的入口。这里void time() interrupt 0,看名字是和时间有关的,不过使用的是外部中断。。
interrupt 1是定时器0的中断入口,interrupt 3是定时器1的中断入口。
从函数的命名上看,是你的中断入口搞错了。
其他的就要看具体的调试信息了

看程序,你是“正”计时显示。想要“倒”计时,试试如下改动:

void timer0() interrupt 1
{
TH0 = (65536 - 1000) / 256; TL0 = (65536 - 1000) % 256;
num1++;
if(num1 == 1000) {
num1 = 0; //毫秒
num--;
if(num == 0) {
num = 10; //秒
t--;
}
if(t == 0) t = 10; //10秒
};
display();
}

另外,num1的数据类型选用不当,以它现在的类型,永远也到不了1000。

最好先画好流程图,再写程序

如果流程图正确,就是程序的问题了,否则肯定不行

你不知道调试吗,你什么情况也不描述.我是懒得要这 100分


单片机 交通灯
这个程序供你参考 1. C_51源程序 能实现上述功能 include<reg51.h> define uchar unsigned char define FX_Time 5 define JG_Time 1 define FX_Cnt FX_Time*100 define JG_Cnt JG_Time*100 uchar DispX[7]={0x9a,0x9c,0xa9,0xc9,0x99,0x9a,0xa9};int Counter;int I=0,J=0,m=0...

有人可以帮我设计一个关于单片机的交通灯的程序吗,不需要太复杂就行了...
以前做51的时候写过:include<reg51.h> sbit D9=P2^7;sbit D10=P2^6;unsigned long int xx,y,j,k=0,num1,num2,num3,num4,num4,num5,num6,num7,num8,num9,num10,num11,num12,num13,num14,num15,num16,num17,num18,num19,num20,num21,num22,sum;void main(){ TMOD=0x01;...

基于单片机十字路口交通灯控制的模拟
include <AT89X52.H> \/\/ define uint unsigned int \/\/宏定义 define uchar unsigned char \/\/宏定义 sbit xg=P3^0; \/\/位定义 sbit xy=P3^1;sbit xr=P3^2;sbit yg=P3^3;sbit yy=P3^4;sbit yr=P3^5;sbit led1=P2^0;sbit led2=P2^1;uint mun,...

急求:单片机汇编语言设计的交通灯,各位大侠帮帮忙 谢谢!!!
设计要求:用AT89c51设计,要有驱动程序,东西南北方向的交通灯用六个指示灯分别别表示两个方向的红黄绿灯,要有复位功能,晶振为12MHZ,同时用数码管显示倒计时时间,可用按钮实现控... 设计要求:用AT89c51 设计,要有驱动程序,东西南北方向的交通灯 用六个指示灯分别别表示两个方向的红黄绿灯,要有复位功能,晶振为12M...

...单片机简易模拟交通灯,要用Proteus仿真,如下
EA=1;ET0=1;TMOD=0x01;TH0=(65536-50000)\/256;TL0=(65536-50000)%256;TR0=1;} void time0() interrupt 1 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;i++;if(i==20){ i=0;j--;m--;m1--;m2--;} s1=j\/10;s2=j%10;s1=m1\/10;s2=m1%10;if(j==0){ m=30;s1...

单片机c语言写简单交通灯
P10 = 1;\/\/红灯亮的端口 P11 = 0;P12 = 0;} if(c==1){ P11 = 1;\/\/绿灯亮的端口 P10 = 0;P12 = 0;} if(c == 2){ b = d;\/\/黄灯亮,显示为5~0 --d;\/\/\/这里 P12 = 1;P11 = 0;P10 = 0;} if(c==3){ c=0;} } } void show(){ P2 = (b\/10)*16 + b...

用单片机实现交通灯~~急~~~求教会~~~
KEILC 的安装目录下有 一个交通灯的例程

单片机的交通灯课程设计,希望大神能帮我!
define uchar unsigned char define red (~0x01)define yellow (~0x02)define green (~0x04)define left (~0x08)define nbred (~0x10)define nbyellow (~0x20)define nbgreen(~0x40)define nbleft (~0x80)uint num2;uchar dx_js,nb_js;uchar zt;uchar code tab1[]={0,20, 5, 5, ...

利用单片机控制3种颜色灯亮——简易的交通灯控制。
include <reg51.h> include <intrins.h> sbit wei=P2^7;sbit duang=P2^6;char a,b,c,d,t0,dx,nb,flag,flag1;int t;unsigned char code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};void delay(){ int x=300;while(x--);} void init(void){ dx=20;...

单片机交通灯
打包的仿真电路和程序,里面两个程序,一个十字路口交通灯,一个人行横道交通灯!都是汇编写的,共阴的数码管,想改成共阳的话,把所有涉及到LED的端口均做“按位取反”处理就可以了。

巴林右旗18882676907: 51单片机仿真交通灯倒计时显示失败 -
史薇力扬: 最好先画好流程图,再写程序 如果流程图正确,就是程序的问题了,否则肯定不行

巴林右旗18882676907: 51单片机60秒倒计时,程序运行出错,求解 ( STAR: MOV R2,#60) -
史薇力扬: ORG 00H ; SJMP STAR ; ORG 1BH; SJMP TIS; 转T1中断服务程序 ORG 30H; STAR: MOV R2,#60H; 倒计时初值 MOV R4,#20H; 定时中断溢出计数器 MOV IE,#88H; 开中断 MOV TMOD,#10H;MOV TH1,#3CH; 定时初值 MOV TL1,#0B0H...

巴林右旗18882676907: 51单片机60秒倒计时,程序运行出错,求解(STAR:MOVR2,#60) -
史薇力扬: 朋友,我来告诉你答案!ORG00H;SJMPSTAR;ORG1BH;SJMPTIS;转T1中断服务程序ORG30H;STAR:MOVR2,#60H;倒计时初值MOVR4,#20H;定时中断溢出计数器MOVIE,#88H;开中断MOVTMOD,#10H;MOVTH1,#3CH;定时初值MOVTL...

巴林右旗18882676907: 为什么我的单片机倒计时屏幕原来通电时候还亮,后来就不亮了呢? -
史薇力扬: 51单片机开发实验仪ADDA模块的小灯,一通电亮一下就不亮了,这种情况,玲珑剔透陆续突兀解开.

巴林右旗18882676907: 利用mcs - 51单片机指令系统设计一段交通灯轮流点亮的程序 -
史薇力扬: 参考程序, 具体留言商议.ORG 0000HLJMP MAINORG 0100H MAIN:MOV SP,#60H ; LCALL DIR ;调用日期、时间显示子程序 LOOP:MOV P1,#0FFHLJMP TESTLCALL ROAD1 ;路口1的车直行时各路口灯亮情况LCALL DLY30s ;...

巴林右旗18882676907: 急求单片机数码管显示交通灯倒计时的汇编程序 -
史薇力扬: NAME T3 ;I/O口扩展实验一 PORT EQU 0CFA0H ;片选地址CS0 CSEG AT 0000H LJMP START CSEG AT 4100H START: MOV A,#11H ;两个红灯亮,黄灯、绿灯灭 ACALL DISP ;调用273显示单元(以下雷同) ACALL DE3S ;延时3秒 ...

巴林右旗18882676907: c51单片机交通灯倒计时 -
史薇力扬: #include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit spk=P3^0; sbit k0=P3^2; sbit k1=P3^7; sbit k2=P3^6; sbit red1=P0^0; sbit yellow1=P0^1; sbit green1=P0^2; sbit red2=P0^3; sbit yellow2=P0^4; sbit green2=P0^5; uchar...

巴林右旗18882676907: 关于单片机设计模拟交通灯的数码管显示问题及程序 -
史薇力扬: 数码管,也称7段数码管,分为ABCDEFG,7个字段,通过字段的点亮显示不同的数字. 数码管又分为:共阳极数码管和共阳极数码管,根据需要自己选择. 关键还是字段的驱动,根据人眼的视觉暂留,通过对IO口的高速扫描,实现数字的显示...

巴林右旗18882676907: 80c51单片机交通灯程序 -
史薇力扬: ORG 1000H L:JNB P3.0,LP3JNB P3.1,LP2 ;判断p3.1,p3.0口;如果P3.0为1的话,正常运行交通灯;如果P3.1为1的话,正常运行交通灯;如果P3.1为0的话,依次点亮灯;如果P3.0为0的话,停止交通灯,只有黄灯闪烁;正常运行交通...

巴林右旗18882676907: 谁能 帮我改一下用51单片机仿真的跑马灯程序错误 谢谢帮忙后会再给的 -
史薇力扬: char code i=0;改成char i=0;因为你下面i的变量是重新赋值了,所以不能用code关键字的!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网