找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1940|回复: 5
收起左侧

交通信号灯程序在单片机开发板上的实现,数码管ok LED显示有问题

[复制链接]
ID:961087 发表于 2021-9-10 11:09 | 显示全部楼层 |阅读模式
各位大佬,下边程序是我在开发板上实现交通灯的程序,我发现数码管显示是没有问题的,但就是对应的LED是没有反应的,在开发板上显示出来的是数码管在进行倒计时,但是LED只是亮了一个,其他都没亮(以很快的频率闪烁),下图为开发板,附录为开发板原理图

单片机源程序如下:
#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char
uchar flag1=0,flag2=0,flag3=0;
uchar table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar table2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar table3[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
uchar dig_num=60,num1,num;
sbit dula=P2^6;
sbit wela=P2^7;
sbit red=P1^0;
sbit green=P1^3;
sbit yellow=P1^6;
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}
void display(dig)
{
        uint shi,ge;
        shi=dig/10;
        ge=dig%10;
        
        P0=0xff;
        wela=1;
        P0=0xee;
        wela=0;
        
        
        dula=1;
        P0=table2[shi];
        dula=0;
        delayms(3);
        
        P0=0xff;
        wela=1;
        P0=0xdd;
        wela=0;
        
        
        dula=1;
        P0=table2[ge];
        dula=0;
        delayms(3);
        
}
void INIT()
{
        TMOD=0x01;
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void T0_time()interrupt 1
{
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        num++;

        
}
void main()
{
        INIT();
        while(1)
        {
                display(dig_num);
                if(num==50)
                {
                        num=0;
                        dig_num--;
                        if(dig_num<=0)
                        {
                                dig_num=60;
                        }
                        if(0<dig_num<20)
                        {               
                                red=0;
                                green=0;
                                yellow=0;
                                //delayms(5);
                        }
                        if(20<dig_num<40)
                        {
                                red=1;
                                green=1;
                                yellow=0;
                                //delayms(5);
                        }
                        if(40<dig_num<60)
                        {
                                red=1;
                                green=0;
                                yellow=1;
                                //delayms(5);
                        }
          }
}
}                        


IMG_20210910_110519.jpg

TX-1C增强版原理图.pdf

943.37 KB, 下载次数: 3

回复

使用道具 举报

ID:213173 发表于 2021-9-11 06:37 | 显示全部楼层
                display(dig_num);
                if(num>=50)
                {
                        num=0;
                        dig_num--;
                        if(dig_num<=0)
                        {
                                dig_num=60;
                        }
                        if(dig_num<=20)
                        {               
                                red=0;
                                green=0;
                                yellow=0;
                        //delayms(5);
                        }
                        if(dig_num>20 && dig_num<=40)
                        {
                                red=1;
                                green=1;
                                yellow=0;
                                //delayms(5);
                        }
                        if(dig_num>40)
                        {
                                red=1;
                                green=0;
                                yellow=1;
                                //delayms(5);
                        }
                }
回复

使用道具 举报

ID:123289 发表于 2021-9-11 09:22 | 显示全部楼层
画个逻辑框图看看
回复

使用道具 举报

ID:961087 发表于 2021-9-14 11:49 | 显示全部楼层
wulin 发表于 2021-9-11 06:37
display(dig_num);
                if(num>=50)
                {

可以了可以了,想请问一下为啥用了“与”就能把LED点亮了,我自己写的那种方式单片机无法识别呢,
回复

使用道具 举报

ID:624769 发表于 2021-9-14 12:26 | 显示全部楼层
王披风 发表于 2021-9-14 11:49
可以了可以了,想请问一下为啥用了“与”就能把LED点亮了,我自己写的那种方式单片机无法识别呢,

因为,你那种写法是错误的,你只要Debug一下,看一下汇编代码就知道为什么不能那么写了。
回复

使用道具 举报

ID:961087 发表于 2021-9-15 15:01 | 显示全部楼层
wulin 发表于 2021-9-11 06:37
display(dig_num);
                if(num>=50)
                {

感谢,成功了,已经调试完毕,太感谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表