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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC12C2052單片機(jī)+MINI12864的時鐘+計(jì)數(shù)器

[復(fù)制鏈接]
ID:977804 發(fā)表于 2022-3-24 18:28 | 顯示全部樓層 |閱讀模式
用20引腳的小單片機(jī),驅(qū)動1302時鐘芯片,和小屏12864顯示時間和計(jì)數(shù)信息。
由于只有2K ROM空間,所以程序比較簡單,沒有調(diào)時間,按鍵采用外部中斷和定時器控制防連續(xù)計(jì)數(shù)
按一下外部中斷1,單次數(shù)值 +1,按一下外部中斷2,單次清0,積++,
制作出來的實(shí)物圖如下:
f8e407c6c3a23c57344059fc31bd59e.jpg

單片機(jī)源程序如下:
  1. /****************************************************************
  2. 通用頭文件
  3. ****************************************************************/
  4. #include <STC12C2052.H>
  5. #include <intrins.h>
  6. #include <DS1302.H>                  
  7. #include<time0.H>
  8. #include<STC12C2052EEPROM.H>
  9. #include <LCDMINI12864.H>

  10. //uchar x;
  11. //#include<KEY.H>
  12. /****************************************************************
  13. 硬件接口定義
  14. ****************************************************************/
  15. /*DS1302IO接口 請用3P杜邦線與對應(yīng)的P1口鏈接*/
  16. //sbit TSCLK = P1^0;   //DS1302時鐘引腳
  17. //sbit TIO   = P1^1;   //DS1302數(shù)據(jù)引腳
  18. //sbit TRST  = P1^2;   //DS1302使能引腳
  19. /*4位獨(dú)立按鍵引腳*/
  20. //sbit KEY_S2 = P3^0;        //S2獨(dú)立按鍵
  21. //sbit KEY_S3 = P3^1;        //S3獨(dú)立按鍵
  22. //sbit KEY_S4 = P3^2;        //S4獨(dú)立按鍵
  23. //sbit KEY_S5 = P3^3;        //S5獨(dú)立按鍵

  24. /*數(shù)碼管*/
  25. //sbit WE = P2^7;        //數(shù)碼管位選       
  26. //sbit DU = P2^6;        //數(shù)碼管段選

  27. /*DS18B20溫度傳感器引腳*/
  28. //sbit DS18B20_IO = P2^2;   //DS18B20通信引腳
  29. /*5V有源蜂鳴器引腳*/
  30. //sbit BUZZER = P2^3;        //蜂鳴器引腳
  31. sbit BEEP = P3^4 ;          //蜂鳴器
  32. void LCDMINI12864_EEPROM_DIS()
  33. {
  34.                             
  35.                         //  計(jì)數(shù)值   單
  36.                         strEEPROM_Z1[0] = (EEPROM_Z1/100) + '!';  //十位轉(zhuǎn)為ASCII碼
  37.                                                 strEEPROM_Z1[1] =  ' ';  //十位轉(zhuǎn)為ASCII碼
  38.                         strEEPROM_Z1[2] = (EEPROM_Z1% 100/10) + '!';  //十位轉(zhuǎn)為ASCII碼
  39.                                                 strEEPROM_Z1[3] =  ' ';  //十位轉(zhuǎn)為ASCII碼
  40.                         strEEPROM_Z1[4] = (EEPROM_Z1% 10) + '!';  //十位轉(zhuǎn)為ASCII碼
  41.                         strEEPROM_Z1[5] = '\0';             //字符串結(jié)束符
  42.                     Disp_String_8x16( 7, 59, strEEPROM_Z1);//顯示溫度

  43.                         //  計(jì)數(shù)值   總
  44.                         strEEPROM_Z2[0] = (EEPROM_Z2/100) + '!';  //十位轉(zhuǎn)為ASCII碼
  45.                         strEEPROM_Z2[1] = (EEPROM_Z2% 100/10) + '!';  //十位轉(zhuǎn)為ASCII碼
  46.                         strEEPROM_Z2[2] = (EEPROM_Z2% 10) + '!';  //十位轉(zhuǎn)為ASCII碼
  47.                         strEEPROM_Z2[3] = '\0';             //字符串結(jié)束符
  48.                     Disp_String_8x16( 5, 28, strEEPROM_Z2);//顯示溫度
  49.                
  50.                
  51. }
  52. void main()
  53. {

  54.          

  55.         InitLcd();//mini12864初始化
  56.         LcdCls( 1, 1, 128, 64); //清屏指定區(qū)域
  57.         LCDMINI12864_GUDING(); //液晶顯示固定不變的信息
  58. //        inital_1302();  // 時鐘初始化
  59.         P1M0=0;                P1M1=0XE0;  //  DS1302推挽輸出,因?yàn)闆]接上拉電阻 ,信號不穩(wěn)定
  60.         time0init();  //定時器0 初始化
  61.         EEPROM_Z1= dcx(0x2000);         // 開機(jī)讀取EEPROM區(qū) 總值
  62.         EEPROM_Z2= dcx(0x2001);         // 開機(jī)讀取EEPROM區(qū) 總值
  63. //        EEPROM_Z1=EEPROM_Z1A*256+EEPROM_Z1B        ;  //拆分的值 再乘回去,顯示
  64.         EA=1;
  65.          EX0=1;         //外部中斷0開
  66.         IT0=1;         //電平觸發(fā)
  67.                  EX1=1;         //外部中斷0開
  68.         IT1=1;         //電平觸發(fā)
  69.        
  70.         while(1)
  71.         {
  72.                 
  73.                         
  74.                  if(t0z3>=15)  // 上電定時器++,1.5秒后
  75.                  {
  76.                          x4_flag=1;                //標(biāo)志位置1,讓t0z3不再加值 ,
  77.                     LCDMINI12864_TIME_DIS2();  //  上電1。5后先刷新一次  時值 ,然后1000個50毫秒后再刷新
  78.                         LCDMINI12864_TIME_DIS3();  //刷新一次 周 年  月  日 ,然后都不刷新了。
  79.                  }
  80.          if(x1_flag==1){LCDMINI12864_TIME_DIS1();x1_flag=0;t0z1=0;        }        //單獨(dú)讀秒,分 并刷新 秒 分
  81.          if(x2_flag==1){LCDMINI12864_EEPROM_DIS();x2_flag=0;t0z0=3;        }         //顯示計(jì)數(shù)值
  82.          if(x3_flag==1){LCDMINI12864_TIME_DIS2();x3_flag=0;t0z2=0;        }         //讀時 并刷新   時
  83.           
  84.                
  85.         }
  86. }

  87. void exint0() interrupt 0
  88. {  
  89.         if(t0z0>=19)  //  計(jì)時器0過了19個50毫秒,后
  90.         {
  91.         EEPROM_Z1++;         //計(jì)數(shù)值 ++
  92.         BEEP=0;                   //  FMQ響
  93.          
  94.         t0z0=0;                // 讓計(jì)數(shù)器0歸0
  95.         if(EEPROM_Z1>=200)delay(900);  // 如果計(jì)數(shù)值 到了200,長響,       
  96.         else delay(300);           //讓FMQ響一會
  97.         BEEP=1;                   //  關(guān)閉FMQ
  98.                 cc(0x2000);         // 擦除第1個扇區(qū)(2000h~21FFh)                                       
  99.                    xcx(0x2000,EEPROM_Z1);         // 對EEPROM區(qū)2002h寫入2
  100.                 xcx(0x2001,EEPROM_Z2);         // 對EEPROM區(qū)2002h寫入2   
  101.                 EA=1;  //使用EEPROM后,要再開
  102.                        
  103.         }  
  104.        
  105. }

  106.          void exint1() interrupt 2            //清零鍵
  107. {  
  108. delay(300);           //延時一會
  109.         EEPROM_Z1=0;                //  計(jì)數(shù)值 清零
  110.         EEPROM_Z2++;                //  累計(jì)值 +1
  111.         cc(0x2000);         // 擦除第1個扇區(qū)(2000h~21FFh)                                       
  112.                    xcx(0x2000,EEPROM_Z1);         // 對EEPROM區(qū)2002h寫入2  
  113.                 xcx(0x2001,EEPROM_Z2);         // 對EEPROM區(qū)2002h寫入2  
  114.                 EA=1;  //使用EEPROM后,要再開
  115.                  t0z0=0;                          //  計(jì)時器0歸0,讓計(jì)數(shù)值 刷新 顯示
  116. }

復(fù)制代碼
Keil代碼有待改進(jìn):
11 清零鍵加延時 要不然會連續(xù)加數(shù) 未成功 下次再加.rar (57.3 KB, 下載次數(shù): 14)
Honeycam 2022-03-24 18-26-57.gif

評分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产美女永久免费无遮挡 | 午夜精品久久久久99蜜 | 免费视频久久久久 | 精品久久久久久久久久久久久久 | 精品成人佐山爱一区二区 | 日韩在线国产 | 欧美一区二区三区国产 | 欧美精品一二区 | 久久久噜噜噜www成人网 | 人人干视频在线 | 国产一区二区三区在线视频 | 91国语清晰打电话对白 | 99re6在线视频 | 中文字幕在线视频免费视频 | 精品国产91| 色免费视频 | 范冰冰一级做a爰片久久毛片 | 亚洲一区二区三区视频 | 色婷婷av99xx | 在线日韩欧美 | 99精品一区二区 | 99精品视频一区二区三区 | 欧美色性| 亚洲三区在线 | 亚洲一区二区三区在线观看免费 | 女女百合av大片一区二区三区九县 | 久久久久久久97 | 99精品国产成人一区二区 | 成人小视频在线观看 | 日本天天色 | 999久久久| 亚洲高清成人 | 成人影院一区二区三区 | 伊人久久大香线 | 日韩电影中文字幕 | 成人欧美一区二区 | 色在线免费 | 99精品久久| 欧美色专区 | 日韩一区在线视频 | 九一在线 |