欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機程序怎么把共陰數碼管程序改成共陽的 [打印本頁]

作者: 啊啊啊12138    時間: 2017-5-10 22:11
標題: 單片機程序怎么把共陰數碼管程序改成共陽的

  1. #include<reg51.h>
  2. #define uchar unsigned char         
  3. #define uint unsigned int
  4. //數碼管位端口定義
  5. sbit w1=P2^0;
  6. sbit w2=P2^1;
  7. sbit w3=P2^2;
  8. sbit w4=P2^3;
  9. sbit w5=P2^4;
  10. ////////按鍵/////////////////////
  11. sbit key1=P3^0;//設置時間
  12. sbit key2=P3^1;//加
  13. sbit key3=P3^2;//減        
  14. sbit key4=P3^3;//鬧鐘
  15. sbit beep=P1^0;//蜂鳴器
  16. /////共陰數碼管段信號編碼////////
  17. uchar code table[10]=//0---9
  18. {0xFC,0x60,0xDA,0xF2,0x66,
  19. 0xB6,0xBE,0xE0,0xFE,0xF6};//
  20. uchar num,miao,fen,shi;//計時  時分秒變量
  21. uchar fen1,shi1;//鬧鐘變量
  22. uchar d1,d2,d3,d4;//顯示拆分數據
  23. void delay(uint ms)//1ms  延時函數   數據保持用的
  24. {
  25.         uchar x;
  26.         for(ms;ms>0;ms--)
  27.                 for(x=110;x>0;x--);
  28. }
  29. void display()//顯示函數
  30. {
  31.         d1=shi/10;//小時
  32.         d2=shi%10;//
  33.         d3=fen/10;//
  34.         d4=fen%10;//分鐘
  35.         w1=0;P0=table[d1];delay(10);//第1位顯示數據
  36.         P0=0x00;w1=1;//關閉顯示消除動態掃描陰影
  37.         w2=0;P0=table[d2]|0x01;delay(10);//第2位顯示數據
  38.         P0=0x00;w2=1;//關閉顯示消除動態掃描陰影
  39.         w3=0;P0=table[d3];delay(10);//第3位顯示數據
  40.         P0=0x00;w3=1;//關閉顯示消除動態掃描陰影
  41.         w4=0;P0=table[d4]|0x01;delay(10);//第4位顯示數據
  42.         P0=0x00;w4=1;//關閉顯示消除動態掃描陰影


  43. }
  44. void disp_set()//顯示函數
  45. {
  46.         d1=shi1/10;//小時
  47.         d2=shi1%10;//
  48.         d3=fen1/10;//
  49.         d4=fen1%10;//分鐘
  50.         w1=0;P0=table[d1];delay(10);//第1位顯示數據
  51.         P0=0x00;w1=1;//關閉顯示消除動態掃描陰影
  52.         w2=0;P0=table[d2]|0x01;delay(10);//第2位顯示數據
  53.         P0=0x00;w2=1;//關閉顯示消除動態掃描陰影
  54.         w3=0;P0=table[d3];delay(10);//第3位顯示數據
  55.         P0=0x00;w3=1;//關閉顯示消除動態掃描陰影
  56.         w4=0;P0=table[d4]|0x01;delay(10);//第4位顯示數據
  57.         P0=0x00;w4=1;//關閉顯示消除動態掃描陰影

  58. }
  59. void keyscan()//調時按鍵掃描函數
  60. {
  61. uchar k_flag,set_flag;
  62.         if(key1==0)//按鍵按下           一下所有按鍵執行的模式都是一樣的
  63.         {
  64.                 delay(10);//延時消除按鍵抖動
  65.                 if(key1==0)//確定按鍵按下
  66.                 {
  67.                         k_flag=1;                        
  68.                 }
  69.                 while(key1==0)display();//等待按鍵松手
  70.         }
  71.         while(k_flag==1)//開始調整小時數據
  72.         {
  73.                 display();
  74.                 if(key1==0)
  75.                 {
  76.                         delay(10);//延時消抖
  77.                         if(key1==0)
  78.                         {
  79.                                 k_flag=2;
  80.                         }
  81.                         while(key1==0)display();
  82.                 }
  83.                 if(key2==0)
  84.                 {
  85.                         delay(10);
  86.                         if(key2==0)
  87.                         {
  88.                                 shi++;
  89.                                 if(shi==24)shi=0;
  90.                         }
  91.                         while(key2==0)display();
  92.                 }
  93.                 if(key3==0)
  94.                 {
  95.                         delay(10);
  96.                         if(key3==0)
  97.                         {
  98.                                 if(shi==0)shi=24;  
  99.                                 shi--;        
  100.                         }
  101.                                   while(key3==0)display();
  102.                 }        
  103.         }
  104.         while(k_flag==2)//開始調整分鐘數據
  105.         {
  106.                 display();
  107.                 if(key1==0)
  108.                 {
  109.                         delay(10);//延時消抖
  110.                         if(key1==0)
  111.                         {
  112.                                 k_flag=3;
  113.                         }
  114.                         while(key1==0)display();
  115.                 }
  116.                 if(key2==0)
  117.                 {
  118.                         delay(10);
  119.                         if(key2==0)
  120.                         {
  121.                                 fen++;
  122.                                 if(fen==60)fen=0;
  123.                         }
  124.                         while(key2==0)display();
  125.                 }
  126.                 if(key3==0)
  127.                 {
  128.                         delay(10);
  129.                         if(key3==0)
  130.                         {
  131.                                 if(fen==0)fen=60;  
  132.                                 fen--;        
  133.                         }
  134.                         while(key3==0)display();
  135.                 }        
  136.         }

  137. ///////設置定時時間///////////////////////////////////////////////
  138.         if(key4==0)
  139.         {
  140.                 delay(10);
  141.                 if(key4==0)
  142.                 {
  143.                         set_flag=1;
  144.                 }
  145.                 while(key4==0)disp_set();
  146.                 }
  147.         while(set_flag==1)
  148.         {
  149.                 disp_set();
  150.                 if(key2==0)
  151.                 {
  152.                         delay(10);
  153.                         if(key2==0)
  154.                         {        
  155.                                 shi1++;
  156.                                 if(shi1==24)shi1=0;
  157.                         }
  158.                         while(key2==0)disp_set();
  159.                 }
  160.                 if(key3==0)
  161.                 {
  162.                         delay(10);
  163.                         if(key3==0)
  164.                         {        
  165.                                 if(shi1==0)shi1=24;
  166.                                 shi1--;
  167.                         }
  168.                         while(key3==0)disp_set();
  169.                 }
  170.                 if(key4==0)
  171.                 {
  172.                         delay(10);
  173.                         if(key4==0)
  174.                         {        
  175.                                 set_flag=2;
  176.                         }
  177.                         while(key4==0)disp_set();
  178.                 }        
  179.         }
  180.         while(set_flag==2)
  181.         {
  182.                 disp_set();
  183.                 if(key2==0)
  184.                 {
  185.                         delay(10);
  186.                         if(key2==0)
  187.                         {        
  188.                             fen1++;
  189.                                 if(fen1==60)fen1=0;
  190.                         }
  191.                         while(key2==0)disp_set();
  192.                 }
  193.                 if(key3==0)
  194.                 {
  195.                         delay(10);
  196.                         if(key3==0)
  197.                         {
  198.                                 if(fen1==0)fen1=60;
  199.                                 fen1--;
  200.                         }
  201.                         while(key3==0)disp_set();
  202.                 }
  203.                 if(key4==0)
  204.                 {
  205.                         delay(10);
  206.                         if(key4==0)
  207.                         {  
  208.                                 set_flag=0;
  209.                         }
  210.                         while(key4==0)disp_set();
  211.                 }        
  212.         }
  213. }

  214. void main()
  215. {
  216.         TMOD=0x01;//定時器0  16位計時模式
  217.         TH0=(65536-50000)/256; //50ms定時
  218.         TL0=(65536-50000)%256; //50ms定時
  219.         EA=1;//開啟總中斷
  220.         ET0=1;//開啟定時器中斷
  221.         TR0=1;//開啟定時器
  222.         w5=1;
  223.         while(1)
  224.         {        
  225.             w5=~w5;
  226.                 display();//顯示函數
  227.                 keyscan();//按鍵掃描函數
  228.         }
  229. }
  230. void T0_time() interrupt 1
  231. {
  232.         TH0=(65536-50000)/256; //50ms定時
  233.         TL0=(65536-50000)%256; //50ms定時
  234.         num++;//加一次50ms定時
  235.         if(num==20)//1S
  236.         {
  237.                 num=0;
  238.                 miao++;
  239.                 if(miao==60)
  240.                 {
  241.                         miao=0;
  242.                         fen++;
  243.                         if(fen==60)
  244.                         {
  245.                                 fen=0;
  246.                                 shi++;
  247.                                 if(shi==24)shi=0;
  248.                         }
  249.                 }
  250.         }
  251. }

復制代碼

作者: 啊啊啊12138    時間: 2017-5-10 22:18
突然發現這段函數和平時的共陰數碼管函數好像不一樣,突然不會改了   數碼管1號口接的是P0.7
/////共陰數碼管段信號編碼////////
uchar code table[10]=//0---9
{0xFC,0x60,0xDA,0xF2,0x66,
0xB6,0xBE,0xE0,0xFE,0xF6};//
有人會修改嗎?
作者: maidezhu    時間: 2017-5-10 23:10
下個這個軟件就好了可以給你算數組

無標題.png (95.67 KB, 下載次數: 116)

無標題.png

作者: zl2168    時間: 2017-5-10 23:37
關鍵是先改電路。光改程序是改不好的。程序是配合電路的。一上來就貼出冗長程序,說明你思路錯了,理解錯了。
作者: yzwzfyz    時間: 2017-5-10 23:46
說明你并未真正地了解LED驅動的原理。
作者: 桂木桂馬    時間: 2017-5-11 14:27
如果是io口直接驅動的數碼管程序的話只要把輸出取反就可以了,如果是用7段譯碼器就不一樣了
作者: joeky    時間: 2017-5-11 15:13
io口直接驅動的數碼管程序的話只要把輸出取反就可以了
作者: zl2168    時間: 2017-5-11 18:39
io口直接驅動,若是共陰LED,怎么直接驅動?20uA,會亮么?
作者: 啊啊啊12138    時間: 2017-5-12 00:15
zl2168 發表于 2017-5-10 23:37
關鍵是先改電路。光改程序是改不好的。程序是配合電路的。一上來就貼出冗長程序,說明你思路錯了,理解錯了 ...

我修改過線路,然后稍微改了程序,發現只能顯示出0000  按下功能按鍵毫無反應,所以來求助了
作者: 啊啊啊12138    時間: 2017-5-12 00:15
maidezhu 發表于 2017-5-10 23:10
下個這個軟件就好了可以給你算數組

我去下載試試,謝謝提醒
作者: 啊啊啊12138    時間: 2017-5-12 00:35
joeky 發表于 2017-5-11 15:13
io口直接驅動的數碼管程序的話只要把輸出取反就可以了

試過直接取反,沒有用
作者: 啊啊啊12138    時間: 2017-5-12 00:37
zl2168 發表于 2017-5-11 18:39
io口直接驅動,若是共陰LED,怎么直接驅動?20uA,會亮么?

共陰是直接驅動,共陽加上245芯片
作者: 啊啊啊12138    時間: 2017-5-12 00:38
桂木桂馬 發表于 2017-5-11 14:27
如果是io口直接驅動的數碼管程序的話只要把輸出取反就可以了,如果是用7段譯碼器就不一樣了

io直接驅動,但是直接取反沒效果
作者: zl2168    時間: 2017-5-12 09:02
本帖最后由 zl2168 于 2017-5-12 19:14 編輯

給你各介紹幾個共陰和共陽的掃描顯示案例,你自己去研讀改進吧!
共陰動態顯示:
實例57  74LS139選通4LED數碼管動態顯示
實例57 74LS139選通4位共陰LED數碼管動態顯示.rar (48.12 KB, 下載次數: 13)

實例58  74LS138選通8LED數碼管動態顯示
實例58 74LS138選通8位LED動態顯示.rar (44.76 KB, 下載次數: 5)

實例59  74LS595串行選通8LED數碼管動態顯示
[attach]62755[/attach]
實例59 74LS595×2選通8位LED動態顯示.rar (45.12 KB, 下載次數: 4)

共陰靜態顯示:
實例53 CC4511 BCD碼驅動3LED數碼管靜態顯示
實例53 CC4511 BCD碼驅動3位LED靜態顯示.rar (43.76 KB, 下載次數: 4)


共陽動態顯示:
實例53 CC4511 BCD碼驅動3位LED數碼管靜態顯示
實例56 PNP晶體管選通3位LED動態顯示.rar (47.41 KB, 下載次數: 6)

共陽靜態顯示:
實例52 74LS377并行輸出3位LED靜態顯示
實例52 74LS377并行輸出3位LED靜態顯示.rar (42.73 KB, 下載次數: 3)






實例54 74LS164串行擴展3LED數碼管靜態顯示




實例54 74LS164串行擴展3位LED靜態顯示.rar (57.84 KB, 下載次數: 4)

實例55 CC4094串行擴展3位LED數碼管靜態顯示
實例55 CC4094串行擴展3位LED靜態顯示.rar (37.46 KB, 下載次數: 3)

實例56 74LS595串行擴展3位LED數碼管靜態顯示
實例56 74LS595串行擴展3位LED靜態顯示.rar (39.7 KB, 下載次數: 4)

Proteus仿真一下,確認有效。
以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設計有詳細說明,程序語句條條有注解。
仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。



作者: jjx@qq    時間: 2017-5-12 14:02
共陰編碼 改成共陽編碼
作者: jjx@qq    時間: 2017-5-12 14:04
code&nbsp;unsigned&nbsp;char&nbsp;tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};&nbsp;//共陽數碼管&nbsp;0-9
作者: 啊啊啊12138    時間: 2017-5-12 15:36
zl2168 發表于 2017-5-12 09:02
給你各介紹幾個共陰和共陽的掃描顯示案例,你自己去研讀改進吧!
共陰動態顯示:
實例57  74LS139選通4位 ...

恩,我多看看,謝謝
作者: 2695919781    時間: 2017-5-12 16:36
換一個芯片
作者: zl2168    時間: 2017-5-13 08:37
啊啊啊12138 發表于 2017-5-12 15:36
恩,我多看看,謝謝

給你9個案例了,共陰共陽、靜態動態、串行并行,都有。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1