标题: 51单片机新手写读秒程序出错,有大佬给看看么? [打印本页]

作者: kailiu    时间: 2022-1-5 20:10
标题: 51单片机新手写读秒程序出错,有大佬给看看么?
  1. #include <REGX52.H>
  2. #define uchar unsigned char
  3. #define  shu P0
  4. unsigned char code a[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};

  5. uchar j,k;
  6. void delay(uchar i)
  7. {
  8.   for(j=i;j>0;j--)
  9.     for(k=125;k>0;k--);
  10. }
  11. void xian(uchar shi,uchar ge)
  12. {
  13.         P2=0xE7;
  14.         shu=a[shi];
  15.         delay(5);
  16.         shu=0x00;
  17.         P2=0xe3;
  18.         shu=a[ge];
  19.         delay(5);
  20. }

  21. uchar i=0,shi1=0,ge1=0,ji=0;
  22. void main()
  23. {
  24.         i=0;
  25.         while(i<60)
  26.         {
  27.                 i++;
  28.                 shi1=i/10;
  29.                 ge1=i%10;
  30.                 while(ji<50)
  31.                 {        
  32.                         ji++;
  33.                         xian(shi1,ge1);        
  34.                 }        
  35.         }
  36. }
复制代码
这个程序写的总是卡在01就不进行了。不知道哪里错了有大佬看看吗




作者: kailiu    时间: 2022-1-5 20:32
                while(ji<50)
                {      
                        ji++;
                        xian(shi1,ge1);      
                }   
是不是这段出毛病了,我刚刚把这个循环去掉只保留
xian(shi1,ge1);
是能运行的不过太快了

作者: 人工置顶员    时间: 2022-1-5 22:19
顶一下
作者: lkc8210    时间: 2022-1-5 22:59
本帖最后由 lkc8210 于 2022-1-6 09:06 编辑

ji没有清零
在29/30行之间
插一句 ji=0;

作者: 13205495918    时间: 2022-1-6 08:11
函数命名的时候,为了增强可读性最好用英文吧,注意一下这个习惯
作者: man1234567    时间: 2022-1-6 08:22
while(ji<50)
这句是要显示50次后再显示下一个,去掉后只显一次了;
delay(5);
去掉后太快了就调这个,以前是5*50=250你感觉卡死,现在感觉快就调到10或适合的数。

建议先画框图再写程序
作者: 温xyz    时间: 2022-1-6 10:24
ji没有声明,也许是笔误。
作者: wulin    时间: 2022-1-6 11:46
kailiu 发表于 2022-1-5 20:32
while(ji

#include <REG51.H>
#define uchar unsigned char
#define  shu P0
unsigned char code a[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};
uchar i,j;
bit k=0;

void xian(uchar t)
{
        shu=0x00;
        if(k)
        {       
                P2=0xfe;
                shu=a[t/10];
                k=~k;
        }
        else
        {
                P2=0xfd;
                shu=a[t%10];
                k=~k;
        }
}

void main()
{
        TMOD = 0x01;
        TH0 = 0xEC;
        TL0 = 0x78;
        TR0 = 1;
        while(1)
        {
                if(TF0)
                {
                        TF0 = 0;
                        TH0 = 0xEC;
                        TL0 = 0x78;
                        if(++i>=200)
                        {
                                i=0;
                                j=++j%100;
                        }
                        xian(j);
                }
        }
}
作者: kailiu    时间: 2022-1-9 19:21
lkc8210 发表于 2022-1-5 22:59
ji没有清零
在29/30行之间
插一句 ji=0;

写写带=大佬,就是这个问题。解决了
作者: kailiu    时间: 2022-1-9 19:23
温xyz 发表于 2022-1-6 10:24
ji没有声明,也许是笔误。

声明了的,刚学写的不规范,用3楼的方法解决了
作者: kailiu    时间: 2022-1-9 19:30
wulin 发表于 2022-1-6 11:46
#include
#define uchar unsigned char
#define  shu P0

我已经学到定时器了,大佬的代码基本看得懂,
大佬这个显示代码写法第一次见,学习了。
        if(k)
        {      
                P2=0xfe;
                shu=a[t/10];
                k=~k;
        }
        else
        {
                P2=0xfd;
                shu=a[t%10];
                k=~k;
        }
作者: kailiu    时间: 2022-1-9 19:31
13205495918 发表于 2022-1-6 08:11
函数命名的时候,为了增强可读性最好用英文吧,注意一下这个习惯

嗯嗯,我英文不好。尽量
作者: kailiu    时间: 2022-1-9 19:32
man1234567 发表于 2022-1-6 08:22
while(ji

程序框图是高中学的那个么,我试试看把




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1