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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機程序怎么把共陰數碼管程序改成共陽的

[復制鏈接]
跳轉到指定樓層
樓主

  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. }

復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:196319 發表于 2017-5-10 22:18 | 只看該作者
突然發現這段函數和平時的共陰數碼管函數好像不一樣,突然不會改了   數碼管1號口接的是P0.7
/////共陰數碼管段信號編碼////////
uchar code table[10]=//0---9
{0xFC,0x60,0xDA,0xF2,0x66,
0xB6,0xBE,0xE0,0xFE,0xF6};//
有人會修改嗎?
回復

使用道具 舉報

板凳
ID:183046 發表于 2017-5-10 23:10 | 只看該作者
下個這個軟件就好了可以給你算數組

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

無標題.png
回復

使用道具 舉報

地板
ID:111634 發表于 2017-5-10 23:37 | 只看該作者
關鍵是先改電路。光改程序是改不好的。程序是配合電路的。一上來就貼出冗長程序,說明你思路錯了,理解錯了。
回復

使用道具 舉報

5#
ID:123289 發表于 2017-5-10 23:46 | 只看該作者
說明你并未真正地了解LED驅動的原理。
回復

使用道具 舉報

6#
ID:192523 發表于 2017-5-11 14:27 | 只看該作者
如果是io口直接驅動的數碼管程序的話只要把輸出取反就可以了,如果是用7段譯碼器就不一樣了
回復

使用道具 舉報

7#
ID:199559 發表于 2017-5-11 15:13 | 只看該作者
io口直接驅動的數碼管程序的話只要把輸出取反就可以了
回復

使用道具 舉報

8#
ID:111634 發表于 2017-5-11 18:39 | 只看該作者
io口直接驅動,若是共陰LED,怎么直接驅動?20uA,會亮么?
回復

使用道具 舉報

9#
ID:196319 發表于 2017-5-12 00:15 | 只看該作者
zl2168 發表于 2017-5-10 23:37
關鍵是先改電路。光改程序是改不好的。程序是配合電路的。一上來就貼出冗長程序,說明你思路錯了,理解錯了 ...

我修改過線路,然后稍微改了程序,發現只能顯示出0000  按下功能按鍵毫無反應,所以來求助了
回復

使用道具 舉報

10#
ID:196319 發表于 2017-5-12 00:15 | 只看該作者
maidezhu 發表于 2017-5-10 23:10
下個這個軟件就好了可以給你算數組

我去下載試試,謝謝提醒
回復

使用道具 舉報

11#
ID:196319 發表于 2017-5-12 00:35 | 只看該作者
joeky 發表于 2017-5-11 15:13
io口直接驅動的數碼管程序的話只要把輸出取反就可以了

試過直接取反,沒有用
回復

使用道具 舉報

12#
ID:196319 發表于 2017-5-12 00:37 | 只看該作者
zl2168 發表于 2017-5-11 18:39
io口直接驅動,若是共陰LED,怎么直接驅動?20uA,會亮么?

共陰是直接驅動,共陽加上245芯片
回復

使用道具 舉報

13#
ID:196319 發表于 2017-5-12 00:38 | 只看該作者
桂木桂馬 發表于 2017-5-11 14:27
如果是io口直接驅動的數碼管程序的話只要把輸出取反就可以了,如果是用7段譯碼器就不一樣了

io直接驅動,但是直接取反沒效果
回復

使用道具 舉報

14#
ID:111634 發表于 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數碼管動態顯示

實例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文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。


回復

使用道具 舉報

15#
ID:191441 發表于 2017-5-12 14:02 | 只看該作者
共陰編碼 改成共陽編碼
回復

使用道具 舉報

16#
ID:191441 發表于 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
回復

使用道具 舉報

17#
ID:196319 發表于 2017-5-12 15:36 | 只看該作者
zl2168 發表于 2017-5-12 09:02
給你各介紹幾個共陰和共陽的掃描顯示案例,你自己去研讀改進吧!
共陰動態顯示:
實例57  74LS139選通4位 ...

恩,我多看看,謝謝
回復

使用道具 舉報

18#
ID:200002 發表于 2017-5-12 16:36 | 只看該作者
換一個芯片
回復

使用道具 舉報

19#
ID:111634 發表于 2017-5-13 08:37 | 只看該作者
啊啊啊12138 發表于 2017-5-12 15:36
恩,我多看看,謝謝

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区视频 | 九色国产 | 亚洲福利av | 美美女高清毛片视频免费观看 | 国产精品高潮呻吟久久久久 | 久久国产欧美日韩精品 | 久久久久国产精品一区 | 天天综合网天天综合 | 国产精品久久一区二区三区 | 中文字幕精品视频 | 欧美一级在线 | 国产视频福利在线观看 | 日韩精品一区二区三区中文在线 | 久久久久久国产精品免费免费狐狸 | 一区二区三区四区电影 | 国产黄色大片在线免费观看 | 福利影院在线看 | 日韩精品一区二区三区在线观看 | 精品成人佐山爱一区二区 | 国产精品夜夜春夜夜爽久久电影 | 欧美一区二区在线播放 | 99久久中文字幕三级久久日本 | 国产三级 | 亚洲精品欧美一区二区三区 | 精品免费国产视频 | 日韩成人一区 | 国产精品久久久久9999鸭 | 成人在线观看中文字幕 | 一区二区在线免费观看 | 久久激情网 | 黄视频欧美| 亚洲视频一区二区三区 | 午夜电影网 | 亚洲综合色视频在线观看 | 欧美精品一区二区在线观看 | 亚洲精品久久久久久久久久久久久 | 国产精品亚洲成在人线 | 日本不卡一区二区三区在线观看 | 一区二区三区在线观看免费视频 | 日本久久久久久 | 日韩第1页 |