找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 896|回复: 6
收起左侧

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

[复制链接]
ID:992225 发表于 2021-12-14 15:29 | 显示全部楼层 |阅读模式
51hei.png
单片机源程序如下:
  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. {
  10. uchar i, j;
  11. for (i=0;i<time;i++) ;
  12. {
  13. for (i=0;j<110;j++) ;
  14. }
  15. }
  16. void writeled(uchar num ,addr)
  17. {
  18. P2=0xff;
  19. P0=dulatab[num];
  20. P2=welatab[addr];
  21. delay(4);
  22. }
  23. void display(uchar sec)
  24. {
  25. uchar sech,secl ;
  26. sech=sec/10;
  27. secl=sec%10;
  28. writeled(sech,0);
  29. writeled(secl,1) ;
  30. }
  31. void init ()
  32. {
  33. TMOD=0x10;//定时器1工作方式1
  34. TH1=0xd8;
  35. TL1=0xf0;
  36. TR1=1;
  37. EA=1;
  38. ET1=1;
  39. }
  40. void keyscan()
  41. {
  42. if(start==0)
  43. {
  44. delay(2) ;
  45. if(start==0)
  46. {
  47. TR1=~TR1;
  48. while(start==0)
  49. {
  50. display(sec);
  51. }
  52. }
  53. }
  54. }
  55. if(stop==0&&TR1==0)
  56. {               
  57. delay(2);//延时方抖
  58. if(stop==0)
  59. {
  60. sec=0;
  61. while(stop==0)
  62. {
  63. display(sec);
  64. }}}
  65. void main()
  66. {
  67. init();
  68. while(1)
  69. {
  70. display(sec);
  71. keyscan();
  72. }}
  73. void timer1()  interrupt 3
  74. {
  75. TH1=0xd8;
  76. TL1=0xf0;
  77. msec++;
  78. if(msec==100)
  79. {
  80. msec=0
  81. sec++;
  82. if(sec==100)
  83. {
  84. sec=0
  85. }}}
复制代码


回复

使用道具 举报

ID:546770 发表于 2021-12-14 18:52 | 显示全部楼层
第55行改成if((stop==0)&&(TR1==0))试试。
回复

使用道具 举报

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: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:161164 发表于 2021-12-14 21:56 | 显示全部楼层
第55行的if跑到keyscan外了
回复

使用道具 举报

ID:139866 发表于 2021-12-17 14:01 | 显示全部楼层
你真应该感谢这些替你找到错误的人,毕竟你这代码我看一眼就不想看了,他们忍着吃%一样的恶心给你找错误挺不容易的
回复

使用道具 举报

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

哈哈哈
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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