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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機帶時鐘1602計算器終極程序 PCF8574T和PCF8563的通信協議 帶詳細注釋

[復制鏈接]
跳轉到指定樓層
樓主
一年前弄的小玩意了,硬件丟失了,翻出來,重新分割了下,加了詳細注釋,注釋很重要啊,以前沒加詳細,我自己理解起來也要半天,分享下,希望對他人有所幫助吧。其實我目前發的三個東西,現在想來,對單片機資源方面的知識涉及的不多,主要還是單片機C語言方面。在沒硬件的情況下,我想分享的是我的思維,我是如何構思的,是如何運用運算符變量語句的。





單片機源程序如下:
  1. //=================================================================================================================================================================================================================
  2. //軟件功能:帶時鐘計算器
  3. //硬件描述:最小系統(stc15)+ 1x(LCD1602 + PCF8574T) + 1x(5x4矩陣按鍵 + 74ls08)+ 1x(PCF8563)
  4. //程序描述:IIC.c中有PCF8574T和PCF8563的通信協議
  5. //          anjian.c中有按鍵函數
  6. //          shizhong.c中有時鐘相關函數
  7. //          jisuan.c中有計算器相關函數
  8. //功能概括描述:LCD1602用于顯示、可以切換計算器模式和時鐘模式(時間模式和鬧鐘模式)
  9. //              (用x和y表示兩個數的長度(小數點不算長度),則,x+y<16的條件下)可以進行四則運算
  10. //              時間和鬧鐘可以設置
  11. //=================================================================================================================================================================================================================
  12. #include "reg15.h"                                                               //STC15Wxx/STC15Fxx系列頭文件
  13. #include "IIC.h"                                                                       //I2C通信協議
  14. #include "anjian.h"
  15. #include "shizhong.h"
  16. #include "jisuan.h"
  17. #define FOSC 11059200L                                                                           
  18. #define T50MS (65536-FOSC/12/20)                                                       //12T,11.0592MHz(50ms=20MHz)        
  19. #define ANJ P1
  20. sbit INT0=P3^2;
  21. //=================================================================================================================================================================================================================
  22. uchar b=0,ajbh=21,hang,tsgn=0;                                                                      //LCD列變量,按鍵編號變量,LCD行變量,特殊模式切換變量                                
  23. uchar HUANCUN[16],SUM[17],a=0,j=0,K=0,L=0,q=1,p=0;                    //算式緩存數組,計算結果緩存數組,算式緩存數組對應位變量,運算符標識變量,第一位數小數點變量,第二位數小數點變量,運算符限制變量,小數點限制變量                                                                        
  24. uchar SZXSHC[8],sjsz=0,naoz=0,shuzi=10;                                            //時間緩存變量,時鐘模式切換變量,鬧鐘模式切換變量,特殊模式下的數字鍵變量
  25. //=================================================================================================================================================================================================================                                                                                   
  26. //中斷和P口初始化程序
  27. //=========================================================================================
  28. void Init()
  29. {
  30.         AUXR&=0x7f;                                                                                 //定時器0為12T模式
  31.         INT0=1;                                                                                           //外部中斷P口置高電平
  32.         ANJ=0xf0;                                                                                         //矩陣輸入輸出對應P口初始化
  33.         a4=0;
  34.         TMOD=0x00;                                                                                 //定時器為方式0(STC15F2K60S2方式0是16位自動重裝模式)
  35.         TL0=T50MS;                                                                                 //初始化定時值
  36.         TH0=T50MS>>8;
  37.         ET0=1;                                                       //定時器T0中斷開啟
  38.         IT0=1;                         //設置INT0的中斷類型為下降沿觸發
  39.   EX0=1;                                                       //INT0中斷開啟
  40.         PT0=1;                                                                                                 //優先級T0優先
  41.         PX0=0;                                                                                                 //外部中斷優先級低         
  42.         EA=1;                                                                                                    //總中斷開啟
  43.         TR0=0;                                     //定時器0
  44. }
  45. //=========================================================================================
  46. void main()                                                                                                   //主函數
  47. {
  48.         Init();
  49.         LCDInit();                                                                                           //1602初始化            
  50.         CleanAlarm();                                                                             //鬧鐘初始化
  51.         TR0=1;                                                                                                                                      
  52.         while(1);
  53. }
  54. //=========================================================================================
  55. //功能說明:按鍵所用中斷
  56. //          矩陣按鍵的四個置位口連接74LS08的輸入端,用了3個與門,2個與門的輸出端接1個與門的輸入端,
  57. //          最后引出來接INT0口,采用外部中斷方式
  58. //=========================================================================================
  59. void EX_T() interrupt 0                                                                  
  60. {         
  61.          EX0=0;                                                                                                       //INT0中斷關閉
  62.          IICdelay1(20);                                                                                   //去抖動
  63.          if(INT0==0)                                                                                     //如果仍有鍵按下
  64.          {
  65.            An_j();                                                                                          
  66.            Cu_l();
  67.            SZ_bd();
  68.          }
  69.          while(!INT0);                                                                                   //判斷按鍵是否松開
  70.          IICdelay1(20);                                                                                   //去抖動
  71.          EX0=1;                                                                                                       //INT0中斷開啟               
  72. }
  73. //==================================================================================
  74. //功能說明:時鐘所用中斷
  75. //          給定變量tu用于計時,200ms讀取一次鬧鐘響鈴位GetPCF8563(0x01,SZXSHC+7)
  76. //          判斷該位,如果告警了,LCD右下角顯示字符'n'
  77. //          持續12.5s后字符'n'消失
  78. //          按任意鍵關閉鬧鐘在按鍵部分程序
  79. //==================================================================================
  80. void timer0() interrupt 1                                                 //定時器中斷
  81. {         
  82.         static uchar cb=0,tu=0;
  83.         tu++;
  84.         if(tu==4){                                                                                           //加計數變量tu,不然讀取速度過于頻繁
  85.           GetPCF8563(0x01,SZXSHC+7);                    //讀取溢出標志位到SZXSHC[7]        
  86.                 tu=0;
  87.         }
  88.         if(SZXSHC[7]&0x08){                                                                 //判斷鬧鐘溢出標志位是否為1(第4位)
  89.           if(cb==0){
  90.       tu=4;
  91.                   cb=1;                        
  92.             LCD_writezl(0x01);             //LCD清除顯示
  93.             GotoXY(15,1);                                                                         //右下角顯示字符n
  94.             yige('n');
  95.           }else{
  96.              if(tu==254){                                                                   //顯示10多秒n后,鬧鐘自動關閉         
  97.                SetPCF8563(0x01,0x02);      //清除告警中斷位
  98.                LCD_writezl(0x01);          //LCD清除顯示
  99.                      tu=3;
  100.                      cb=0;
  101.                    }
  102.            }
  103.         }else{                          
  104.            Sh_z(sjsz);
  105.            Sh_z(naoz);
  106.                  if(tu>4){                       //如果是按任意鍵后關閉鬧鐘
  107.                    tu=3;
  108.                    cb=0;
  109.                  }         
  110.          }      
  111. }
  112. //==================================================================================
復制代碼

原理圖: 無
仿真: 無
代碼: 帶時鐘1602計算器終極程序.rar (540.32 KB, 下載次數: 68)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:775486 發表于 2020-6-10 20:25 | 只看該作者
謝謝樓主非常好
回復

使用道具 舉報

板凳
ID:666564 發表于 2020-6-11 12:33 | 只看該作者
感謝樓主
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年免费大片黄在线观看一级 | 在线免费小视频 | 亚洲精品电影在线观看 | 午夜视频免费在线 | 午夜视频一区二区 | 久久日韩精品一区二区三区 | 丁香五月网久久综合 | 亚洲精品久久久久久久久久吃药 | 国产一区二区欧美 | 99亚洲综合 | 国产一区二区三区四区五区3d | 欧美日韩国产一区二区三区不卡 | 国产成人麻豆免费观看 | 亚洲一区二区在线视频 | 一区二区三区欧美 | 精品久久久久久 | 欧美二区乱c黑人 | 成人免费视频网 | 波多野结衣亚洲 | 国产午夜在线 | 天天av天天好逼 | 久久久网 | 超碰97免费在线 | 综合一区 | 精品视频一区二区 | 国产精品色 | 密室大逃脱第六季大神版在线观看 | 日本涩涩网| 久久黄色网 | 婷婷五月色综合 | 午夜在线视频 | 精品综合网| 亚洲国产精品成人久久久 | 欧美精三区欧美精三区 | 激情网站在线 | 久久天天综合 | 国产婷婷综合 | 国产粉嫩尤物极品99综合精品 | zzzwww在线看片免费 | 久久99蜜桃综合影院免费观看 | 亚洲午夜视频在线观看 |