找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1980|回复: 12
收起左侧

51单片机新手写读秒程序出错,有大佬给看看么?

[复制链接]
ID:1000104 发表于 2022-1-5 20:10 | 显示全部楼层 |阅读模式
  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就不进行了。不知道哪里错了有大佬看看吗



回复

使用道具 举报

ID:1000104 发表于 2022-1-5 20:32 | 显示全部楼层
                while(ji<50)
                {      
                        ji++;
                        xian(shi1,ge1);      
                }   
是不是这段出毛病了,我刚刚把这个循环去掉只保留
xian(shi1,ge1);
是能运行的不过太快了
回复

使用道具 举报

ID:301191 发表于 2022-1-5 22:19 | 显示全部楼层
顶一下
回复

使用道具 举报

ID:161164 发表于 2022-1-5 22:59 | 显示全部楼层
本帖最后由 lkc8210 于 2022-1-6 09:06 编辑

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

使用道具 举报

ID:908826 发表于 2022-1-6 08:11 | 显示全部楼层
函数命名的时候,为了增强可读性最好用英文吧,注意一下这个习惯
回复

使用道具 举报

ID:584814 发表于 2022-1-6 08:22 | 显示全部楼层
while(ji<50)
这句是要显示50次后再显示下一个,去掉后只显一次了;
delay(5);
去掉后太快了就调这个,以前是5*50=250你感觉卡死,现在感觉快就调到10或适合的数。

建议先画框图再写程序
回复

使用道具 举报

ID:8222 发表于 2022-1-6 10:24 | 显示全部楼层
ji没有声明,也许是笔误。
回复

使用道具 举报

ID:213173 发表于 2022-1-6 11:46 | 显示全部楼层

#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);
                }
        }
}
回复

使用道具 举报

ID:1000104 发表于 2022-1-9 19:21 | 显示全部楼层
lkc8210 发表于 2022-1-5 22:59
ji没有清零
在29/30行之间
插一句 ji=0;

写写带=大佬,就是这个问题。解决了
回复

使用道具 举报

ID:1000104 发表于 2022-1-9 19:23 | 显示全部楼层
温xyz 发表于 2022-1-6 10:24
ji没有声明,也许是笔误。

声明了的,刚学写的不规范,用3楼的方法解决了
回复

使用道具 举报

ID:1000104 发表于 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;
        }
回复

使用道具 举报

ID:1000104 发表于 2022-1-9 19:31 | 显示全部楼层
13205495918 发表于 2022-1-6 08:11
函数命名的时候,为了增强可读性最好用英文吧,注意一下这个习惯

嗯嗯,我英文不好。尽量
回复

使用道具 举报

ID:1000104 发表于 2022-1-9 19:32 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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