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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2006|回復: 4
打印 上一主題 下一主題
收起左側

單片機數碼管外部中斷動態掃描程序,亮度不一,按鍵也又有時靈有時不靈

[復制鏈接]
跳轉到指定樓層
樓主
ID:1001733 發表于 2022-4-22 10:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
數碼管動態掃描,仿真上可以運行,實物上就亮度不一,按鍵也又有時靈有時不靈
51單片機,型號是89C52,感謝大家,查了好多資料也看不明白,可能跟本人智商有關嘿嘿
可能消隱沒消好,我也搞不明白

單片機源程序如下:
#include <REGX52.H>//頭文件
#include "Delay.h"
int duan[]={
                0xC0,  //"0"
                0xF9,  //"1"
                0xA4,  //"2"
                0xB0,  //"3"
                0x99,  //"4"
                0x92,  //"5"
                0x82,  //"6"
                0xF8,  //"7"
                0x80,  //"8"
                0x90,  };  //段選
int wei[]={0x08,0x04,0x02,0x01};
int number=1000;//初始值
char qian,bai,shi,ge;

void INT0_inti()//外部中斷初始化
{
    EA=1;
    IT0=1;
    EX0=1;
}
void INT2_inti()//外部中斷初始化
{
    EA=1;
    IT1=1;
    EX1=1;
}
void jisuan()//計算子程序
{
    qian=number/1000;
    bai=number%1000/100;
    shi=number%1000%100/10;
    ge=number%1000%100%10;

    P2=0x01;
    P0=duan[qian];
    Delay(5);
  P2=0x00;

    P2=0x02;
    P0=duan[bai];
    Delay(5);
    P2=0x00;

    P2=0x04;
    P0=duan[shi];
    Delay(5);
    P2=0x00;

    P2=0x08;
    P0=duan[ge];
    Delay(5);
    P2=0x00;
}

void main()
{
      INT0_inti();//中斷初始化
      INT2_inti();//中斷初始化

      P3_4=0;//鍵盤是矩陣的,所以給了3-4低電位,用的是P3-2,P3-3
        while(1)
        {

                jisuan();//數碼管
        }                    



}
void IWT0_ISR() interrupt 0//進入中斷
{
    number=number+1;
    if(number==10000)
        number=0;
    if(number==-1)
        number=9999;
}
void IWT2_ISR() interrupt 2//進入中斷
{
    number=number-1;
    if(number==10000)
        number=0;
    if(number==-1)
        number=9999;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:301191 發表于 2022-4-22 19:55 | 只看該作者
頂一下
回復

使用道具 舉報

板凳
ID:213173 發表于 2022-4-22 21:56 | 只看該作者
不要輕易使用外部中斷做按鍵輸入這種簡單任務,既不易消抖,也占用有限資源。數碼管亮度不一排除硬件因素后多為消隱不良和動態掃描周期不均衡。給你改了,你試試。
  1. #include <REGX52.H>//頭文件
  2. //#include "Delay.h"

  3. //unsigned char sec_s=0,min_s=0;//秒、分設置變量
  4. //void Cnt10ms=0;       //中斷計時變量
  5. unsigned char code duan[]={
  6.                 0xC0,  //"0"
  7.                 0xF9,  //"1"
  8.                 0xA4,  //"2"
  9.                 0xB0,  //"3"
  10.                 0x99,  //"4"
  11.                 0x92,  //"5"
  12.                 0x82,  //"6"
  13.                 0xF8,  //"7"
  14.                 0x80,  //"8"
  15.                 0x90,  };  //段選
  16. unsigned char code wei[]={0x01,0x02,0x04,0x08};
  17. unsigned char cache[4];
  18. unsigned int number=1000;//初始值
  19. //unsigned char qian,bai,shi,ge;
  20. unsigned char count=0;
  21. bit sign=0;
  22. unsigned char num=0;

  23. void Delay(unsigned int t)
  24. {
  25.         unsigned int i,j;
  26.         for(i=t;i>0;i--)
  27.                 for(j=120;j>0;j--);
  28. }
  29. /*
  30. void INT0_inti()//外部中斷初始化
  31. {
  32.         EA=1;
  33.         IT0=1;
  34.         EX0=1;
  35. }
  36. void INT2_inti()//外部中斷初始化
  37. {
  38.     EA=1;
  39.     IT1=1;
  40.     EX1=1;
  41. }*/
  42. void jisuan()//計算子程序
  43. {//分解數據,保存入緩存
  44.         cache[0]=duan[number/1000%10];
  45.         cache[1]=duan[number/100%10];
  46.         cache[2]=duan[number/10%10];
  47.         cache[3]=duan[number%10];
  48.        
  49.         P2=0x00;//消隱
  50.         P0=cache[num];//送段碼
  51.         P2=wei[num];//送位碼
  52.         Delay(1);//延時
  53.         num=++num%4;//循環計數
  54. }

  55. void main()
  56. {

  57. //        INT0_inti();//中斷初始化
  58. //        INT2_inti();//中斷初始化       
  59.         P3_4=0;//鍵盤是矩陣的,所以給了3-4低電位,用的是P3-2,P3-3
  60.         while(1)
  61.         {
  62.                 if(!P3_2||!P3_3)
  63.                 {
  64.                         if(++count>=10 && sign==0)//消抖
  65.                         {
  66.                                 sign=1;
  67.                                 if(!P3_2)
  68.                                 {
  69.                                         if(number<9999)number++;
  70.                                 }
  71.                                 if(!P3_3)
  72.                                 {
  73.                                         if(number>0)number--;
  74.                                 }
  75.                         }
  76.                 }
  77.                 else
  78.                 {
  79.                         count=0;
  80.                         sign=0;
  81.                 }

  82.                 jisuan();//數碼管
  83.         }                    
  84. }
  85. /*
  86. void IWT0_ISR() interrupt 0//進入中斷
  87. {
  88.     number=number+1;
  89.     if(number==10000)
  90.         number=0;
  91.     if(number==-1)
  92.         number=9999;
  93. }
  94. void IWT2_ISR() interrupt 2//進入中斷
  95. {
  96.     number=number-1;
  97.     if(number==10000)
  98.         number=0;
  99.     if(number==-1)
  100.         number=9999;
  101. }*/
復制代碼
回復

使用道具 舉報

地板
ID:1001733 發表于 2022-4-23 16:33 | 只看該作者
wulin 發表于 2022-4-22 21:56
不要輕易使用外部中斷做按鍵輸入這種簡單任務,既不易消抖,也占用有限資源。數碼管亮度不一排除硬件因素后 ...

真的牛
回復

使用道具 舉報

5#
ID:1040201 發表于 2022-8-17 10:42 | 只看該作者
一個完整的代碼,是不是要有主循環函數?根據標志位在主循環里面處理,我之 前自己做了個小車,紅外遙控也是反應遲鈍,時靈時不靈,一直有這個困惑。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美影院| 波多野结衣亚洲 | 国产视频福利在线观看 | 国产免费国产 | 永久www成人看片 | 国产成人高清 | 久久三区| 免费成年网站 | 午夜精品久久久久久不卡欧美一级 | 美女黄网| 欧美激情在线精品一区二区三区 | 成人av网站在线观看 | 久久精品色视频 | 国产精品中文字幕在线 | 日韩精品一区二区三区视频播放 | 国产激情精品视频 | 日韩在线中文字幕 | 中文字幕一区二区三区在线观看 | 国产视频在线观看一区二区三区 | av影音资源 | 狠狠爱免费视频 | 精品国产乱码久久久久久蜜臀 | 亚洲一区欧美 | 精品伦精品一区二区三区视频 | 羞羞的视频在线看 | 午夜噜噜噜 | 国产精品免费一区二区三区四区 | 国产一级成人 | 91精品国产一区 | 亚洲精品久久视频 | 日韩欧美综合在线视频 | 久久久久国色av免费观看性色 | 激情视频一区 | 91精品一区 | 久久综合激情 | 精品国产一区二区三区免费 | 国产区免费视频 | 手机看片1| 麻豆久久久9性大片 | 中文字幕人成乱码在线观看 | 国产精品一区二区三区四区五区 |