freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機(jī)的電子萬年歷帶計算器-資料下載頁

2024-11-10 02:44本頁面

【導(dǎo)讀】它可以對年、月、日、時、分、秒進(jìn)行計時,還具有閏年補(bǔ)償?shù)取1敬卧O(shè)計選用DALLAS公司生產(chǎn)的日歷時鐘芯片DS1302來作為實。且DS1302的使用壽命長,誤差小,功耗低等優(yōu)點(diǎn)。電子萬年歷采用直觀數(shù)字顯。本次設(shè)計在電子萬年歷的基礎(chǔ)上加上了計算器,通過切換鍵來實現(xiàn)兩。計算器可以進(jìn)行7位數(shù)的加、減、乘、除,但是最大有效顯示結(jié)。時鐘芯片DS1302;單片機(jī)STC89C52RC;液晶顯示器LCD1602;晶振;

  

【正文】 tCursor(unsigned char x, unsigned char y) { unsigned char addr。 if (y == 0) //由輸入的屏幕坐標(biāo)計算顯示 RAM 的地址 addr = 0x00 + x。 //第一行字符地址從 0x00 起始 else addr = 0x40 + x。 //第二行字符地址從 0x40 起始 LcdWriteCmd(addr | 0x80)。 //設(shè)置 RAM 地址 } /* 在液晶上顯示字符串, (x,y)對應(yīng)屏幕上的起始坐標(biāo), str字符串指針 */ void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str) { LcdSetCursor(x, y)。 //設(shè)置起始地址 while (*str != 39。\039。) //連續(xù)寫入字符串?dāng)?shù)據(jù),直到檢測到結(jié)束符 { LcdWriteDat(*str++)。 }} /* 打開光標(biāo)的閃爍效果 */ void LcdOpenCursor() { LcdWriteCmd(0x0F)。} /* 關(guān)閉光標(biāo)顯示 */ void LcdCloseCursor() { LcdWriteCmd(0x0C)。} /* 初始化 1602 液晶 */ /* 初始化 1602 液晶 */ void InitLcd1602() { LcdWriteCmd(0x38)。 //16*2 顯示, 5*7 點(diǎn)陣, 8 位數(shù)據(jù)接口 LcdWriteCmd(0x0C)。 //顯示器開,光標(biāo)關(guān)閉 LcdWriteCmd(0x06)。 //文字不動,地址自動 +1 LcdWriteCmd(0x01)。 //清屏 } /* 區(qū)域清除,清除從 (x,y)坐標(biāo)起始的 len 個字符位 */ void LcdAreaClear(unsigned char x, unsigned char y, unsigned char len) { LcdSetCursor(x, y)。 //設(shè)置起始地址 while (len) //連續(xù)寫入空格 { LcdWriteDat(39。 39。)。 }} /* 整屏清除 */ void LcdFullClear() { LcdWriteCmd(0x01)。} 主函數(shù) include include include typedef unsigned char u8。 typedef unsigned int u16。 第 26 頁 typedef signed char s8。 typedef signed int s16。 typedef signed long s32。 // struct sTime { //日期時間結(jié)構(gòu)體定義 unsigned int year。 unsigned char mon。 unsigned char day。 unsigned char hour。 unsigned char min。 unsigned char sec。 unsigned char week。}。 bit flag200ms = 1。 //200ms 定時標(biāo)志 struct sTime bufTime。 //日期時間緩沖區(qū) u8 setIndex = 0。 //時間設(shè)置索引 // u8 step = 0。s16 temp=0 。u8 oprt = 0。u8 pointnum=1。u8 len1。u8 len 。 u8 ZeroFlag=0。 u8 SwitchFuction=0。u8 timext=1。long number=0。 float num1 = 0。float num2 = 0。float result = 0。u8 T0RH = 0。u8 T0RL = 0。 u8 str1[12]。u8 str[12]。 // u8 LongToString(u8 *str, s32 dat)。void ConfigTimer0(u16 ms)。void RefreshTimeShow()。 // extern void InitDS1302(void)。extern void GetRealTime(struct sTime *time)。 extern void SetRealTime(struct sTime *time)。extern void KeyScan(void)。 extern void KeyDriver(void)。extern void InitLcd1602()。 extern void LcdShowStr(u8 x, u8 y, u8 *str)。extern void LcdFullClear()。 extern void LcdAreaClear(u8 x, u8 y, u8 len)。extern void LcdWriteDat(unsigned char dat)。 extern void LcdSetCursor(unsigned char x, unsigned char y)。 extern void LcdOpenCursor(void)。extern void LcdCloseCursor(void)。extern u8 PointFlag。 void main() { u8 psec=0xAA。 //秒備份,初值 AA 確保首次讀取時間后會刷新顯示 EA = 1。 //開總中斷 ConfigTimer0(1)。 //配置 T0 定時 1ms InitDS1302()。 //初始化實時時鐘 InitLcd1602()。 //初始化液晶 //初始化屏幕上固定不變的內(nèi)容 while (1) { KeyDriver()。 //調(diào)用按鍵驅(qū)動 if(SwitchFuction==0amp。amp。timext==1) { LcdShowStr(3, 0, 20 )。 LcdShowStr(4, 1, : : )。 timext=0。 } if ( flag200ms amp。amp。 (setIndex == 0)amp。amp。SwitchFuction==0)// flag200ms amp。amp。 (setIndex == 0)amp。amp。SwitchFuction==0 { //每隔 200ms 且未處于設(shè)置狀 第 27 頁 態(tài)時, flag200ms = 0。 GetRealTime(amp。bufTime)。 //獲取當(dāng)前時間 if (psec != ) //檢測到時間有變化時刷新顯示 { RefreshTimeShow()。 psec = 。 //用當(dāng)前值更新上次秒數(shù) } } }} // void ShowOprt(u8 y, u8 type) { switch(type) { case 0: LcdShowStr(0, y, +)。 break。 case 1: LcdShowStr(0, y, )。 break。 case 2: LcdShowStr(0, y, *)。 break。 case 3: LcdShowStr(0, y, /)。 break。 default: break。 }} void Reset() { num1 = 0。 num2 = 0。 step = 0。 temp = 0。 pointnum=1。 LcdFullClear()。 str[0]=39。039。 str[1]=39。\039。 number=0。 } void NumKeyAction(u8 n) { static u8 i=0。 len = 0。 len1=0。 if(step 1) { Reset()。 } if(step == 0) { LcdAreaClear(1, 0, 14)。 if(PointFlag==0) { i=0。 ZeroFlag=0。 num1 = num1*10 + n。 number=num1。 len = LongToString(str, (s32)number)。 LcdShowStr(16len,1,str)。 } else if(PointFlag==1amp。amp。pointnum4) { if(n=0amp。amp。n=9) { if(i==0amp。amp。n==0) ZeroFlag=1。 num1=num1+(float)(n/(pow(10,(pointnum1))))。 temp=temp*10+n。 len1=LongToString(str1, (s32)temp) LcdShowStr(16len1, 1, str1)。 i++。 } len = LongToString(str, (s32)number) LcdShowStr(16lenpointnum,1,str)。 LcdShowStr(16pointnum,1,.)。 pointnum++。 if(ZeroFlag==1amp。amp。i==2) LcdShowStr(14,1,0)。 } } else { if(PointFlag==0) { i=0。 第 28 頁 ZeroFlag=0。 num2 = num2*10 + n。 number=num2。 len = LongToString(str, (s32)number)。 LcdShowStr(16len,1,str)。 } else if(PointFlag==1amp。amp。pointnum4) { if(n=0amp。amp。n=9) { if(i==0amp。amp。n==0) ZeroFlag=1。 num2=num2+(float)(n/(pow(10,(pointnum1))))。 temp=temp*10+n。 len1=LongToString(str1, (s32)temp)。 LcdShowStr(16len1, 1, str1)。 i++。 } len = LongToString(str, (s32)number) LcdShowStr(16lenpointnum,1,str)。 LcdShowStr(16pointnum,1,.)。 pointnum++。 if(ZeroFlag==1amp。amp。i==2) LcdShowStr(14,1,0)。 } } } void OprtKeyAction(u8 type) { if(step == 0) { LcdShowStr(16lenpointnum+1,0,str)。 LcdShowStr(16pointnum+1,0,.)。 LcdShowStr(16len1, 0, str1)。 ShowOprt(1, type)。 LcdAreaClear(1, 1, 14)。
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1