|
- /*
- 紅色:FC10,F800,8208,8000,4000,
- 黃色:FFF0,FFE0,8400,8408,
- 綠色:87F0,87E0,07E0,0400,0200,0408,07F0,07E8,
- 藍(lán)色:001F,0010,0008,0014,0210,0418,041F,841F,0210,
- 青色:07FF,87FF,
- 灰色:C618,8410,
- 西瓜紅,粉色:F810,F81F,FC1F,FC18,8008,8010,4008,
- 紫藍(lán):801F,4010,0410,0208,4410,8418,
- 橙黃:FC08,FC00,8200,
- 黑色:0000
- 白色:FFFF
- 護(hù)眼:CF59 */
- // ------------********************************************************************/
- #include "STC15W4K32S4.H " //
- #include " usartPING8cui.H " // 屏
- //#include " usartBPKT.H " // 空調(diào)
- //#include " DIANBIAO.H " // 電表
- #include " initalize.H " // 初始化 串口定時(shí)器,定時(shí)中斷程序
- #include " scankey.H " // 鍵掃描程序,處理,初始化時(shí)的按鍵設(shè)置,文字顏色,亮度
- #include " setRTCkey.H " // 鍵掃描程序,處理,時(shí)間等設(shè)置
- #include " RTC_DS3231.H " // DS3231時(shí)鐘芯片子程序20160917
- #include " READ_DHT11.H " // 溫度、濕度傳感器 DHT11 子程序
- #include " DISPshijian.H " // 顯示參數(shù),,時(shí)間
- #include " Font_GB2312_code.H " // 漢字字庫(kù)成語(yǔ)
- #include " stcEEPROM.H " // STC單片機(jī) EEPROM 存儲(chǔ)器
- #include " wannianli.H " // 萬(wàn)年歷計(jì)算,農(nóng)歷,節(jié)日,節(jié)氣
- #include " JIEQI24.H " // 萬(wàn)年歷計(jì)算,農(nóng)歷,節(jié)日,節(jié)氣
- //#include <STC15F2K60S2.H>
- void DISP_MUORENset( void ); //顯示屏 初始化 亮度,顏色,表格,標(biāo)題,數(shù)字顏色,背景色,前景色
- void init_DUANKOU ( void ) ; //IO端口初始化
- void init_UART_TIME( void ) ; //初始化 串口和定時(shí)器
- //====================================================================================
- //*********************************************************************************
- //******************************************************************************
- /*
- //========== 定時(shí)器中斷服務(wù)函數(shù) ===============================================
- //=============================================================================
- // 定時(shí)器0:interrupt 1 ,
- // 定時(shí)器1:interrupt 3 ,
- // 定時(shí)器2:interrupt 12 , 串口2和串口3共用波特率
- // 定時(shí)器3:interrupt 19 , 運(yùn)行時(shí)間,//34482微秒@22.1184MHz 34.482*29=1秒
- // 定時(shí)器4:interrupt 20 串口4,空調(diào)600BPS用
- //-----------------------------------------------------------------------------
- void Time1_int(void) interrupt 3 // 定時(shí)器1 掃描
- {
- ;
- }
- /*
- if(TMcon==29) {TMcon =0 ; TMsec++ ; } //調(diào)試用指示燈
- if(TMsec==60) {TMsec =0 ; TMmin++ ; if(DBconsumption_b==1) TMmin_SUM++ ; if(TMmin_SUM==60) TMmin_SUM=0; } //有用電時(shí),時(shí)間累加,定時(shí)器不停
- if(TMmin==60) {TMmin =0 ; TMhou++ ; if(DBconsumption_b==1) TMhou_SUM++ ; }
- if(TMhou==24) {TMhou =0 ; */
- //========== 串行口1中斷服務(wù)函數(shù) ===============================================
- //=============================================================================
- // 串口1:interrupt 4 , ISP
- // 串口2:interrupt 8 , 定時(shí)器2 顯示屏 4800bps
- // 串口3:interrupt 17 ,定時(shí)器2 電表 4800bps
- // 串口4:interrupt 18 定時(shí)器4 空調(diào) 600bps
- //-----------------------------------------------------------------------------
- //***********************************************************************************************************
- //========================= 屏初始化參數(shù),表格,顏色,亮度 =============================================
- void DISP_MUORENset(void)
- {
-
- Dis_Clear(); //顯示屏 清屏
- // Dis_SMS ( 0xF800, 0x049B ); //顯示屏 紅色顯示 ,顯示說(shuō)明書(shū),顏色,黃色 ,顯示背景圖片
- // Brightness( liangdu_key() ); // 上電檢測(cè)亮度設(shè)定值,上電有效
-
- // yanse_key(); // 顏色選擇,通過(guò)鍵控
- Dis_Clear(); //顯示屏 清屏
-
- Set_ColorPallet( front_color , back_color ); //屏的前景色,背景色設(shè)置
-
- Dis_Clear(); //顯示屏 清屏 ,設(shè)置完顏色后,必須清屏才顯示
- // DISP_KCBbiaoge(); // 課程表表格直線
- // DISP_JRKC(0x07FF , back_color); //顯示"今日課程" 文字,和課程序號(hào)12345,綠色07E0, 07FF青色
- //-------------------------------
- // DISP_biaoti ( front_color , back_color ) ; //顯示行標(biāo)題 front_color ; back_color ; Digital_color ;
- /// DISP_daiweifuhao( front_color , back_color ) ; //顯示單位符號(hào)
- // DISP_biaogeZHIXIAN(); //課程表 繪制表格,直線
- }
- //***********************************************************************************************************
- //========================= 端口 初始化, =============================================
- void init_DUANKOU ( void )
- {
- P0M1 = 0x00 ;
- P0M0 = 0x00 ; //
- P1M1 = 0x00 ;
- P1M0 = 0x00 ; // 輸出
- P2M1 = 0x00 ;
- P2M0 = 0x00 ; // 輸出
- P3M1 = 0x00 ;
- P3M0 = 0x00 ; // 輸出
- // P3M1 = 0x01;
- // P3M0 = 0x00; // 僅為輸入 0 ,0 標(biāo)準(zhǔn)雙向口,0,1推勉輸出,1,0僅輸入,1,1高阻
- }
- //***********************************************************************************************************
- //========================= 初始化 串口和定時(shí)器 ===========================串口3占用了20150923 定時(shí)器3==================
- void init_UART_TIME( void ) //初始化 串口和定時(shí)器
- {
- // UART1_Init(); //Baud=4800
-
- UART2_Init(); //Baud=115200,用于同屏幕通信,占用定時(shí)器2
-
- Timer0Init(); // 5ms 定時(shí)器0初始化 運(yùn)行時(shí)間,并 開(kāi)始計(jì)數(shù)
- Timer1Init(); // 10ms 定時(shí)器1初始化 運(yùn)行時(shí)間 ,并 開(kāi)始計(jì)數(shù)
- Timer3Init() ; // 35ms 定時(shí)器 T3初始化 并 開(kāi)始計(jì)數(shù)
- Timer4Init() ; // 500us 定時(shí)器 T3初始化 并 開(kāi)始計(jì)數(shù)
-
- INT_INTERRUPT_Init(); // 其它中斷初始化,外中斷
- // IP2 = 0x00 ; //中斷優(yōu)先控制位
- // IP = 0x00 ; //中斷優(yōu)先控制位
- // IE2 |= 0x08; //充許串口3中斷,電表用
- // IE2 |= 0x10; //充許串口4中斷,空調(diào)用
- }
- //**********************************************************************************
- //**********************************************************************************
- void main()
- {
- unsigned char ala , xq ; //
-
- unsigned char kb=0 , jq=0; //
- unsigned char tu=0 ; //, zym
-
- unsigned char LDtjD_ws=2, LDtempB=7 ; //夜晚亮度調(diào)整用,臨時(shí)數(shù),晚上22-早6點(diǎn) 亮度15
-
- unsigned char IDcy = 0 ; // 成語(yǔ) ID,循環(huán)顯示1-52個(gè)成語(yǔ)
-
- unsigned char xqtemp=0; // 星期臨時(shí)值,臨時(shí)值-星期,變化不等于0時(shí),說(shuō)明 第二天了
- init_DUANKOU(); // IO端口 初始化
- init_UART_TIME( ); // 初始化 串口和定時(shí)器
- Delay_Ms(1000); // 延時(shí)1s,等待屏幕初始化完成,此時(shí)顯示logo(圖片0)
- //--------------------
- // 屏的顏色: 紅色F800,淡藍(lán)色001F,黃色FFE0,綠色07E0,白色FFFF,黑色0000,青色07FF,深黃色8400,深藍(lán)色0008,
- //----------------------------
- DISP_MUORENset(); //顯示屏初始化 亮度,顏色,表格畫(huà)直線,數(shù)字顏色,背景色,前景色,
-
- //Set_ColorPallet(0xF800, 0x049B) ; //,背景色,前景色
-
- //Delay_Ms(5000); Delay_Ms(5000); Delay_Ms(5000); Delay_Ms(5000);
-
- //-------------------------------
- comm_DS3231init(); // DS3231
-
- //---讀出鬧鐘值----放在RAM---------
- ALtime[0]=(ZH_Data(0,Readbyte(0x09))); // AL1時(shí) BCD to HEX;
- ALtime[1]=(ZH_Data(0,Readbyte(0x08))); // AL1分
- ALtime[2]=(ZH_Data(0,Readbyte(0x0c))); // AL2時(shí)
- ALtime[3]=(ZH_Data(0,Readbyte(0x0b))); // AL2分
- //--讀出鬧鐘開(kāi)關(guān)狀態(tài)---
- ala = Readbyte(0x0E); // 鬧鐘控制寄存器
- if((ala&0x01)==1){AL1_B=1;} // &按位與
- else AL1_B=0;
- if((ala&0x02)==2){AL2_B=1;}
- else AL2_B=0;
- wri_addrm(0x0F,0); //鬧鐘 響 清鬧鐘寄存器=0,上電清2個(gè)鬧鐘
-
- wri_addrm(0x10, 0x02) ; // 10H老化補(bǔ)償位,并進(jìn)2個(gè)電容
-
- /* //-----------調(diào)試用,調(diào)試后關(guān)閉-------------
-
- if( set_timeq == 0 ) //如果上電時(shí),按下=初始化
- { initialize_DS3231() ; // 初始化 時(shí)鐘3231
- init_alrm() ; // 初始化鬧鐘 // 初始化 鬧鐘 3231 enable alarm
- } */
- //-------------------------------------
-
- beep1s(100); // 上電響一聲
-
- EA = 1;
-
-
- //-------------------------------------------------------------------------------------
- //=================================================================-
- while(1)
- { //----- 現(xiàn)在主程序的循環(huán)周期為 12.7ms----12.7ms執(zhí)行一圈-------
- /* Dis_Pic(tu); //顯示圖片
- tu++;
- if(tu>94) tu= 0 ;
-
- Delay_Ms(5000); //延時(shí)1s,等待屏幕初始化完成,此時(shí)顯示logo(圖片0)
-
- Dis_Clear(); //顯示屏 清屏 ,設(shè)置完顏色后,必須清屏才顯示
-
- DISP_biaogeZHIXIAN(); //繪畫(huà)直線,表格
- */
-
- /* // ,背景1-前景2-時(shí)鐘字色3-日期色4-文字色5-溫度6-鬧鐘色7
- front_color ; back_color ; RTC3_color ; date4_color; word5_color ; temp6_color ; alar7_color ;
-
-
- //===============================================================================
- // datZY(dsmp[8]); // 字節(jié) 高低位 順序 76543210,變成01234567端口順序改變用
- */
-
- if((TiSetD_end_b==1)||(AlSetD_end_b==1)) { AlSetD_end_b=0;TiSetD_end_b=0; Dis_Clear(); Delay_Ms(500); } // 時(shí)間設(shè)置完標(biāo)志位,顯示時(shí)清0,清屏
- //----------------文字及背景顏色設(shè)置----------
- if(YStj_b==1)
- { SETyanse(); Set_ColorPallet( front_color , back_color ); YStj_b = 0 ; Dis_Clear(); Delay_Ms(500); } // 設(shè)置背景色后必須清屏延時(shí)
-
- //----------------屏幕亮度設(shè)置---------------
- if(LDtj_b==1) { Brightness( LDtjD ); LDtj_b = 0 ; }
- //------ -屏幕亮度 晚上10點(diǎn) 到早上5點(diǎn) 最低,其它時(shí)間,默認(rèn)值- --------
- if( (date_time[2]>0x05)&&(date_time[2]<0x22) ) { if(LDtempB==7) { Brightness( LDtjD ); LDtempB=3;} } // 早6到晚10點(diǎn) 正常亮度
- else { if(LDtempB==3) { LDtempB=7; Brightness( LDtjD_ws ); } }
-
- //----------------設(shè)置時(shí)間、鬧鐘--------
- if(effeKEY_b==1) { effeKEY_b=0 ; setRTCkeyCL(); SetDTtreg(); } // 有效鍵后,掃描按鍵,并處理,設(shè)置時(shí)間、鬧鐘、亮度、初始化、顏色, 設(shè)置 時(shí)間、鬧鐘
-
-
-
-
-
- //------------------ 顯示課程表位=1 -------------
- if( dispKCB_b ==0 ) // , DISP_kechengbiaoALL( 0xF800, 0x0000 ) ;
- {
- if( kb==5) { kb = 0 ; Dis_Clear(); Delay_Ms(500); } //顯示屏 清屏,清屏后必須延時(shí)
-
-
- //=-=-=-=-=-=-=-=-=-=-==========--------------------------
-
- DISP_KCBbiaoge(); // 課程表表格直線
- DISP_JRKC( word5_color, back_color ); // 顯示"今日課程" 文字,和課程序號(hào)12345,綠色07E0, 07FF青色
-
- //-----------------顯示 時(shí)間--
- read_dati(); //讀RTC 3231 ,date_time[0],秒分時(shí).星期.日月年,溫度
- DISP_CL_BCDto(); //處理時(shí)鐘 3231 BCD 顯示用,時(shí)間,溫度 轉(zhuǎn)化成顯示用
-
- DISP_RTCshijian( RTC3_color , back_color ) ; // back_color顯示實(shí)時(shí)時(shí)間,(0xF800, 0x049B),白色0xFFFF
- DISP_RTCriqi ( date4_color , back_color ) ; // 顯示日期,年月日星期
- DISP_RTCxingqi ( date4_color , back_color, 0x0212 , 0x000E ) ; // 顯示星期 幾
- DISP_RTCxingqi ( date4_color , back_color, 0x001E , 0x013A ) ; // 顯示星期 幾 30 ,314,顯示2個(gè)地點(diǎn),2個(gè)坐標(biāo)
-
- //-----------------顯示 課程--
- if( date_time[2] > 18 ) { xq = dsmp[8] + 1; if( xq>7 ){ xq=1; } } // 如果時(shí)間大于12點(diǎn) 顯示明日 課程表
- else { xq = dsmp[8]; }
-
- //----------星期六和星期日,今天明天課程 里顯示:放假休息嘍-----------------
-
-
- //-----------------顯示 課程表--
- DISP_kechengbiaoXUAN( word5_color , back_color , xq ) ; // 前景色FFE0黃色,背景色,星期幾就顯示星期幾的課程內(nèi)容
-
- //-----------------顯示 鬧鐘時(shí)間----
- DISP_RTCalarm ( alar7_color , back_color , 0x01F4 , 0x0061 ) ; // 500,97顯示 鬧鐘時(shí)間
- DISP_RTCalarmONOFF ( alar7_color , back_color , 0x0244 , 0x0061 ) ; // 580,97顯示 鬧鐘狀態(tài),開(kāi)關(guān)
-
- //-----------------顯示 溫濕度------
- if(sec5s_b==1){ DHTreceive( ) ; // DHTcon++; if(DHTcon==10) DHTcon=0; // 接收 濕度傳感器DHT11數(shù)據(jù),2分鐘讀一次濕度
- sec5s_b= 0; sec = 0 ;
-
- //// IDcy+=4 ; if(IDcy==52) IDcy=0; // 顯示成語(yǔ)
-
- // jq++ ; if(jq>12) jq=1 ;
-
- xqtemp = dsmp[8] ; // 賦值 星期
-
- wri_addrm(0x10, 0x02) ; // 10H老化補(bǔ)償位,并進(jìn)2個(gè)電容
-
- lhbc1_D=(ZH_Data(0,Readbyte(0x10))); // 讀出老化補(bǔ)償電容值,AL1時(shí) BCD to HEX;
-
-
- //zym++; if(zym>11) zym=1; // 調(diào)試用
- } // 顯示 濕度/溫度 front_color 藍(lán)色0x1F00
-
- DISP_DHT11 ( temp6_color , back_color , 0x01F4 , 0x0091 ) ; // 500 ,145
-
- //-----------------顯示 期望--------
- DISP_QIWANG1( alar7_color , back_color ) ; // 顯示 期望的,祝福的話(huà)1, 4個(gè)字加一個(gè)標(biāo)點(diǎn)符號(hào), ,50,464
-
- //----------------- 顯示 每日 成語(yǔ) ----------
- DISP_ChengYu( RTC3_color , back_color , 0x0030, 0x0216, HZchengyu[IDcy] , 20 ) ; // 48,534,顯示成語(yǔ)(顏色,坐標(biāo),字庫(kù)開(kāi)始地址,長(zhǎng)度,10個(gè)為一個(gè)成語(yǔ)加逗號(hào),)
-
- //----------------- 顯示座右銘 ----------
- DISP_ZuoYouMing( date4_color , back_color , dsmp[8]+2 ) ; // 顯示 期望的,祝福的話(huà) 共9個(gè)字 ,,300 ,464
-
- //----------------- 顯示 提醒----------
- DISP_tixing ( word5_color, back_color ,0x01F4 , 0x00BE ); // 500,190 顯示 環(huán)境溫度濕度 提醒
-
- //----------------設(shè)置時(shí),提醒設(shè)置內(nèi)容---------
- DISP_SETword( RTC3_color , back_color ) ; // 設(shè)置時(shí),提醒設(shè)置內(nèi)容
- //----------------------------------
- DISP_LdYs_tishi( temp6_color , back_color , 0x02BC, 0x000E ); // 顏色 和 亮度 提示, (顯示的顏色,坐標(biāo))back_color+0x0840 , back_color ,
-
- DISP_TIAOSHI ( front_color , back_color ) ; // 調(diào)試數(shù)據(jù),, 48,566
-
-
-
- //---------------- 計(jì)算農(nóng)歷 年月日 ---------
- Conversion( 0, date_time[6], date_time[5], date_time[4] ) ; // 11月07日 計(jì)算 農(nóng)歷日期,由陽(yáng)歷年月日到農(nóng)歷年月日
-
- DISP_NongLi ( alar7_color , back_color , 0x0040 , 0x00CD ) ; // 64,205.顯示農(nóng)歷 年月日
-
- DISP_nongliHolidays( date4_color , back_color , 0x0040 , 0x0107 ) ; // 70,263 .顯示 節(jié)日
- DISP_gongliHolidays( word5_color , back_color , 0x0104 , 0x0107 ) ; // 260,263 .顯示 節(jié)日
-
- js_JIEQI(date_time[6], date_time[5] , date_time[4] ) ; // 節(jié)氣計(jì)算返回 日期,年月日計(jì)算 24節(jié)氣
-
- DISP_24jieqi( temp6_color , back_color , 0x0180 , 0x00D7 ) ; // 384,215 顯示24節(jié)氣
- //-----------------鬧鐘聲音輸出----周六周日不響---------------
-
- if(AlaSkB==1) // 外中斷置位
- { if((date_time[3]==0x06)||(date_time[3]==0x07)) { SOTalaspk(); }
- else alaspk(); } // 周末不鬧 如果鬧鐘到有中斷了,就聲音 鬧鐘輸出
-
-
- //------------------------------------------------------------------------------
- //// if(gb==0) { gb=8; DISP_guangbiao(0x0078,0x010B,0x1F,0x05,0x01); } // 打開(kāi)光標(biāo)顯示,坐標(biāo)/長(zhǎng)/高/開(kāi)關(guān)
- //// if(gb==8) { ; } // 打開(kāi)光標(biāo)顯示
-
-
-
- if( xqtemp!=dsmp[8] ){ IDcy++ ; if( IDcy>52 ) { IDcy = 0; } } // 星期變化時(shí),說(shuō)明是第二天了, 顯示 每日 成語(yǔ)
-
- //// xqtemp = dsmp[8] ; // 賦值 星期
- // Delay_Ms(500);
-
-
- } // -----K5=0 END-------------
-
-
- else // dispKCB_b = 1
- {
- if(kb==0)
- { switch(dispKCB_D) // 0000 0000 02BC 01BD 0019 0019
- {case 1:
- {
- Dis_PICshear( 0x09, 0x0000, 0x0000, 0x02BC, 0x01BD, 0x0019, 0x0019 ); // 剪切顯示圖片 課程表
- break; }
-
- case 2:
- {
- Dis_PICshear( 0x17, 0x0000, 0x0000, 0x02BC, 0x01BD, 0x0025, 0x0025 ); // 剪切顯示圖片 課程表
- break; }
-
- case 3:
- {
-
- Dis_Pic(85); // 顯示圖片 課程表
- break; }
-
- case 4:
- {
- Dis_Pic(tu); // 顯示圖片 課程表
- if(sec10s_b==1){ sec10s_b=0; tu++; if(tu>84){ tu=0;} } // Dis_Clear(); // 顯示屏 清屏
-
- break; }
-
- case 5:
- {
- kb = 5 ;
- dispKCB_b = 0 ; // =1顯示課程表,清0,退出,顯示時(shí)間
- break; }
-
- break;
-
- } // ----switch END -------
- } //------if(kb=0) END ---------
- } //---- slse END ---------
-
-
- //==-------------------------------
- } //----------- while end-
-
- }
復(fù)制代碼 |
|