久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3621|回復: 4
收起左側

單片機按鍵按下的時候數碼管只亮個位,松開正常

[復制鏈接]
ID:326301 發表于 2018-5-9 21:03 | 顯示全部樓層 |閱讀模式
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;
  6. sbit key1=P3^4;
  7. sbit key2=P3^5;
  8. sbit key3=P3^6;
  9. sbit key4=P3^7;
  10. uchar num1,shi,ge;
  11. int num;
  12. uchar code table[]={
  13. 0x3f,0x06,0x5b,0x4f,
  14. 0x66,0x6d,0x7d,0x07,
  15. 0x7f,0x6f,0x77,0x7c,
  16. 0x39,0x5e,0x79,0x71

  17. };
  18. void keyscan();
  19. void delay(uint);
  20. void display(uchar);
  21. void main()
  22. {
  23.         TMOD=0x11;
  24.         TH0=(65536-45872)/256;
  25.         TL0=(65536-45872)%256;
  26.         EA=1;
  27.         ET0=1;
  28.         TR0=0;
  29.         while(1)
  30.         {
  31.                
  32.                 display(num);
  33.                 keyscan();
  34.         }
  35. }
  36. void keyscan()
  37. {
  38.         if(key1==0)
  39.         {
  40.                 delay(10);
  41.                 if(key1==0)
  42.                 {
  43.                         num++;
  44.                         if(num==60)
  45.                         num=0;
  46.                         while(!key1);
  47.                        
  48.                 }
  49.         }
  50.         if(key2==0)
  51.         {
  52.                 delay(10);
  53.                 if(key2==0)
  54.                 {
  55.                         num--;
  56.                         if(num==-1)
  57.                                 num=59;
  58.                         while(!key2);
  59.                 }
  60.         }
  61.         if(key3==0)
  62.         {
  63.                 delay(10);
  64.                 if(key3==0)
  65.                         num=0;
  66.                 while(!key3);
  67.         }
  68.         if(key4==0)
  69.         {
  70.                 delay(10);
  71.                 if(key4==0)
  72.                         TR0=~TR0;
  73.                 while(!key4);
  74.         }
  75. }
  76. void display(uchar num)
  77. {      
  78.         shi=num/10;
  79.         ge=num%10;
  80.       
  81.         dula=1;
  82.         P0=table[shi];
  83.         dula=0;
  84.         P0=0xff;
  85.         wela=1;
  86.         P0=0xfe;
  87.         wela=0;
  88.         delay(5);
  89.       
  90.         dula=1;
  91.         P0=table[ge];
  92.         dula=0;
  93.         P0=0xff;
  94.         wela=1;
  95.         P0=0xfd;
  96.         wela=0;
  97.         delay(5);
  98. }
  99. void delay(uint xms)
  100. {
  101.         uint i,j;
  102.         for(i=110;i>0;i--)
  103.                 for(j=xms;j>0;j--);

  104. }
  105. void T0_time() interrupt 1
  106. {
  107.         TH0=(65536-45872)/256;
  108.         TL0=(65536-45872)%256;
  109.         num1++;
  110.         if(num1==20)
  111.         {
  112.                 num1=0;
  113.                 num++;
  114.                 if(num==60)
  115.                         num=0;

  116.         }
  117.       

  118. }


復制代碼


回復

使用道具 舉報

ID:164602 發表于 2018-5-10 07:34 | 顯示全部樓層
這個現象很正常啊。
數碼管都是用掃描法顯示的,眼睛看到2個數碼管都在亮,實際上只有一個在亮,用了“視覺暫留”原理。
當你一直按著鍵時,就不執行顯示部分的語句了,當然只能亮一個了。特別是你的按鍵程序中,那個松鍵的語句,一直按著,程序就一直停在那里等待。
回復

使用道具 舉報

ID:213173 發表于 2018-5-10 08:53 | 顯示全部樓層
這是郭天祥的示例程序,因為按鍵掃描程序用了while死循環等待按鍵松手,此時除了中斷程序,其他程序都不能執行。可以把數碼管顯示程序放到中斷里,中斷周期改為5ms就行了。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
uchar num1,shi,ge;
int num;
bit flag=0;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71

};
void keyscan();
void delay(uint);
void display(uchar);
void main()
{
        TMOD=0x01;
//        TH0=(65536-45872)/256;
//        TL0=(65536-45872)%256;
        TH0=(65536-4608)/256;
        TL0=(65536-4608)%256;

        EA=1;
        ET0=1;
        TR0=1;
        while(1)
        {
//                display(num);
                keyscan();
        }
}
void keyscan()
{
        if(key1==0)
        {
                delay(10);
                if(key1==0)
                {
                        num++;
                        if(num==60)
                        num=0;
                        while(!key1);
                }
        }
        if(key2==0)
        {
                delay(10);
                if(key2==0)
                {
                        num--;
                        if(num==-1)
                        num=59;
                        while(!key2);
                }
        }
        if(key3==0)
        {
                delay(10);
                if(key3==0)
                num=0;
                while(!key3);
        }
        if(key4==0)
        {
                delay(10);
                if(key4==0)
                flag=~flag;
                while(!key4);
        }
}
void display(uchar num)
{      
        static bit sign=0;
        shi=num/10;
        ge=num%10;
        P0=0x00;//消隱
        dula=1;
        dula=0;
        if(sign==0)
        {
                P0=0xfe;
                wela=1;
                wela=0;

                P0=table[shi];
                dula=1;
                dula=0;
                sign=~sign;
        }
        else
        {
                P0=0xfd;
                wela=1;
                wela=0;

                P0=table[ge];
                dula=1;
                dula=0;
                sign=~sign;
        }
}
void delay(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}
void T0_time() interrupt 1
{
//        TH0=(65536-45872)/256;
//        TL0=(65536-45872)%256;
        TH0=(65536-4608)/256;
        TL0=(65536-4608)%256;
        if(flag==1)
        {
                num1++;
                if(num1==200)
                {
                        num1=0;
                        num++;
                        if(num==60)
                                num=0;
                }
        }
        display(num);
}
回復

使用道具 舉報

ID:318783 發表于 2018-5-10 09:59 | 顯示全部樓層
程序的問題吧
回復

使用道具 舉報

ID:326301 發表于 2018-5-10 20:12 | 顯示全部樓層
wulin 發表于 2018-5-10 08:53
這是郭天祥的示例程序,因為按鍵掃描程序用了while死循環等待按鍵松手,此時除了中斷程序,其他程序都不能 ...

你的數碼管顯示函數感覺和我這種顯示方法有什么講究,為什么我這樣就是不行
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产日韩欧美 | 欧美黄色片| 精品国产1区2区3区 在线国产视频 | 一区二区在线免费观看 | 欧美一区二区三区视频 | 91欧美精品成人综合在线观看 | 国产高清免费视频 | 久久久免费毛片 | 欧美精品久久久久 | 成人影院免费视频 | 日韩精品 电影一区 亚洲 | 久久精品国产99国产精品 | 久久国产一区 | 日本一区视频在线观看 | 国产女人与拘做受免费视频 | www.色.com| 视频一二三区 | 亚洲欧美国产毛片在线 | 亚洲精品日日夜夜 | 黄色一级大片在线免费看产 | 精品视频一区二区三区四区 | 国产日韩精品一区二区三区 | 91免费在线 | 狠狠爱网址 | 成人一区二区三区视频 | 日韩一二区| 谁有毛片 | 国产精品久久久久久妇女 | 精品国产乱码久久久久久久久 | 9久久精品 | 亚洲第一色av | 国产精品一区二区三区在线 | 免费观看的黄色网址 | 婷婷久久五月天 | 午夜影院黄 | 国产精品欧美一区二区三区不卡 | 欧美mv日韩mv国产网站91进入 | 男女视频在线观看免费 | 97福利在线 | 粉嫩国产精品一区二区在线观看 | 久久精品视频91 |