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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4298|回復: 3
收起左側

雙路可編程數碼管顯示延時模塊電路圖資料與單片機源程序

[復制鏈接]
ID:280979 發表于 2018-2-8 00:26 | 顯示全部樓層 |閱讀模式
【簡要說明】
一、板子尺寸:長113mmX寬72mmX18mm
二、主要器件:單片機、數碼管、繼電器
三、工作電壓:有12V24兩種可供選擇
四、板子功耗:小于300mA

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

pcb圖:
0.png

實物圖與接線圖等:
DSC_0102.JPG DSC_0100.JPG DSC_0091.JPG DSC_0089.JPG DSC_0088.JPG


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

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

  96.                         }
  97.                   }
  98.         }else{//當按鍵松開
  99.                 keyflag();
  100.         }//按鍵1結束
  101. }
  102.     if(key2==0){if(kf0){if(presstime>100){kf0=0;kt0=1;presstime=0;flag_eeprom1=1;//掉電存儲的標志位改為1,進行存值操作
  103.                                 switch(keynum){
  104.                                         case 1:
  105.                                                 bainum11++;//數碼管一加加
  106.                                                 if(bainum11>9){//當數碼管一加加到9時置為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))//加掉電存儲,必需加到這,不然有一些小問題
  119.                                         {   flag_eeprom1=0;
  120.                                             saveeepro();//掉電存儲
  121.                                         }
  122.                         }//松開按鍵進行顯示

  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--;//數碼管一減減
  127.                                                 if(bainum11>111){//當數碼管一減減到0時置為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();}}//松開按鍵進行顯示       

  139. }//按鍵結束
  140. void displaynum(){//將數字傳到數碼管上顯示
  141.         if (if0==0){//當if0==0時num1三個數碼管進行顯示               
  142.                 bainum1=inum1/10%10;//十位
  143.                 shinum1=inum1%10;//個位
  144.                 genum1=inum2/10%10;//十位
  145.                 bainum2=inum2%10;//個位
  146.                 shinum2=inum3/10%10;//十位
  147.                 genum2=inum3%10;//個位
  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三個數碼管的值付給inum
  156.                 inum2=genum11*10+bainum22;
  157.                 inum3=shinum22*10+genum22;
  158.         }                         
  159. }
  160. void saveeepro(){//掉電存儲
  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地址中的數據          一定要先擦除再寫進  同一地址                               
  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  {//定時器0          
  176.         //500等于1秒
  177.         TL0 = 0xCD;                //重新設置定時器0時間為2ms
  178.         TH0 = 0xF8;                //重新設置定時器0的初始值
  179.         tcnt1++;//用于刷新數碼管
  180.         presstime++;//按鍵用到,用于防抖       
  181.         if (if0==0){//當if0等于0時
  182.                 isecond1++;//當觸發1觸發后進行計數(秒)
  183.                 if (isecond1==500){//一秒時間到
  184.                         isecond1=0;//置為0,重新開始計
  185.                         if(if1==1){
  186.                                 if1=0;
  187.                         }else{
  188.                                 if1=1;
  189.                         }
  190.                         inum3--;
  191.                         if(inum3<0 || inum3>60 ){//說明一分鐘到了
  192.                                 inum3=59;
  193.                                 inum2--;//inum進行減減
  194.                                 if(inum2<0 || inum2>60){//當inum等于0時
  195.                                         inum2=59;
  196.                                         inum1--;
  197.                                         if(inum1<0|| inum1>100){                                                              
  198.                                                         if0=1;//將標志位if0置為1
  199.                                                         it0=0;//將標志位it0置為0,out1斷開
  200.                                         }
  201.                                 }
  202.                         }
  203.                 }
  204.         }//觸發端子1的計時結束
  205.         switch(tcnt1){
  206.         /**************數碼管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;//小數點
  210.           case 4: P2=0XFF; P0=seg7code[genum1]; if(keynum==3 || keynum==0){P2=wei1[0];}break;
  211.         /**************數碼管1-結束*****************/
  212.         /**************數碼管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.         /**************數碼管2-結束*****************/       
  218.           default: tcnt1=0; P2=0XFF; break;
  219.          }
  220. }//定時器0結束
  221. void keyflag(){//按鍵結束調用,按鍵的建議使用,這樣可以減小code,但是觸發的不建議
  222.            if(kt0){//當標志位kt0=1的時候進行
  223.                    if(presstime>100){//當時間值大于一百的時候
  224.                         kf0=1;//標志位kf0=1
  225.                         kt0=0;//標志位kt0=0
  226. ……………………

  227. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

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

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



回復

使用道具 舉報

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

使用道具 舉報

ID:405738 發表于 2018-10-6 08:06 | 顯示全部樓層
樓主資料不錯
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表