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

正文內(nèi)容

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

2024-11-10 02:44本頁(yè)面

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

  

【正文】 tCursor(unsigned char x, unsigned char y) { unsigned char addr。 if (y == 0) //由輸入的屏幕坐標(biāo)計(jì)算顯示 RAM 的地址 addr = 0x00 + x。 //第一行字符地址從 0x00 起始 else addr = 0x40 + x。 //第二行字符地址從 0x40 起始 LcdWriteCmd(addr | 0x80)。 //設(shè)置 RAM 地址 } /* 在液晶上顯示字符串, (x,y)對(duì)應(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ù)寫(xiě)入字符串?dāng)?shù)據(jù),直到檢測(cè)到結(jié)束符 { LcdWriteDat(*str++)。 }} /* 打開(kāi)光標(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)。 //顯示器開(kāi),光標(biāo)關(guān)閉 LcdWriteCmd(0x06)。 //文字不動(dòng),地址自動(dòng) +1 LcdWriteCmd(0x01)。 //清屏 } /* 區(qū)域清除,清除從 (x,y)坐標(biāo)起始的 len 個(gè)字符位 */ void LcdAreaClear(unsigned char x, unsigned char y, unsigned char len) { LcdSetCursor(x, y)。 //設(shè)置起始地址 while (len) //連續(xù)寫(xiě)入空格 { LcdWriteDat(39。 39。)。 }} /* 整屏清除 */ void LcdFullClear() { LcdWriteCmd(0x01)。} 主函數(shù) include include include typedef unsigned char u8。 typedef unsigned int u16。 第 26 頁(yè) typedef signed char s8。 typedef signed int s16。 typedef signed long s32。 // struct sTime { //日期時(shí)間結(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 定時(shí)標(biāo)志 struct sTime bufTime。 //日期時(shí)間緩沖區(qū) u8 setIndex = 0。 //時(shí)間設(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 確保首次讀取時(shí)間后會(huì)刷新顯示 EA = 1。 //開(kāi)總中斷 ConfigTimer0(1)。 //配置 T0 定時(shí) 1ms InitDS1302()。 //初始化實(shí)時(shí)時(shí)鐘 InitLcd1602()。 //初始化液晶 //初始化屏幕上固定不變的內(nèi)容 while (1) { KeyDriver()。 //調(diào)用按鍵驅(qū)動(dòng) 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 頁(yè) 態(tài)時(shí), flag200ms = 0。 GetRealTime(amp。bufTime)。 //獲取當(dāng)前時(shí)間 if (psec != ) //檢測(cè)到時(shí)間有變化時(shí)刷新顯示 { 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 頁(yè) 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è)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1