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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:196319 發(fā)表于 2017-5-10 22:11 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

  1. #include<reg51.h>
  2. #define uchar unsigned char         
  3. #define uint unsigned int
  4. //數(shù)碼管位端口定義
  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. /////共陰數(shù)碼管段信號編碼////////
  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;//顯示拆分數(shù)據(jù)
  23. void delay(uint ms)//1ms  延時函數(shù)   數(shù)據(jù)保持用的
  24. {
  25.         uchar x;
  26.         for(ms;ms>0;ms--)
  27.                 for(x=110;x>0;x--);
  28. }
  29. void display()//顯示函數(shù)
  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位顯示數(shù)據(jù)
  36.         P0=0x00;w1=1;//關閉顯示消除動態(tài)掃描陰影
  37.         w2=0;P0=table[d2]|0x01;delay(10);//第2位顯示數(shù)據(jù)
  38.         P0=0x00;w2=1;//關閉顯示消除動態(tài)掃描陰影
  39.         w3=0;P0=table[d3];delay(10);//第3位顯示數(shù)據(jù)
  40.         P0=0x00;w3=1;//關閉顯示消除動態(tài)掃描陰影
  41.         w4=0;P0=table[d4]|0x01;delay(10);//第4位顯示數(shù)據(jù)
  42.         P0=0x00;w4=1;//關閉顯示消除動態(tài)掃描陰影


  43. }
  44. void disp_set()//顯示函數(shù)
  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位顯示數(shù)據(jù)
  51.         P0=0x00;w1=1;//關閉顯示消除動態(tài)掃描陰影
  52.         w2=0;P0=table[d2]|0x01;delay(10);//第2位顯示數(shù)據(jù)
  53.         P0=0x00;w2=1;//關閉顯示消除動態(tài)掃描陰影
  54.         w3=0;P0=table[d3];delay(10);//第3位顯示數(shù)據(jù)
  55.         P0=0x00;w3=1;//關閉顯示消除動態(tài)掃描陰影
  56.         w4=0;P0=table[d4]|0x01;delay(10);//第4位顯示數(shù)據(jù)
  57.         P0=0x00;w4=1;//關閉顯示消除動態(tài)掃描陰影

  58. }
  59. void keyscan()//調時按鍵掃描函數(shù)
  60. {
  61. uchar k_flag,set_flag;
  62.         if(key1==0)//按鍵按下           一下所有按鍵執(zhí)行的模式都是一樣的
  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)//開始調整小時數(shù)據(jù)
  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)//開始調整分鐘數(shù)據(jù)
  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();//顯示函數(shù)
  227.                 keyscan();//按鍵掃描函數(shù)
  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 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

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

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

無標題.png
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

14#
ID:111634 發(fā)表于 2017-5-12 09:02 | 只看該作者
本帖最后由 zl2168 于 2017-5-12 19:14 編輯

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

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

實例59  74LS595串行選通8LED數(shù)碼管動態(tài)顯示

實例59 74LS595×2選通8位LED動態(tài)顯示.rar (45.12 KB, 下載次數(shù): 4)

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


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

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






實例54 74LS164串行擴展3LED數(shù)碼管靜態(tài)顯示




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

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

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

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


回復

使用道具 舉報

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

使用道具 舉報

16#
ID:191441 發(fā)表于 2017-5-12 14:04 | 只看該作者
code&nbsp;unsigned&nbsp;char&nbsp;tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};&nbsp;//共陽數(shù)碼管&nbsp;0-9
回復

使用道具 舉報

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

恩,我多看看,謝謝
回復

使用道具 舉報

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

使用道具 舉報

19#
ID:111634 發(fā)表于 2017-5-13 08:37 | 只看該作者

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品美女一区二区 | 一区二区三区久久久 | 日日夜夜精品视频 | 国产成人综合久久 | 999精品视频 | 黄色一级在线播放 | 欧美日韩综合 | 91中文字幕| 成人在线视频一区 | 国产精品18hdxxxⅹ在线 | 超黄视频网站 | 色射综合| 福利视频网站 | 久久一日本道色综合久久 | 国产欧美一区二区三区在线看 | 一区二区三区四区不卡 | 美国一级片在线观看 | 日韩视频区 | 久久国产精品无码网站 | 91网在线观看 | 国产精品日韩一区二区 | 天堂网色 | 日本aa毛片a级毛片免费观看 | 激情婷婷 | 久久久久久av | 精品国产乱码久久久久久88av | 狠狠久| 久久久久久电影 | 桃色五月 | 国产精品久久久一区二区三区 | h视频免费观看 | 亚洲国产精品久久久 | 亚洲 中文 欧美 日韩 在线观看 | 国产精品精品视频一区二区三区 | 欧美www在线 | 久久网站免费视频 | 99久久久无码国产精品 | 亚洲伊人a | 99国产精品久久久久久久 | 国产日韩精品一区 | 国产精品亚洲一区 |