找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1193|回复: 10
收起左侧

哥哥姐姐们帮帮俺一直想不明白这个代码为什么到第二个黄灯就不再亮了

[复制链接]
ID:1095153 发表于 2023-10-16 02:25 | 显示全部楼层 |阅读模式
#include<reg51.h>   
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int

uchar Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar nt=10,wt=10,sz=0,t,DJS=10,seg=10,tx=5;
bit ms=0;sbit k = P3^0;

sbit we1=P0^0;
sbit we2=P0^1;

sbit NSG=P1^5;
sbit NSY=P1^4;
sbit NSR=P1^3;
sbit WEG=P1^2;
sbit WEY=P1^1;
sbit WER=P1^0;

void delay(uint t);
void display();
void Init_Timer0(void);
void NST();
void WET();
void jstx();void delay(uint t)                  
{
        uchar x,y;
        for(x=0;x<t;x++)   
                for(y=0;y<200;y++);
}void main()
{
        Init_Timer0();
        while(1)
        { if(sz==0)   
                {
                        if(ms==0)
                        {NST();}  
                        if(ms==1)
                        {WET();}
                }display();
        }
       
}void display()
{
                we1=0;
          we2=1;   
                P2=Tab[seg/10];
                delay(5);  
                P2=0x00;   
                we1=1;     
          we2=0;  
                P2=Tab[seg%10];
                delay(5);   
                P2=0x00;          
}

void Init_Timer0(void)
{
        TMOD= 0x01;                       
        TH0=0x3c;      
        TL0=0xb0;
   IP=0x02;     
        TR0=1;  
        ET0=1;  
   EA=1;       
}

void timer0 (void) interrupt 1
{
        TH0=0x3c;
        TL0=0xb0;
        t++;        
        if(t==20)
        {
                DJS--;   
                t=0;
                if(seg==0&&sz%2==0)      
                 {
                         seg=5;
                         sz++;
                 }
                 else if(seg==0&&sz%2==1)  
                 {
                         seg=10;
                         sz++;
                 }
                 switch(sz%2)
                 {
                         case 0:  
                                  NSG=0;
        NSR=1;
        NSY=1;
               
        WER=0;
        WEG=1;
        WEY=1;
                            break;
                         case 1:  
                                  NSG=1;
        NSR=1;
        NSY=0;
               
        WER=0;
        WEG=1;
        WEY=1;
                            break;
                         case 2:
                                  NSG=1;
        NSR=0;
        NSY=1;
               
        WER=1;
        WEG=0;
        WEY=1;
                            break;
                         case 3:  
                                 NSG=1;
        NSR=0;
        NSY=1;
               
        WER=1;
        WEG=1;
        WEY=0;
                            break;
                 }void WET()
{
        seg=DJS;
        NSG=1;
        NSR=0;
        NSY=1;
        WER=1;
        WEG=0;
        WEY=1;
}void NST()
{
        seg=DJS;
        NSG=0;
        NSR=1;
        NSY=1;
               
        WER=0;
        WEG=1;
        WEY=1;

image.jpg
回复

使用道具 举报

ID:638524 发表于 2023-10-16 08:48 | 显示全部楼层
看你仿真图,只练了led的头两位,肯定只亮两位噻
回复

使用道具 举报

ID:844772 发表于 2023-10-16 08:53 | 显示全部楼层
问题应该在这:  switch(sz%2) 怎么会进入 case 3 和case 4 呢?
另外是自己写的程序吗?全篇自己写的人很少了,但即使给自己用也应该写注释。
回复

使用道具 举报

ID:161164 发表于 2023-10-16 09:00 | 显示全部楼层
1. 代码不完整
2. 为啥switch(sz%2)要mod 2?
回复

使用道具 举报

ID:707333 发表于 2023-10-16 09:20 | 显示全部楼层
DJS就--了,没有还原到20;sz就++了,迟早会爆
回复

使用道具 举报

ID:1095153 发表于 2023-10-16 11:08 来自手机 | 显示全部楼层
liaojiaao 发表于 2023-10-16 08:48
看你仿真图,只练了led的头两位,肯定只亮两位噻

是一开始红绿灯先亮倒计时倒计时到0再跳到5黄灯亮,但是他就不动了不是应该继续走程序吗
回复

使用道具 举报

ID:1095153 发表于 2023-10-16 11:11 来自手机 | 显示全部楼层
glinfei 发表于 2023-10-16 08:53
问题应该在这:  switch(sz%2) 怎么会进入 case 3 和case 4 呢?
另外是自己写的程序吗?全篇自己写的人很 ...

但是他怎么进入到case2就不动了
俺已经绞尽脑汁了
这样可以吗
image.jpg
回复

使用道具 举报

ID:1095153 发表于 2023-10-16 11:11 来自手机 | 显示全部楼层
lkc8210 发表于 2023-10-16 09:00
1. 代码不完整
2. 为啥switch(sz%2)要mod 2?

这已经是俺的全部代码了
回复

使用道具 举报

ID:1095153 发表于 2023-10-16 11:12 来自手机 | 显示全部楼层
topsoft 发表于 2023-10-16 09:20
DJS就--了,没有还原到20;sz就++了,迟早会爆

但是我看其他人的都是这样做的
回复

使用道具 举报

ID:844772 发表于 2023-10-16 14:34 来自手机 | 显示全部楼层
yyyeing 发表于 2023-10-16 11:11
但是他怎么进入到case2就不动了
俺已经绞尽脑汁了
这样可以吗

它就进不了case2,任何数的2的余数只有0和1,后边的程序switch 没问题了,但程序优化空间太大,达到目的再说吧
回复

使用道具 举报

ID:1095153 发表于 2023-10-16 15:24 来自手机 | 显示全部楼层
glinfei 发表于 2023-10-16 14:34
它就进不了case2,任何数的2的余数只有0和1,后边的程序switch 没问题了,但程序优化空间太大,达到目的再 ...

好的辛苦你了!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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