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

標題: 求助:數碼管消影問題 [打印本頁]

作者: LLL2022    時間: 2023-1-6 10:19
標題: 求助:數碼管消影問題
目的:通過按下按鍵作為外部的中斷輸入信號,通過數碼管顯示中斷次數。
問題:目前在PROTEUS仿真上能正常實現功能,但在實物上出現類似不能消影的問題,當按下按鍵后,數碼管全亮(會一直顯示8888),計數功能也出現問題,按下按鍵后數碼管4位同時改變(在顯示8888時,可以勉強觀察到數字有在變化)。


  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4.        
  5. //P0為SA-SH      P1為C0-C3

  6. sbit K1=P3^2;
  7. uchar  dis_code[11]={0xc0,0xf9,0xa4,0xb0,        // 0, 1, 2, 3
  8.                                                     0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};                // 4, 5, 6, 7, 8, 9, off
  9. uchar  buf[4];
  10. uint cnt=0;
  11.                                                                
  12. void delay(uchar ms)
  13. {
  14.         while(ms--)
  15.                 ;
  16. }


  17. void initial()
  18. {
  19.         IT0=1;
  20.         EX0=1;
  21.         EA=1;
  22. }



  23. int main()
  24. {
  25.         initial();
  26.         P0=0xff;
  27.         P1=0;
  28.         buf[0]=dis_code[0];
  29.         buf[1]=dis_code[0];
  30.         buf[2]=dis_code[0];
  31.         buf[3]=dis_code[0];
  32.        
  33.         while(1)
  34.         {
  35.                 P0=buf[3];//顯示千位
  36.                 P1=0x01;
  37.                 delay(5);
  38.                 P0=0xff;
  39.                
  40.                 P0=buf[2];//顯示百位
  41.                 P1=0x02;
  42.                 delay(5);
  43.                 P0=0xff;
  44.                
  45.                 P0=buf[1];//顯示十位
  46.                 P1=0x04;
  47.                 delay(5);
  48.                 P0=0xff;
  49.                
  50.                 P0=buf[0];//顯示個位
  51.                 P1=0x08;
  52.                 delay(5);
  53.                 P0=0xff;
  54.                
  55.         }
  56.        
  57. }

  58. void init0() interrupt 0

  59. {
  60.         EX0=0;
  61. if(K1==0)
  62. {
  63.                 cnt++;
  64.                 if(cnt>9999)
  65.                 {
  66.                         cnt=0;
  67.                 }
  68.         }
  69.        
  70.         buf[3]=dis_code[cnt/1000];  //千位
  71.         buf[2]=dis_code[cnt%1000/100];//百位
  72.         buf[1]=dis_code[cnt%100/10];//十位
  73.         buf[0]=dis_code[cnt%10];//個位
  74.         EX0=1;
  75.        
  76. }
復制代碼




作者: 景生2020    時間: 2023-1-6 16:00
加入P0消隱試試
if(k1==0)
{
P0=0XFF;
}
作者: wulin    時間: 2023-1-6 16:37
用外部中斷讀取按鍵信號,消抖是個問題。仿真按鍵不會抖動,如果用簡單的延時消抖方法會導致動態數碼管顯示停頓。實際電路會因為按鍵抖動,cnt會加不確定的值。給你程序修改了,你試試。
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int      
  4. //P0為SA-SH      P1為C0-C3
  5. sbit K1=P3^2;
  6. uchar  dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
  7. 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};     // 4, 5, 6, 7, 8, 9, off

  8. uchar  buf[4];
  9. uint cnt=0;
  10.                                                                
  11. void delay(uint ms)
  12. {
  13.          while(ms--);               
  14. }
  15. void initial()
  16. {
  17.         IT0 = 1;
  18.         EX0 = 1;
  19.         EA = 1;
  20. }
  21. void main()
  22. {
  23.         uchar i;
  24.         initial();      
  25.         while(1)
  26.         {
  27.                 buf[0]=dis_code[cnt/1000%10];  //千位
  28.                 buf[1]=dis_code[cnt/100%10];//百位
  29.                 buf[2]=dis_code[cnt/10%10];//十位
  30.                 buf[3]=dis_code[cnt%10];//個位
  31.                 P1&=0xf0;
  32.                 P0=buf[i];
  33.                 P1|=0x01<<i;
  34.                 if(++i>3)
  35.                         i=0;
  36.                 delay(100);
  37.         }
  38. }

  39. void init0() interrupt 0
  40. {
  41.         cnt++;
  42.         if(cnt>9999)
  43.         {
  44.                 cnt=0;
  45.         }
  46. }
復制代碼




作者: LLL2022    時間: 2023-1-6 17:06
景生2020 發表于 2023-1-6 16:00
加入P0消隱試試
if(k1==0)
{

還是不行,我想應該不是消影的問題,如果是消影的問題的話,當我觸發中斷時數碼管的千百十應該是不變的,只有個位的會出現問題,但現在當我觸發中斷時,數碼管的千百十個位都出現同樣的數字(數碼管還是顯示8888)只能勉強通過亮暗觀察到數碼管的數字發生變化。
作者: 上善-若水    時間: 2023-1-6 19:31
數碼管動態顯示有閃爍主要是由于延時時間選擇不當造成的 主要檢查延時方面的語句
作者: huazhaojiu    時間: 2023-1-6 21:22
每次顯示完后,加個1us延遲試試呢
作者: 188610329    時間: 2023-1-6 22:17
你消了個寂寞,把所有的p0=0xff,都改成p1=0x00才是消影。
作者: LLL2022    時間: 2023-1-9 09:42
wulin 發表于 2023-1-6 16:37
用外部中斷讀取按鍵信號,消抖是個問題。仿真按鍵不會抖動,如果用簡單的延時消抖方法會導致動態數碼管顯示 ...

十分感謝,代碼成功運行,目前還在學習消化中
作者: LLL2022    時間: 2023-1-9 09:48
上善-若水 發表于 2023-1-6 19:31
數碼管動態顯示有閃爍主要是由于延時時間選擇不當造成的 主要檢查延時方面的語句

嗯嗯,但我現在試了之前的代碼發現又可以了,導致現在驗證不了
作者: LLL2022    時間: 2023-1-9 09:48
huazhaojiu 發表于 2023-1-6 21:22
每次顯示完后,加個1us延遲試試呢

嗯嗯,但我現在試了之前的代碼發現又可以了,導致現在驗證不了
作者: LLL2022    時間: 2023-1-9 09:52
188610329 發表于 2023-1-6 22:17
你消了個寂寞,把所有的p0=0xff,都改成p1=0x00才是消影。

我選用的是共陽極數碼管,P0是段選   所以我覺得P0=0xff  是消影沒錯
作者: 人中狼    時間: 2023-1-9 11:18
缺電路圖,所以不好說,數碼管的顯示最好放在定時器中斷里
作者: lkc8210    時間: 2023-1-9 11:40
LLL2022 發表于 2023-1-9 09:52
我選用的是共陽極數碼管,P0是段選   所以我覺得P0=0xff  是消影沒錯

P0=0xff 是可以消影,沒錯
但代碼次序錯了
你現在是
段選消影->段選顯示->位選改變

正確次序應該是
段選消影->位選改變->段選顯示
作者: LLL2022    時間: 2023-1-9 14:06
人中狼 發表于 2023-1-9 11:18
缺電路圖,所以不好說,數碼管的顯示最好放在定時器中斷里

嗯嗯,我之后會去嘗試的
作者: LLL2022    時間: 2023-1-9 14:08
lkc8210 發表于 2023-1-9 11:40
P0=0xff 是可以消影,沒錯
但代碼次序錯了
你現在是

嗯嗯,謝謝,我發現我改不改次序最終效果都可以實現,因此我還是有點懵,但我之后會注意次序這方面的問題。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久精品国产久精国产 | 日韩国产高清在线观看 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 蜜桃视频一区二区三区 | 99视频在线免费观看 | 国产精品中文字幕一区二区三区 | 国产精品美女久久久久aⅴ国产馆 | 免费人成在线观看网站 | 在线观看不卡av | 成人国产精品 | 成人在线免费电影 | 91精品国产综合久久精品 | 国产精品乱码一区二三区小蝌蚪 | 国产欧美一区二区久久性色99 | 91偷拍精品一区二区三区 | 欧美日韩第一页 | 一级做a爰片久久毛片免费看 | 久久精品中文 | 亚洲一区二区三区四区五区午夜 | 国产精品美女久久久 | 看av网| 一区二区视频在线观看 | 黄色一级免费观看 | 欧美天堂| 综合色导航| 久久一| 亚洲高清在线 | 亚洲欧洲一区 | 羞羞视频网页 | 久99久视频| 成人免费一级 | 一区视频 | 国产在线永久免费 | 国产精品久久一区二区三区 | 日韩中文不卡 | 亚洲欧美视频一区 | 久久免费资源 | 91xxx在线观看 | 亚洲一区二区久久 | 成人黄色三级毛片 | 亚洲免费三级 |