欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機帶時鐘1602計算器終極程序 PCF8574T和PCF8563的通信協議 帶詳細注釋
[打印本頁]
作者:
想進步要學習
時間:
2020-1-29 13:45
標題:
單片機帶時鐘1602計算器終極程序 PCF8574T和PCF8563的通信協議 帶詳細注釋
一年前弄的小玩意了,硬件丟失了,翻出來,重新分割了下,加了詳細注釋,注釋很重要啊,以前沒加詳細,我自己理解起來也要半天,分享下,希望對他人有所幫助吧。其實我目前發的三個東西,現在想來,對單片機資源方面的知識涉及的不多,主要還是單片機C語言方面。在沒硬件的情況下,我想分享的是我的思維,我是如何構思的,是如何運用運算符變量語句的。
帶時鐘計算器2.png
(290.89 KB, 下載次數: 37)
下載附件
2020-1-29 13:43 上傳
帶時鐘計算器.png
(147.61 KB, 下載次數: 38)
下載附件
2020-1-29 13:43 上傳
單片機源程序如下:
//=================================================================================================================================================================================================================
//軟件功能:帶時鐘計算器
//硬件描述:最小系統(stc15)+ 1x(LCD1602 + PCF8574T) + 1x(5x4矩陣按鍵 + 74ls08)+ 1x(PCF8563)
//程序描述:IIC.c中有PCF8574T和PCF8563的通信協議
// anjian.c中有按鍵函數
// shizhong.c中有時鐘相關函數
// jisuan.c中有計算器相關函數
//功能概括描述:LCD1602用于顯示、可以切換計算器模式和時鐘模式(時間模式和鬧鐘模式)
// (用x和y表示兩個數的長度(小數點不算長度),則,x+y<16的條件下)可以進行四則運算
// 時間和鬧鐘可以設置
//=================================================================================================================================================================================================================
#include "reg15.h" //STC15Wxx/STC15Fxx系列頭文件
#include "IIC.h" //I2C通信協議
#include "anjian.h"
#include "shizhong.h"
#include "jisuan.h"
#define FOSC 11059200L
#define T50MS (65536-FOSC/12/20) //12T,11.0592MHz(50ms=20MHz)
#define ANJ P1
sbit INT0=P3^2;
//=================================================================================================================================================================================================================
uchar b=0,ajbh=21,hang,tsgn=0; //LCD列變量,按鍵編號變量,LCD行變量,特殊模式切換變量
uchar HUANCUN[16],SUM[17],a=0,j=0,K=0,L=0,q=1,p=0; //算式緩存數組,計算結果緩存數組,算式緩存數組對應位變量,運算符標識變量,第一位數小數點變量,第二位數小數點變量,運算符限制變量,小數點限制變量
uchar SZXSHC[8],sjsz=0,naoz=0,shuzi=10; //時間緩存變量,時鐘模式切換變量,鬧鐘模式切換變量,特殊模式下的數字鍵變量
//=================================================================================================================================================================================================================
//中斷和P口初始化程序
//=========================================================================================
void Init()
{
AUXR&=0x7f; //定時器0為12T模式
INT0=1; //外部中斷P口置高電平
ANJ=0xf0; //矩陣輸入輸出對應P口初始化
a4=0;
TMOD=0x00; //定時器為方式0(STC15F2K60S2方式0是16位自動重裝模式)
TL0=T50MS; //初始化定時值
TH0=T50MS>>8;
ET0=1; //定時器T0中斷開啟
IT0=1; //設置INT0的中斷類型為下降沿觸發
EX0=1; //INT0中斷開啟
PT0=1; //優先級T0優先
PX0=0; //外部中斷優先級低
EA=1; //總中斷開啟
TR0=0; //定時器0
}
//=========================================================================================
void main() //主函數
{
Init();
LCDInit(); //1602初始化
CleanAlarm(); //鬧鐘初始化
TR0=1;
while(1);
}
//=========================================================================================
//功能說明:按鍵所用中斷
// 矩陣按鍵的四個置位口連接74LS08的輸入端,用了3個與門,2個與門的輸出端接1個與門的輸入端,
// 最后引出來接INT0口,采用外部中斷方式
//=========================================================================================
void EX_T() interrupt 0
{
EX0=0; //INT0中斷關閉
IICdelay1(20); //去抖動
if(INT0==0) //如果仍有鍵按下
{
An_j();
Cu_l();
SZ_bd();
}
while(!INT0); //判斷按鍵是否松開
IICdelay1(20); //去抖動
EX0=1; //INT0中斷開啟
}
//==================================================================================
//功能說明:時鐘所用中斷
// 給定變量tu用于計時,200ms讀取一次鬧鐘響鈴位GetPCF8563(0x01,SZXSHC+7)
// 判斷該位,如果告警了,LCD右下角顯示字符'n'
// 持續12.5s后字符'n'消失
// 按任意鍵關閉鬧鐘在按鍵部分程序
//==================================================================================
void timer0() interrupt 1 //定時器中斷
{
static uchar cb=0,tu=0;
tu++;
if(tu==4){ //加計數變量tu,不然讀取速度過于頻繁
GetPCF8563(0x01,SZXSHC+7); //讀取溢出標志位到SZXSHC[7]
tu=0;
}
if(SZXSHC[7]&0x08){ //判斷鬧鐘溢出標志位是否為1(第4位)
if(cb==0){
tu=4;
cb=1;
LCD_writezl(0x01); //LCD清除顯示
GotoXY(15,1); //右下角顯示字符n
yige('n');
}else{
if(tu==254){ //顯示10多秒n后,鬧鐘自動關閉
SetPCF8563(0x01,0x02); //清除告警中斷位
LCD_writezl(0x01); //LCD清除顯示
tu=3;
cb=0;
}
}
}else{
Sh_z(sjsz);
Sh_z(naoz);
if(tu>4){ //如果是按任意鍵后關閉鬧鐘
tu=3;
cb=0;
}
}
}
//==================================================================================
復制代碼
原理圖: 無
仿真: 無
代碼:
帶時鐘1602計算器終極程序.rar
(540.32 KB, 下載次數: 68)
2020-1-29 13:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
XXT009435
時間:
2020-6-10 20:25
謝謝樓主非常好
作者:
123學習者
時間:
2020-6-11 12:33
感謝樓主
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1