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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3743|回復(fù): 3
收起左側(cè)

雙路可編程數(shù)碼管顯示延時(shí)模塊電路圖資料與單片機(jī)源程序

[復(fù)制鏈接]
ID:280979 發(fā)表于 2018-2-8 00:26 | 顯示全部樓層 |閱讀模式
【簡(jiǎn)要說(shuō)明】
一、板子尺寸:長(zhǎng)113mmX寬72mmX18mm
二、主要器件:?jiǎn)纹瑱C(jī)、數(shù)碼管、繼電器
三、工作電壓:有12V24兩種可供選擇
四、板子功耗:小于300mA

GYJ-0054_雙路可編程數(shù)碼管顯示延時(shí)模塊的電路原理圖:
0.png

pcb圖:
0.png

實(shí)物圖與接線圖等:
DSC_0102.JPG DSC_0100.JPG DSC_0091.JPG DSC_0089.JPG DSC_0088.JPG


上電out1吸和 觸發(fā)端子1倒計(jì)時(shí)開始(時(shí)分秒)out2吸和  倒計(jì)時(shí)中按鍵不管用 觸發(fā)端子2則out1吸和
單片機(jī)源程序如下:
  1. #include "demo.h"
  2. #include "eeprom.h"

  3. #define uchar unsigned char//宏定義無(wú)符號(hào)字符型
  4. #define uint unsigned int  //宏定義無(wú)符號(hào)整型
  5. uint tcnt1=0;//用于刷新數(shù)碼管
  6. uint bainum1,shinum1,genum1;//數(shù)碼管上顯示
  7. uint bainum2,shinum2,genum2;//數(shù)碼管上顯示
  8. code uchar seg7code[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //顯示段碼 數(shù)碼管字跟
  9. uchar wei1[3]={0XDf,0XBf,0X7f};//數(shù)碼管1的位的控制端
  10. uchar wei2[3]={0XFb,0XF7,0Xef};//數(shù)碼管2的位的控制端
  11. bit flag_eeprom1=1;//掉電存儲(chǔ)的標(biāo)志位
  12. static uchar presstime=0;//時(shí)間值按鍵用到的
  13. uint kf0=1;//按鍵用的標(biāo)志位
  14. uint kt0=0;//按鍵用的標(biāo)志位
  15. uint keynum=0;//數(shù)碼管的位
  16. uint bainum11=0,shinum11=0,genum11=0;//用于傳到數(shù)碼管上顯示
  17. uint bainum22=0,shinum22=0,genum22=0;//用于傳到數(shù)碼管上顯示
  18. uint if0=1,if1=1;//觸發(fā)用的標(biāo)志位
  19. uint it0=0,it1=0;//觸發(fā)用的標(biāo)志位
  20. uint inum1=0,inum2=0,inum3=0;//觸發(fā)端子用的計(jì)數(shù)
  21. uint isecond1=0,isecond2=0;//觸發(fā)端子用的計(jì)數(shù)
  22. uint iminute1=0,iminute2=0;//觸發(fā)端子用的計(jì)數(shù)
  23. uchar inum11=0,inum12=0,inum21=0,inum22=0,inum31=0,inum32=0;//掉電存儲(chǔ)
  24. extern void keycan();//按鍵
  25. extern void keyflag();//按鍵結(jié)束調(diào)用
  26. extern void displaynum();//將數(shù)字傳到數(shù)碼管上顯示
  27. extern void operations();//操作
  28. void timer0_1init(void){//定時(shí)配置
  29.         TMOD=0x11;//將定時(shí)器0,1都設(shè)置為模式1
  30.         TL0 = 0xCD;//設(shè)置定時(shí)器0時(shí)間為2ms
  31.         TH0 = 0xF8;//設(shè)置定時(shí)器0的初始值
  32.         TR0=1;//開啟定時(shí)器0
  33.         TR1=1;//開啟定時(shí)器1
  34.         EA=1;//開總中斷
  35.         ET0=1;//開定時(shí)器0的中斷
  36. }
  37. void main(){
  38.         timer0_1init();
  39.    inum11=Byte_Read(0x01);//掉電存儲(chǔ)用到  
  40.    inum12=Byte_Read(0x02);//掉電存儲(chǔ)用到
  41.    inum21=Byte_Read(0x03);//掉電存儲(chǔ)用到
  42.    inum22=Byte_Read(0x04);//掉電存儲(chǔ)用到
  43.    inum31=Byte_Read(0x05);//掉電存儲(chǔ)用到
  44.    inum32=Byte_Read(0x06);//掉電存儲(chǔ)用到
  45.    inum1=inum11*100+inum12;
  46.    inum2=inum21*100+inum22;
  47.    inum3=inum31*100+inum32;
  48.    bainum11=inum1/10%10;
  49.    shinum11=inum1%10;
  50.    
  51.    genum11=inum2/10%10;
  52.    bainum22=inum2%10;
  53.    
  54.    shinum22=inum3/10%10;
  55.    genum22=inum3%10;
  56.    if(inum1>100 || inum1<0){
  57.                    inum1=0;
  58.    }
  59.    if(inum2>60 || inum2<0){
  60.                    inum2=0;
  61.    }
  62.    if(inum3>60 || inum3<0){
  63.                    inum3=0;
  64.    }
  65.         while(1){
  66.                 keycan();//調(diào)用按鍵
  67.                 operations();//調(diào)用操作       
  68.                 if (it0==1){//當(dāng)標(biāo)志位it0等于1時(shí)
  69.                         out2=0;//out2輸出
  70.                 }
  71.                 if (it0==0){out1=0;}
  72.         }
  73. }
  74. void operations(){//操作
  75.     if(in1==0){//當(dāng)觸發(fā)端子1觸發(fā)
  76.                 if0=0;//將if0值改為0,定時(shí)器開始倒計(jì)時(shí)
  77.                 it0=1;//將it0置為1,out1輸出
  78.         }
  79.     if(in2==0){if0=1;it0=0;}
  80. }//操作結(jié)束
  81. void keycan(){//按鍵
  82.         if(keynum==0){//當(dāng)按鍵值等于0的時(shí)候調(diào)用顯示
  83.                 displaynum();
  84.         }
  85. if(if0==1){
  86.     if(key1==0){//當(dāng)按鍵1按下
  87.                 if(kf0){//當(dāng)標(biāo)志位kf0=1的時(shí)候進(jìn)行
  88.                         if(presstime>100){//當(dāng)時(shí)間值大于一百的時(shí)候
  89.                                 kf0=0;//標(biāo)志位kf0=0
  90.                                 kt0=1;//標(biāo)志位kt0=0
  91.                                 presstime=0;//時(shí)間清零,重新進(jìn)行
  92.                                 keynum++;//數(shù)碼管的位
  93.                         if(keynum==7){//當(dāng)位到7則置位0
  94.                                    keynum=0;
  95.                                  }

  96.                         }
  97.                   }
  98.         }else{//當(dāng)按鍵松開
  99.                 keyflag();
  100.         }//按鍵1結(jié)束
  101. }
  102.     if(key2==0){if(kf0){if(presstime>100){kf0=0;kt0=1;presstime=0;flag_eeprom1=1;//掉電存儲(chǔ)的標(biāo)志位改為1,進(jìn)行存值操作
  103.                                 switch(keynum){
  104.                                         case 1:
  105.                                                 bainum11++;//數(shù)碼管一加加
  106.                                                 if(bainum11>9){//當(dāng)數(shù)碼管一加加到9時(shí)置為1
  107.                                                         bainum11=0;
  108.                                                 }
  109.                                                 break;
  110.                                         case 2:shinum11++;if(shinum11>9){shinum11=0;}break;
  111.                                         case 3:genum11++;if(genum11>5){genum11=0;}break;
  112.                                         case 4:bainum22++;if(bainum22>9){bainum22=0;}break;
  113.                                         case 5:shinum22++;if(shinum22>5){shinum22=0;}break;
  114.                                         case 6:genum22++;if(genum22>9){genum22=0;}break;
  115.                                         default:break;
  116.                                 }
  117.                         }}}else{keyflag();displaynum();
  118.                                         if((flag_eeprom1==1))//加掉電存儲(chǔ),必需加到這,不然有一些小問(wèn)題
  119.                                         {   flag_eeprom1=0;
  120.                                             saveeepro();//掉電存儲(chǔ)
  121.                                         }
  122.                         }//松開按鍵進(jìn)行顯示

  123.     if(key3==0){if(kf0){if(presstime>100){kf0=0;kt0=1;presstime=0;flag_eeprom1=1;
  124.                                 switch(keynum){
  125.                                         case 1:
  126.                                                 bainum11--;//數(shù)碼管一減減
  127.                                                 if(bainum11>111){//當(dāng)數(shù)碼管一減減到0時(shí)置為9
  128.                                                         bainum11=9;
  129.                                                 }
  130.                                                 break;
  131.                                         case 2:shinum11--;if(shinum11>111){shinum11=9;}break;
  132.                                         case 3:genum11--;if(genum11>111){genum11=5;}break;
  133.                                         case 4:bainum22--;if(bainum22>111){bainum22=9;}break;
  134.                                         case 5:shinum22--;if(shinum22>111){shinum22=5;}break;
  135.                                         case 6:genum22--;if(genum22>111){genum22=9;}break;
  136.                                         default:break;
  137.                                 }                               
  138.                         }}}else{keyflag();displaynum();if((flag_eeprom1==1)){flag_eeprom1=0;saveeepro();}}//松開按鍵進(jìn)行顯示       

  139. }//按鍵結(jié)束
  140. void displaynum(){//將數(shù)字傳到數(shù)碼管上顯示
  141.         if (if0==0){//當(dāng)if0==0時(shí)num1三個(gè)數(shù)碼管進(jìn)行顯示               
  142.                 bainum1=inum1/10%10;//十位
  143.                 shinum1=inum1%10;//個(gè)位
  144.                 genum1=inum2/10%10;//十位
  145.                 bainum2=inum2%10;//個(gè)位
  146.                 shinum2=inum3/10%10;//十位
  147.                 genum2=inum3%10;//個(gè)位
  148.         }else{
  149.                 bainum1=bainum11;
  150.                 shinum1=shinum11;
  151.                 genum1=genum11;
  152.                 bainum2=bainum22;
  153.                 shinum2=shinum22;
  154.                 genum2=genum22;
  155.                 inum1=bainum11*10+shinum11;        //將num1三個(gè)數(shù)碼管的值付給inum
  156.                 inum2=genum11*10+bainum22;
  157.                 inum3=shinum22*10+genum22;
  158.         }                         
  159. }
  160. void saveeepro(){//掉電存儲(chǔ)
  161.                          inum11=inum1/100;//把int型的值拆分到char型
  162.                          inum12=inum1%100;
  163.                          inum21=inum2/100;
  164.                          inum22=inum2%100;
  165.                          inum31=inum3/100;
  166.                          inum32=inum3%100;
  167.                             Sector_Erase(0);           //擦除0x01地址中的數(shù)據(jù)          一定要先擦除再寫進(jìn)  同一地址                               
  168.                       Byte_Program(0x01,inum11);            //擦除完成就可以寫入了
  169.                           Byte_Program(0x02,inum12);            //擦除完成就可以寫入了
  170.                       Byte_Program(0x03,inum21);            //擦除完成就可以寫入了
  171.                           Byte_Program(0x04,inum22);            //擦除完成就可以寫入了
  172.                       Byte_Program(0x05,inum31);            //擦除完成就可以寫入了
  173.                           Byte_Program(0x06,inum32);            //擦除完成就可以寫入了
  174. }
  175. void timer0(void)interrupt 1  {//定時(shí)器0          
  176.         //500等于1秒
  177.         TL0 = 0xCD;                //重新設(shè)置定時(shí)器0時(shí)間為2ms
  178.         TH0 = 0xF8;                //重新設(shè)置定時(shí)器0的初始值
  179.         tcnt1++;//用于刷新數(shù)碼管
  180.         presstime++;//按鍵用到,用于防抖       
  181.         if (if0==0){//當(dāng)if0等于0時(shí)
  182.                 isecond1++;//當(dāng)觸發(fā)1觸發(fā)后進(jìn)行計(jì)數(shù)(秒)
  183.                 if (isecond1==500){//一秒時(shí)間到
  184.                         isecond1=0;//置為0,重新開始計(jì)
  185.                         if(if1==1){
  186.                                 if1=0;
  187.                         }else{
  188.                                 if1=1;
  189.                         }
  190.                         inum3--;
  191.                         if(inum3<0 || inum3>60 ){//說(shuō)明一分鐘到了
  192.                                 inum3=59;
  193.                                 inum2--;//inum進(jìn)行減減
  194.                                 if(inum2<0 || inum2>60){//當(dāng)inum等于0時(shí)
  195.                                         inum2=59;
  196.                                         inum1--;
  197.                                         if(inum1<0|| inum1>100){                                                              
  198.                                                         if0=1;//將標(biāo)志位if0置為1
  199.                                                         it0=0;//將標(biāo)志位it0置為0,out1斷開
  200.                                         }
  201.                                 }
  202.                         }
  203.                 }
  204.         }//觸發(fā)端子1的計(jì)時(shí)結(jié)束
  205.         switch(tcnt1){
  206.         /**************數(shù)碼管1-開始*****************/
  207.           case 1: P2=0XFF; P0=seg7code[bainum1];if(keynum==1 || keynum==0){P2=wei1[2];}break;
  208.           case 2: P2=0XFF; P0=seg7code[shinum1];if(keynum==2 || keynum==0){P2=wei1[1];}break;
  209.           case 3: P2=0XFF; P0=0x7f;if(if1==1){P2=wei1[1];}break;//小數(shù)點(diǎn)
  210.           case 4: P2=0XFF; P0=seg7code[genum1]; if(keynum==3 || keynum==0){P2=wei1[0];}break;
  211.         /**************數(shù)碼管1-結(jié)束*****************/
  212.         /**************數(shù)碼管2-開始*****************/       
  213.           case 5: P2=0XFF; P0=seg7code[bainum2];if(keynum==4 || keynum==0){P2=wei2[2];}break;
  214.           case 6: P2=0XFF; P0=0x7f;if(if1==1){P2=wei2[2];}break;
  215.           case 7: P2=0XFF; P0=seg7code[shinum2];if(keynum==5 || keynum==0){P2=wei2[1];}break;
  216.           case 8: P2=0XFF; P0=seg7code[genum2]; if(keynum==6 || keynum==0){P2=wei2[0];}break;
  217.         /**************數(shù)碼管2-結(jié)束*****************/       
  218.           default: tcnt1=0; P2=0XFF; break;
  219.          }
  220. }//定時(shí)器0結(jié)束
  221. void keyflag(){//按鍵結(jié)束調(diào)用,按鍵的建議使用,這樣可以減小code,但是觸發(fā)的不建議
  222.            if(kt0){//當(dāng)標(biāo)志位kt0=1的時(shí)候進(jìn)行
  223.                    if(presstime>100){//當(dāng)時(shí)間值大于一百的時(shí)候
  224.                         kf0=1;//標(biāo)志位kf0=1
  225.                         kt0=0;//標(biāo)志位kt0=0
  226. ……………………

  227. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

有如下測(cè)試程序
觸發(fā)之后延時(shí)時(shí)間接通(分鐘)時(shí)間可調(diào)0-999
觸發(fā)之后延時(shí)時(shí)間接通(秒)時(shí)間可調(diào)0-999
觸發(fā)之后延時(shí)時(shí)間斷開(分鐘)時(shí)間可調(diào)0-999
觸發(fā)之后延時(shí)時(shí)間斷開(秒)時(shí)間可調(diào)0-999
設(shè)置觸發(fā)次數(shù),當(dāng)觸發(fā)端子1觸發(fā)到設(shè)置的次數(shù)out1吸和   觸發(fā)端子2out2同理
設(shè)置觸發(fā)次數(shù),當(dāng)觸發(fā)端子1觸發(fā)到設(shè)置的次數(shù)out1斷開  觸發(fā)端子2out2同理
0.png

所有資料51hei提供下載:
GYJ-0054_雙路可編程數(shù)碼管顯示延時(shí)模塊發(fā)貨資料.rar (291.71 KB, 下載次數(shù): 38)



回復(fù)

使用道具 舉報(bào)

ID:272609 發(fā)表于 2018-9-23 08:15 | 顯示全部樓層
謝謝樓主的分享,雖然不能完全看懂,不過(guò)也能學(xué)到很多的東西,另外好像你這個(gè)主芯片不是89C51了,又增加了一些難度
回復(fù)

使用道具 舉報(bào)

ID:405738 發(fā)表于 2018-10-6 08:06 | 顯示全部樓層
樓主資料不錯(cuò)
回復(fù)

使用道具 舉報(bào)

ID:752621 發(fā)表于 2020-5-15 15:48 | 顯示全部樓層
我想下載,怎樣才能下載?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码一区二区三区a | av手机免费在线观看 | 欧美日韩精品久久久免费观看 | 精品国产欧美一区二区三区成人 | 麻豆av一区二区三区久久 | 欧美在线一区二区三区 | 欧美一区二区视频 | 国产一区二区在线免费观看 | 国产成人免费视频 | 欧美偷偷操 | 中文字幕第九页 | 亚洲精品www | 成人欧美一区二区三区色青冈 | 亚洲国产精品一区二区久久 | 午夜在线观看视频 | 日韩精品中文字幕一区二区三区 | 天天操天天插天天干 | 亚洲不卡在线观看 | 成人网在线 | 国产欧美精品一区二区三区 | 国产三区视频在线观看 | 在线免费观看黄a | 一区二区三区四区日韩 | a级毛片免费高清视频 | 国产成人高清视频 | 九九热精品视频 | 久热久草 | 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲精品久久久久久久久久久 | 免费成人高清 | 欧美精品一区二区三区在线 | 最近日韩中文字幕 | 欧美一级在线观看 | 欧美中文字幕 | 久久精品青青大伊人av | www.日本三级| 一区二区日韩 | 成年人在线观看 | 一区| 欧美福利精品 | 日韩成人免费 |