找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1161|回复: 5
收起左侧

这个简易单片机秒表为什么没反应?

[复制链接]
ID:1090051 发表于 2023-7-30 11:42 | 显示全部楼层 |阅读模式


#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit p3_3=P3^3;
sbit p2_7=P2^7;
char led_mod[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
char led_com[]={0x01,0x02,0x04,0x08,0x10,0x20};
sbit BEER=P1^1;
int TENms,s,m;
char data_time[6];
void delayms(uint xms)
{
                uint i,j;
                for(i=xms;i>0;i--)
                                for(j=110;j>0;j--);
}
void display()
{ uint k;
        data_time[0]=m;
        data_time[1]=10;
        data_time[2]=s/10;
        data_time[3]=s%10;
        data_time[4]=TENms/10;
        data_time[5]=TENms%10;
        for(k=0;k<5;k++)
        {
                        P3=led_com[k];
                        P2=led_mod[data_time[k]];
        }
        if(k==3)
        {
                p3_3=1;
                p2_7=1;
        }
        delayms(200);
}
isr_10msT0() interrupt 1
{
                TH0=(65536-500000)/256;
                TL0=(65536-500000)%256;
                TENms++;
                BEER=0;
                if(TENms==100)
                {
                        TENms=0;
                        s++;
                        BEER=1;
                }
                if(s==60)
                {
                        s=0;
                        m++;
                }
                if(m==9,s==59,TENms==99)
                {
                                        m=9;
                                        BEER=0;
                                        TR0=0;
                }
}
void main(void)
{
                TENms=0;
                s=0;
                m=0;
                BEER=0;
                TMOD=0x01;
          TH0=(65536-500000)/256;
                TL0=(65536-500000)%256;
          ET0=1;
                EA=1;
                while(1)
                {
                                        display();
                                        switch(P0&0x1f)
                                        {
                                                case 0xdf:TR0=1;break;
                                                case 0x7f:TR0=0;TENms=0;s=0;m=0;TR0=0;break;
                                                case 0xbf:TR0=0;TR0=0;break;
                                        }
                }
}
compiling main.c...
linking...
Program Size: data=38.0 xdata=0 code=619
creating hex file from ".\Objects\5"...
".\Objects\5" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:00


屏幕截图 2023-07-30 111546.png
回复

使用道具 举报

ID:332444 发表于 2023-7-30 12:55 | 显示全部楼层
其他且不论先点一个数码管正常后再点第二直到所有正常后再调试其他功能
回复

使用道具 举报

ID:584814 发表于 2023-7-31 08:27 | 显示全部楼层
这个坛里保姆不多,请先注释好程序,谢谢
回复

使用道具 举报

ID:161164 发表于 2023-7-31 11:30 | 显示全部楼层
2023-07-31_112733.png
1。没消影
2。没延时
3。多余的延时
4。不能大于2^16(65536)

回复

使用道具 举报

ID:213173 发表于 2023-7-31 14:35 | 显示全部楼层
无标题.jpg
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit key=P1^5;
  5. //sbit p2_7=P2^7;
  6. sbit BEER=P1^1;

  7. uchar led_mod[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};

  8. uchar led_com[]={0x01,0x02,0x04,0x08,0x10,0x20};

  9. uint TENms;
  10. uchar s,m,count,value;
  11. uchar data_time[6];
  12. bit begin,sign;

  13. void delayms(uint xms)
  14. {
  15.         uint i,j;
  16.         for(i=xms;i>0;i--)
  17.                 for(j=110;j>0;j--);
  18. }
  19. void display()
  20. {
  21.         static uchar k;

  22.         data_time[0]=led_mod[m];
  23.         data_time[1]=led_mod[10];
  24.         data_time[2]=led_mod[s/10];
  25.         data_time[3]=led_mod[s%10]&0x7f;
  26.         data_time[4]=led_mod[TENms/10];
  27.         data_time[5]=led_mod[TENms%10];

  28.         P2=0xff;
  29.         P3=led_com[k];
  30.         P2=data_time[k];

  31.         k=++k%6;
  32. }
  33. void isr_10msT0() interrupt 1
  34. {
  35.         TH0=(65536-10000)/256;
  36.         TL0=(65536-10000)%256;
  37.         if(begin)
  38.         {
  39.                 if(++TENms==100)
  40.                 {
  41.                         TENms=0;
  42.                         if(++s==60)
  43.                         {
  44.                                 s=0;
  45.                                 m++;
  46.                         }
  47.                 }
  48.         }
  49.         if(m==9 && s==59 && TENms==99)
  50.         {
  51.                 BEER=1;
  52.                 begin=0;
  53.         }
  54. }

  55. void key_scan(void)
  56. {
  57.         if(!key)
  58.         {
  59.                 if(++count>=10 && sign==0)
  60.                 {
  61.                         sign=1;
  62.                         value=++value%3;
  63.                         switch(value)
  64.                         {
  65.                                 case 0:TENms=0;s=0;m=0;BEER=0; break;
  66.                                 case 1:begin=1; break;
  67.                                 case 2:begin=0; break;
  68.                         }
  69.                 }
  70.         }
  71.         else
  72.         {
  73.                 count=0;
  74.                 sign=0;
  75.         }
  76. }

  77. void main(void)
  78. {
  79.         TENms=0;
  80.         s=0;
  81.         m=0;
  82.         BEER=0;
  83.         TMOD=0x01;
  84.         TH0=(65536-10000)/256;
  85.         TL0=(65536-10000)%256;
  86.         TR0=1;
  87.         ET0=1;
  88.         EA=1;
  89.         while(1)
  90.         {
  91.                 display();
  92.                 key_scan();
  93.                 delayms(1);
  94.         }
  95. }
复制代码



回复

使用道具 举报

ID:1090051 发表于 2023-8-4 10:04 | 显示全部楼层
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit p3_3=P3^3;
sbit p2_7=P2^7;
char led_mod[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
char led_com[]={0x01,0x02,0x04,0x08,0x10,0x20};
sbit BEER=P1^1;
int TENms,s,m;
char data_time[6];
void display()
{
        uint k;
        data_time[0]=m;
        data_time[1]=10;
        data_time[2]=s/10;
        data_time[3]=s%10;
        data_time[4]=TENms/10;
        data_time[5]=TENms%10;
        for(k=0;k<6;k++)
        {
                        P2=0xff;
                        P3=led_com[k];
                        P2=led_mod[data_time[k]];
       
                if(k==3)
                {
                        p2_7=0;
                }
               
        }
       
}
isr_10msT0() interrupt 1
{
                TH0=(65536-10000)/256;
                TL0=(65536-10000)%256;
                TENms++;
                BEER=0;
                if(TENms==100)
                {
                        TENms=0;
                        s++;
                        BEER=1;
                }
                if(s==60)
                {
                        s=0;
                        m++;
                }
                if(m==9&&s==59&&TENms==99)
                {
                        m=9;
                        BEER=0;
                        TENms=0;
                        TR0=0;
                }
}
void main(void)
{
                TENms=0;
                s=0;
                m=0;
                BEER=0;
                TMOD=0x01;
          TH0=(65536-10000)/256;
                TL0=(65536-10000)%256;
          ET0=1;
                EA=1;
                while(1)
                {
                                        display();
                                        switch(P1&0xe0)
                                        {
                                                case 0xc0:TR0=1;break;
                                                case 0xa0:TR0=0;TR0=0;break;
                                                case 0x60:TR0=0;TENms=0;s=0;m=0;TR0=0;break;
                                        }
                }
}
全部功能正常谢谢各位
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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