找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

这个单片机程序有什么错?如何修改

查看数: 1625 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-12-14 15:29

正文摘要:

单片机源程序如下: #include<reg51.h> #define uchar unsigned char sbit start=P1^1; sbit stop=P1^0; uchar code dulatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40} ;//数字编码0-9 ...

回复

ID:740383 发表于 2021-12-23 15:21
天ノ忆 发表于 2021-12-17 14:01
你真应该感谢这些替你找到错误的人,毕竟你这代码我看一眼就不想看了,他们忍着吃%一样的恶心给你找错误挺 ...

哈哈哈
ID:139866 发表于 2021-12-17 14:01
你真应该感谢这些替你找到错误的人,毕竟你这代码我看一眼就不想看了,他们忍着吃%一样的恶心给你找错误挺不容易的
ID:161164 发表于 2021-12-14 21:56
第55行的if跑到keyscan外了
ID:883242 发表于 2021-12-14 21:12
连缩进都不愿意,出这种错误就是活该。
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. sbit start=P1^1;
  4. sbit stop=P1^0;
  5. uchar code dulatab[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40} ; //数字编码0-9
  6. uchar code welatab[]= {0xfe, 0xfd} ; //位控制字
  7. uchar msec, sec;
  8. void delay(uchar time) { // 延时
  9.         uchar i, j;
  10.         for (i=0; i<time; i++) ;
  11.         {
  12.                 for (i=0; j<110; j++) ;
  13.         }
  14. }
  15. void writeled(uchar num,addr) {
  16.         P2=0xff;
  17.         P0=dulatab[num];
  18.         P2=welatab[addr];
  19.         delay(4);
  20. }
  21. void display(uchar sec) {
  22.         uchar sech,secl ;
  23.         sech=sec/10;
  24.         secl=sec%10;
  25.         writeled(sech,0);
  26.         writeled(secl,1) ;
  27. }
  28. void init () {
  29.         TMOD=0x10;//定时器1工作方式1
  30.         TH1=0xd8;
  31.         TL1=0xf0;
  32.         TR1=1;
  33.         EA=1;
  34.         ET1=1;
  35. }
  36. void keyscan() {
  37.         if(start==0) {
  38.                 delay(2) ;
  39.                 if(start==0) {
  40.                         TR1=~TR1;
  41.                         while(start==0) {
  42.                                 display(sec);
  43.                         }
  44.                 }
  45.         }
  46. }
  47. if(stop==0&&TR1==0) {
  48.         delay(2);//延时方抖
  49.         if(stop==0) {
  50.                 sec=0;
  51.                 while(stop==0) {
  52.                         display(sec);
  53.                 }
  54.         }
  55. }
  56. void main() {
  57.         init();
  58.         while(1) {
  59.                 display(sec);
  60.                 keyscan();
  61.         }
  62. }
  63. void timer1()  interrupt 3 {
  64.         TH1=0xd8;
  65.         TL1=0xf0;
  66.         msec++;
  67.         if(msec==100) {
  68.                 msec=0
  69.                      sec++;
  70.                 if(sec==100) {
  71.                         sec=0
  72.                 }
  73.         }
  74. }
复制代码
ID:213173 发表于 2021-12-14 20:09
#include<reg51.h>
#define uchar unsigned char
sbit start=P1^1;
sbit stop=P1^0;
uchar code dulatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40} ;//数字编码0-9
uchar code welatab[]={0xfe, 0xfd} ;//位控制字
uchar msec, sec;
void delay(uchar time)// 延时
{
        uchar i, j;
        for (i=0;i<time;i++)
                for (i=0;j<110;j++);
}
void writeled(uchar num ,addr)
{
        P2=0xff;
        P0=dulatab[num];
        P2=welatab[addr];
        delay(4);
}
void display(uchar sec)
{
        uchar sech,secl ;
        sech=sec/10;
        secl=sec%10;
        writeled(sech,0);
        writeled(secl,1) ;
}
void init ()
{
        TMOD=0x10;//定时器1工作方式1
        TH1=0xd8;
        TL1=0xf0;
        TR1=1;
        EA=1;
        ET1=1;
}
void keyscan()
{
        if(start==0)
        {
                delay(2) ;
                if(start==0)
                {
                        TR1=~TR1;
                        while(start==0)
                        {
                                display(sec);
                        }
                }
        }
        if(stop==0&&TR1==0)
        {               
                delay(2);//延时方抖
                if(stop==0)
                {
                        sec=0;
                        while(stop==0)
                        {
                                display(sec);
                        }
                }
        }
}

void main()
{
        init();
        while(1)
        {
                display(sec);
                keyscan();
        }
}
void timer1()  interrupt 3
{
        TH1=0xd8;
        TL1=0xf0;
        msec++;
        if(msec==100)
        {
                msec=0;
                sec++;
                if(sec==100)
                {
                        sec=0;
                }
        }
}
ID:546770 发表于 2021-12-14 18:52
第55行改成if((stop==0)&&(TR1==0))试试。

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

Powered by 单片机教程网

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