熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2018-9-17 09:05
正文摘要:請(qǐng)問(wèn)如何將天數(shù)的倒計(jì)時(shí)變成天數(shù)的正計(jì)時(shí) #include <REGX52.H> #include<intrins.h> //包含_nop_();定義的頭文件 #include<LS595driver.h> #include<LS595_2driver.h> #include ... |
devcang 發(fā)表于 2018-9-17 09:35 /*===============================================================*/ /* 第二組級(jí)聯(lián)74LS595_2數(shù)碼管驅(qū)動(dòng)程序 */ /*===============================================================*/ #ifndef _LS595_2driver_H_ #define _LS595_2driver_H_ sbit RCK_595_2 = P0^4; //第二組級(jí)聯(lián)595的并行輸出時(shí)鐘 sbit DS_595_2 = P0^3; //第二組級(jí)聯(lián)595數(shù)據(jù)線(xiàn) sbit CLK_595_2 = P0^5; //第二組級(jí)聯(lián)595移位輸入時(shí)鐘 unsigned char code countupseg[] = //第二組595中定義0~9,高亮低滅 {// 0 1 2 3 4 5 6 7 8 9 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F }; unsigned char code roundseg[6]={0x01,0x02,0x04,0x08,0x10,0x20}; //花式旋轉(zhuǎn) /*延時(shí)函數(shù) 1ms為單位*/ void Delay_ms(unsigned int t) //延時(shí)函數(shù),t/ms { unsigned int a,b; for(a=0;a<t;a++) { for(b=0;b<100;b++) { _nop_(); } } } /* 向1個(gè)LS595_2寫(xiě)入1個(gè)字節(jié)*/ void Send1byte_595_2(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { if(dat&0x80) DS_595_2 = 1; else DS_595_2 = 0; dat <<=1; CLK_595_2 = 0; _nop_(); CLK_595_2 = 1; } } /* 向3個(gè)級(jí)聯(lián)LS595_2寫(xiě)入3個(gè)字節(jié)*/ void Send3byte_595_2(unsigned char dat1,unsigned char dat2,unsigned char dat3) { Send1byte_595_2(dat1); Send1byte_595_2(dat2); Send1byte_595_2(dat3); } /*允許將LS595輸出并行數(shù)據(jù)*/ void Out_595_2() { RCK_595_2 = 0; _nop_(); RCK_595_2 = 1; } /*顯示倒計(jì)時(shí) 3位*/ void Displaycountupnum(unsigned int num) { unsigned int units,tens,hundreds; units = num%10; tens = (num/10)%10; hundreds = num/100; Send3byte_595_2(countupseg[hundreds],countupseg[tens],countupseg[units]); //顯示倒計(jì)時(shí)的個(gè)、十、百位 Out_595_2(); } /*大字花式轉(zhuǎn)圈*/ void Displayround() { unsigned char j; for(j=0;j<5;j++) { Send3byte_595_2(roundseg[j],roundseg[j],roundseg[j]); Out_595_2(); Delay_ms(800); } } #endif |
a庚 發(fā)表于 2018-9-17 17:56 void Displaycountupnum(unsigned int num) { unsigned int units,tens,hundreds; units = num%10; tens = (num/10)%10; hundreds = num/100; Send3byte_595_2(countupseg[hundreds],countupseg[tens],countupseg[units]); //顯示倒計(jì)時(shí)的個(gè)、十、百位 Out_595_2(); } |
HC6800-ES-V2.0 發(fā)表于 2018-9-18 08:16 /*===============================================================*/ /* DS1302驅(qū)動(dòng)程序 */ /*===============================================================*/ #ifndef _ds1302driver_H_ #define _ds1302driver_H_ //#include<LS595driver.h> sbit RST_1302 = P2^2; //1302的RST sbit IO_1302 = P2^1; //1302的IO sbit SCLK_1302 = P2^0; //1302的SCLK sbit ACC0 = ACC^0; //定義單片機(jī)累加器寄存器ACC sbit ACC7 = ACC^7; //定義單片機(jī)累加器寄存器ACC /* 宏定義DS1302的寫(xiě)入寄存器 */ #define WDS1302_SECOND 0X80 #define WDS1302_MINUTE 0X82 #define WDS1302_HOUR 0X84 #define WDS1302_WEEK 0X8A #define WDS1302_DAY 0X86 #define WDS1302_MONTH 0X88 #define WDS1302_YEAR 0X8C #define WDS1302_BATTERY 0X90 /* 宏定義DS1302的讀取寄存器 */ #define RDS1302_SECOND 0X81 #define RDS1302_MINUTE 0X83 #define RDS1302_HOUR 0X85 #define RDS1302_WEEK 0X8B #define RDS1302_DAY 0X87 #define RDS1302_MONTH 0X89 #define RDS1302_YEAR 0X8D #define RDS1302_BATTERY 0X91 /*向DS1302寫(xiě)入一個(gè)字節(jié)*/ void Send1byte_1302(unsigned char dat) { unsigned char i; ACC = dat; //將dat放入累加器ACC內(nèi) for(i=8;i>0;i--) { IO_1302 = ACC0; //將ACC的最低位賦值給IO管腳 SCLK_1302 = 1; SCLK_1302 = 0; ACC = ACC>>1; } } /*從DS1302讀取一個(gè)字節(jié)*/ unsigned char Get1byte_1302() { unsigned char i; for(i=8;i>0;i--) { ACC = ACC>>1; //挪空最高位 ACC7 = IO_1302; //將IO管腳賦值給ACC的最高位 SCLK_1302 = 1; SCLK_1302 = 0; } return(ACC); } /*向DS1302指定地址寫(xiě)入數(shù)據(jù) add--1302的地址,dat--寫(xiě)入的數(shù)據(jù)*/ void Write_1302(unsigned char add,unsigned char dat) { RST_1302 = 0; SCLK_1302 = 0; RST_1302 = 1; Send1byte_1302(add); Send1byte_1302(dat); SCLK_1302 = 1; RST_1302 = 0; } /*從DS1302指定地址讀取數(shù)據(jù) add--1302的地址*/ unsigned char Read_1302(unsigned char add) { unsigned char temp; RST_1302 = 0; SCLK_1302 = 0; RST_1302 = 1; Send1byte_1302(add|0x01); temp = Get1byte_1302(); SCLK_1302 = 1; RST_1302 = 0; return(temp); } /*設(shè)置寫(xiě)保護(hù) flag=1~禁止寫(xiě) flag=0~允許寫(xiě)*/ void Protect_1302(unsigned char flag) { if(flag) Write_1302(0x8e,0x80); else Write_1302(0x8e,0x00); } /*初始化DS1302 的日期*/ void Init_1302()// { RST_1302 = 0; SCLK_1302 = 0; Protect_1302(0); //允許寫(xiě)操作 Write_1302(WDS1302_SECOND,0x00); //向DS1302秒寄存器80H寫(xiě)入秒初始00 Write_1302(WDS1302_MINUTE,0x00); //向DS1302分寄存器82H寫(xiě)入分初始00 Write_1302(WDS1302_HOUR,0x12); //向DS1302時(shí)寄存器84H寫(xiě)入時(shí)初始12 Write_1302(WDS1302_WEEK,0x03); //向DS1302周寄存器8aH寫(xiě)入周初始03 Write_1302(WDS1302_DAY,0x01); //向DS1302日寄存器86H寫(xiě)入日初始1 Write_1302(WDS1302_MONTH,0x08); //向DS1302月寄存器88H寫(xiě)入月初始8 Write_1302(WDS1302_YEAR,0x18); //向DS1302年寄存器8cH寫(xiě)入年初始18 Protect_1302(1); //禁止寫(xiě)操作 } /*設(shè)置單個(gè)寄存器日期時(shí)間*/ void Set_time_1302(unsigned char add,unsigned char time) { unsigned char timeBCD; timeBCD = (time/10)<<4 | (time%10); //將十進(jìn)制轉(zhuǎn)為二進(jìn)制才能寫(xiě)入 Write_1302(0x8e,0x00); //允許寫(xiě)入 Write_1302(add,timeBCD); Write_1302(0x8e,0x80); //啟動(dòng)保護(hù) 禁止寫(xiě) } /*獲取DS1302內(nèi)的時(shí)間日期*/ void Gettime_1302(SYSTEMTIME *time) { unsigned char gettempe; gettempe = Read_1302(RDS1302_SECOND); //獲取秒寄存器 time->second = ((gettempe&0x70)>>4)*10 + (gettempe&0x0F); //完成秒賦值 二進(jìn)制轉(zhuǎn)十進(jìn)制 gettempe = Read_1302(RDS1302_MINUTE); //獲取分寄存器 time->minute = ((gettempe&0x70)>>4)*10 + (gettempe&0x0F); //完成分賦值 二進(jìn)制轉(zhuǎn)十進(jìn)制 gettempe = Read_1302(RDS1302_HOUR); //獲取時(shí)寄存器 time->hour = ((gettempe&0x70)>>4)*10 + (gettempe&0x0F); //完成時(shí)賦值 二進(jìn)制轉(zhuǎn)十進(jìn)制 gettempe = Read_1302(RDS1302_WEEK); //獲取周寄存器 time->week= ((gettempe&0x70)>>4)*10 + (gettempe&0x0F); //完成周賦值 二進(jìn)制轉(zhuǎn)十進(jìn)制 gettempe = Read_1302(RDS1302_DAY); //獲取日寄存器 time->day = ((gettempe&0x70)>>4)*10 + (gettempe&0x0F); //完成日賦值 二進(jìn)制轉(zhuǎn)十進(jìn)制 gettempe = Read_1302(RDS1302_MONTH); //獲取月寄存器 time->month = ((gettempe&0x70)>>4)*10 + (gettempe&0x0F); //完成月賦值 二進(jìn)制轉(zhuǎn)十進(jìn)制 gettempe = Read_1302(RDS1302_YEAR); //獲取年寄存器 time->year = ((gettempe&0x70)>>4)*10 + (gettempe&0x0F); //完成年賦值 二進(jìn)制轉(zhuǎn)十進(jìn)制 } #endif 請(qǐng)問(wèn)這個(gè)程序能達(dá)到我想要的效果嗎 |
cico 發(fā)表于 2018-9-17 14:36 就是數(shù)碼管000-999的的正計(jì)時(shí),一天加一。 |
a庚 發(fā)表于 2018-9-17 17:56 /*===============================================================*/ /* 第二組級(jí)聯(lián)74LS595_2數(shù)碼管驅(qū)動(dòng)程序 */ /*===============================================================*/ #ifndef _LS595_2driver_H_ #define _LS595_2driver_H_ sbit RCK_595_2 = P0^4; //第二組級(jí)聯(lián)595的并行輸出時(shí)鐘 sbit DS_595_2 = P0^3; //第二組級(jí)聯(lián)595數(shù)據(jù)線(xiàn) sbit CLK_595_2 = P0^5; //第二組級(jí)聯(lián)595移位輸入時(shí)鐘 unsigned char code countupseg[] = //第二組595中定義0~9,高亮低滅 {// 0 1 2 3 4 5 6 7 8 9 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F }; unsigned char code roundseg[6]={0x01,0x02,0x04,0x08,0x10,0x20}; //花式旋轉(zhuǎn) /*延時(shí)函數(shù) 1ms為單位*/ void Delay_ms(unsigned int t) //延時(shí)函數(shù),t/ms { unsigned int a,b; for(a=0;a<t;a++) { for(b=0;b<100;b++) { _nop_(); } } } /* 向1個(gè)LS595_2寫(xiě)入1個(gè)字節(jié)*/ void Send1byte_595_2(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { if(dat&0x80) DS_595_2 = 1; else DS_595_2 = 0; dat <<=1; CLK_595_2 = 0; _nop_(); CLK_595_2 = 1; } } /* 向3個(gè)級(jí)聯(lián)LS595_2寫(xiě)入3個(gè)字節(jié)*/ void Send3byte_595_2(unsigned char dat1,unsigned char dat2,unsigned char dat3) { Send1byte_595_2(dat1); Send1byte_595_2(dat2); Send1byte_595_2(dat3); } /*允許將LS595輸出并行數(shù)據(jù)*/ void Out_595_2() { RCK_595_2 = 0; _nop_(); RCK_595_2 = 1; } /*顯示倒計(jì)時(shí) 3位*/ void Displaycountupnum(unsigned int num) { unsigned int units,tens,hundreds; units = num%10; tens = (num/10)%10; hundreds = num/100; Send3byte_595_2(countupseg[hundreds],countupseg[tens],countupseg[units]); //顯示倒計(jì)時(shí)的個(gè)、十、百位 Out_595_2(); } /*大字花式轉(zhuǎn)圈*/ void Displayround() { unsigned char j; for(j=0;j<5;j++) { Send3byte_595_2(roundseg[j],roundseg[j],roundseg[j]); Out_595_2(); Delay_ms(800); } } #endif |
參與人數(shù) 1 | 黑幣 +40 | 收起 理由 |
---|---|---|
![]() | + 40 | 回帖助人的獎(jiǎng)勵(lì)! |
正計(jì)時(shí),根本不需要你這個(gè)倒計(jì)時(shí)程序嘛,只要正確讀出1302的數(shù)據(jù),就可以了,因?yàn)?302本身就是正計(jì)時(shí)啊。 |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
Displaycountupnum(),這個(gè)函數(shù)貼出來(lái) |
請(qǐng)問(wèn)能詳細(xì)說(shuō)一下怎么改嗎,非常感謝 |
你是想做成日期一樣嗎? |
devcang 發(fā)表于 2018-9-17 09:35 請(qǐng)問(wèn)能詳細(xì)說(shuō)一下怎么改嗎,非常感謝 |
這個(gè)Displaycountupnum函數(shù)在哪呢 其實(shí),是把要顯示的變量,換成 unsigned int countupday; //記錄正計(jì)時(shí)天數(shù)的參數(shù) 這個(gè)變量 ~~~~~~~~~~ |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
Powered by 單片機(jī)教程網(wǎng)