找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2826|回复: 7
打印 上一主题 下一主题
收起左侧

彩色液晶屏显示万年历温湿度

[复制链接]
跳转到指定楼层
楼主
彩屏,时间,闹钟等,背景颜色可换,可显示照片,先来2张照片。

51hei图片_20190902202950.jpg (136.25 KB, 下载次数: 58)

51hei图片_20190902202950.jpg

51hei图片_20190902202957.jpg (137.78 KB, 下载次数: 61)

51hei图片_20190902202957.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:83626 发表于 2019-9-3 21:17 | 只看该作者
/*
红色:FC10,F800,8208,8000,4000,
黄色:FFF0,FFE0,8400,8408,
绿色:87F0,87E0,07E0,0400,0200,0408,07F0,07E8,
蓝色:001F,0010,0008,0014,0210,0418,041F,841F,0210,
青色:07FF,87FF,
灰色:C618,8410,
西瓜红,粉色:F810,F81F,FC1F,FC18,8008,8010,4008,
紫蓝:801F,4010,0410,0208,4410,8418,
橙黄:FC08,FC00,8200,
黑色:0000
白色:FFFF
护眼:CF59               */
//    ------------********************************************************************/

#include "STC15W4K32S4.H "                //
#include " usartPING8cui.H "        // 屏
        //#include " usartBPKT.H "                        // 空调
        //#include " DIANBIAO.H "                                // 电表
#include " initalize.H "                        // 初始化 串口定时器,定时中断程序
#include " scankey.H "                          // 键扫描程序,处理,初始化时的按键设置,文字颜色,亮度
#include " setRTCkey.H "                          // 键扫描程序,处理,时间等设置


#include " RTC_DS3231.H  "                // DS3231时钟芯片子程序20160917

#include " READ_DHT11.H  "                //  温度、湿度传感器 DHT11 子程序

#include " DISPshijian.H "        // 显示参数,,时间

#include " Font_GB2312_code.H "        // 汉字字库成语

#include " stcEEPROM.H        "                                // STC单片机 EEPROM 存储器

#include " wannianli.H        "                                // 万年历计算,农历,节日,节气

#include " JIEQI24.H        "                                // 万年历计算,农历,节日,节气

//#include <STC15F2K60S2.H>

void DISP_MUORENset( void );           //显示屏 初始化 亮度,颜色,表格,标题,数字颜色,背景色,前景色
void init_DUANKOU ( void ) ;                //IO端口初始化
void init_UART_TIME( void )        ;                //初始化 串口和定时器

//====================================================================================
//*********************************************************************************


//******************************************************************************

/*
//========== 定时器中断服务函数 ===============================================
//=============================================================================
//  定时器0:interrupt 1 ,       
//  定时器1:interrupt 3 ,       
//  定时器2:interrupt 12 ,   串口2和串口3共用波特率
//  定时器3:interrupt 19 ,   运行时间,//34482微秒@22.1184MHz         34.482*29=1秒
//  定时器4:interrupt 20             串口4,空调600BPS用
//-----------------------------------------------------------------------------
void Time1_int(void) interrupt 3                 // 定时器1 扫描
{
;
}
/*
        if(TMcon==29) {TMcon =0 ;        TMsec++ ;                                         }                                                         //调试用指示灯
        if(TMsec==60) {TMsec =0 ;        TMmin++ ;        if(DBconsumption_b==1)        TMmin_SUM++ ;        if(TMmin_SUM==60)        TMmin_SUM=0;        }        //有用电时,时间累加,定时器不停
        if(TMmin==60) {TMmin =0 ;        TMhou++ ;        if(DBconsumption_b==1)        TMhou_SUM++ ;        }
        if(TMhou==24) {TMhou =0 ;                        */


//========== 串行口1中断服务函数 ===============================================
//=============================================================================
//  串口1:interrupt 4 ,        ISP
//  串口2:interrupt 8 , 定时器2        显示屏                4800bps
//  串口3:interrupt 17 ,定时器2        电表                4800bps
//  串口4:interrupt 18   定时器4         空调                600bps
//-----------------------------------------------------------------------------






//***********************************************************************************************************
//=========================  屏初始化参数,表格,颜色,亮度  =============================================
void DISP_MUORENset(void)
{
  
                Dis_Clear();                        //显示屏 清屏

//        Dis_SMS        ( 0xF800, 0x049B );                        //显示屏 红色显示 ,显示说明书,颜色,黄色  ,显示背景图片   

//                Brightness( liangdu_key() );                // 上电检测亮度设定值,上电有效
               
//                yanse_key();                                                                                // 颜色选择,通过键控

    Dis_Clear();                        //显示屏 清屏
       
                Set_ColorPallet( front_color , back_color );                //屏的前景色,背景色设置
       
                Dis_Clear();                                                                        //显示屏 清屏  ,设置完颜色后,必须清屏才显示

//                DISP_KCBbiaoge();                                                        // 课程表表格直线

                //                DISP_JRKC(0x07FF , back_color);                //显示"今日课程" 文字,和课程序号12345,绿色07E0,  07FF青色
                //-------------------------------                       

//        DISP_biaoti                ( front_color , back_color ) ;                                //显示行标题        front_color ; back_color ; Digital_color ;
///        DISP_daiweifuhao( front_color , back_color  ) ;                        //显示单位符号
//        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 标准双向口,0,1推勉输出,1,0仅输入,1,1高阻

}

//***********************************************************************************************************
//=========================  初始化 串口和定时器 ===========================串口3占用了20150923 定时器3==================

void init_UART_TIME( void )                        //初始化 串口和定时器
{
//        UART1_Init();                //Baud=4800         
       
        UART2_Init();                //Baud=115200,用于同屏幕通信,占用定时器2
       
        Timer0Init();                // 5ms                定时器0初始化 运行时间,并 开始计数
        Timer1Init();                // 10ms                定时器1初始化 运行时间  ,并 开始计数
        Timer3Init() ;        // 35ms                定时器 T3初始化 并 开始计数
        Timer4Init() ;        // 500us        定时器 T3初始化 并 开始计数
       
        INT_INTERRUPT_Init();                // 其它中断初始化,外中断

        //                IP2 = 0x00 ;                         //中断优先控制位
        //                IP  = 0x00 ;                        //中断优先控制位

                                 //        IE2 |= 0x08;      //充许串口3中断,电表用
                                 //        IE2 |= 0x10;                        //充许串口4中断,空调用


}

//**********************************************************************************
//**********************************************************************************

void main()
{
        unsigned char  ala , xq ;        //
       
        unsigned char  kb=0 , jq=0;        //
        unsigned char  tu=0 ;                        //, zym
       
        unsigned char         LDtjD_ws=2, LDtempB=7 ;                //夜晚亮度调整用,临时数,晚上22-早6点 亮度15
       
        unsigned char  IDcy = 0        ;                                // 成语 ID,循环显示1-52个成语
       
        unsigned char  xqtemp=0;                                // 星期临时值,临时值-星期,变化不等于0时,说明 第二天了

        init_DUANKOU();                                        // IO端口 初始化
        init_UART_TIME(  );                        // 初始化 串口和定时器

        Delay_Ms(1000);                                        // 延时1s,等待屏幕初始化完成,此时显示logo(图片0)
        //--------------------
                                                                                                        // 屏的颜色: 红色F800,淡蓝色001F,黄色FFE0,绿色07E0,白色FFFF,黑色0000,青色07FF,深黄色8400,深蓝色0008,
        //----------------------------

        DISP_MUORENset();                        //显示屏初始化 亮度,颜色,表格画直线,数字颜色,背景色,前景色,
       
                                                        //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时 BCD to HEX;
        ALtime[1]=(ZH_Data(0,Readbyte(0x08)));        // AL1分
        ALtime[2]=(ZH_Data(0,Readbyte(0x0c)));        // AL2时
        ALtime[3]=(ZH_Data(0,Readbyte(0x0b)));        // AL2分

        //--读出闹钟开关状态---
        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个闹钟
               
                wri_addrm(0x10, 0x02)        ;                        // 10H老化补偿位,并进2个电容
               
                        /*        //-----------调试用,调试后关闭-------------
                       
                                        if( set_timeq == 0 )                                        //如果上电时,按下=初始化
                                                { initialize_DS3231() ;                        // 初始化 时钟3231
                                                        init_alrm()  ;                                                        // 初始化闹钟 // 初始化 闹钟 3231 enable alarm
                                                }        */
                                //-------------------------------------       
                               
                beep1s(100);                        // 上电响一声       
               
                EA = 1;         
               
               
//-------------------------------------------------------------------------------------
//=================================================================-
  while(1)
        {                    //----- 现在主程序的循环周期为 12.7ms----12.7ms执行一圈-------

/*  Dis_Pic(tu);                                //显示图片
                tu++;
                if(tu>94)        tu= 0 ;
       
                Delay_Ms(5000);                        //延时1s,等待屏幕初始化完成,此时显示logo(图片0)
  
                Dis_Clear();                                                                                                                                        //显示屏 清屏  ,设置完颜色后,必须清屏才显示

               
                DISP_biaogeZHIXIAN();                        //绘画直线,表格               
        */       
               
/*        // ,背景1-前景2-时钟字色3-日期色4-文字色5-温度6-闹钟色7
                                front_color ;         back_color ;  RTC3_color ;        date4_color;        word5_color ;  temp6_color ; alar7_color ;       
               
               
        //===============================================================================
        //        datZY(dsmp[8]);                // 字节 高低位 顺序 76543210,变成01234567端口顺序改变用
                */       
               
                if((TiSetD_end_b==1)||(AlSetD_end_b==1))        {        AlSetD_end_b=0;TiSetD_end_b=0;        Dis_Clear();        Delay_Ms(500);                }                        // 时间设置完标志位,显示时清0,清屏
                        //----------------文字及背景颜色设置----------
                if(YStj_b==1)
                        { SETyanse(); Set_ColorPallet( front_color , back_color );        YStj_b = 0 ;        Dis_Clear();        Delay_Ms(500);        }                // 设置背景色后必须清屏延时
                       
                                //----------------屏幕亮度设置---------------
                if(LDtj_b==1)                { Brightness( LDtjD );        LDtj_b = 0 ;                }       
                                //------ -屏幕亮度 晚上10点 到早上5点 最低,其它时间,默认值- --------
                if( (date_time[2]>0x05)&&(date_time[2]<0x22) )        {        if(LDtempB==7) {        Brightness( LDtjD );        LDtempB=3;}        }                        // 早6到晚10点 正常亮度
                else { if(LDtempB==3) {        LDtempB=7;           Brightness( LDtjD_ws );                        }        }
               
                        //----------------设置时间、闹钟--------
                if(effeKEY_b==1)        {        effeKEY_b=0  ;        setRTCkeyCL();        SetDTtreg();        }                // 有效键后,扫描按键,并处理,设置时间、闹钟、亮度、初始化、颜色, 设置 时间、闹钟
                                                                               
               

       
       
                       
        //------------------ 显示课程表位=1 -------------
        if( dispKCB_b ==0 )                                 // ,         DISP_kechengbiaoALL(  0xF800, 0x0000  ) ;        
        {
                if(        kb==5)        {         kb = 0 ;        Dis_Clear();        Delay_Ms(500);        }                //显示屏 清屏,清屏后必须延时
                       
               

                        //=-=-=-=-=-=-=-=-=-=-==========--------------------------       
                       
                DISP_KCBbiaoge();                                                                                                                // 课程表表格直线       
                DISP_JRKC( word5_color,        back_color );                                // 显示"今日课程" 文字,和课程序号12345,绿色07E0,  07FF青色
               

                //-----------------显示 时间--
                read_dati();                                                                                                                        //读RTC 3231 ,date_time[0],秒分时.星期.日月年,温度
                DISP_CL_BCDto();                                                                                                        //处理时钟 3231 BCD 显示用,时间,温度 转化成显示用
               
                DISP_RTCshijian( RTC3_color ,         back_color   ) ;                // back_color显示实时时间,(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个地点,2个坐标
               
                //-----------------显示 课程--
                if( date_time[2] > 18 )         {        xq = dsmp[8] + 1;         if( xq>7 ){ xq=1; }                 }                        // 如果时间大于12点 显示明日 课程表
                else                                                                                         { xq = dsmp[8];        }
               
                //----------星期六和星期日,今天明天课程 里显示:放假休息喽-----------------
               
               
                //-----------------显示 课程表--
                DISP_kechengbiaoXUAN( word5_color , back_color , xq ) ;                // 前景色FFE0黄色,背景色,星期几就显示星期几的课程内容       
               
                //-----------------显示 闹钟时间----
                DISP_RTCalarm                          ( alar7_color , back_color , 0x01F4        , 0x0061  ) ;                                        // 500,97显示 闹钟时间
                DISP_RTCalarmONOFF         ( alar7_color , back_color , 0x0244        , 0x0061  ) ;                                        // 580,97显示 闹钟状态,开关
               
                //-----------------显示 温湿度------
                if(sec5s_b==1){         DHTreceive( )        ;                                                                //        DHTcon++; if(DHTcon==10) DHTcon=0;                        //  接收 湿度传感器DHT11数据,2分钟读一次湿度
                                                                                        sec5s_b= 0;                sec = 0 ;
                       
                                                                        ////        IDcy+=4 ;        if(IDcy==52)        IDcy=0;                // 显示成语
                       
                                                                                //        jq++ ;        if(jq>12)        jq=1 ;       
                                               
                                                                                        xqtemp =        dsmp[8] ;                                        // 赋值 星期
                       
                                                                                        wri_addrm(0x10, 0x02)        ;                        // 10H老化补偿位,并进2个电容
                                               
                                                                                        lhbc1_D=(ZH_Data(0,Readbyte(0x10)));        // 读出老化补偿电容值,AL1时 BCD to HEX;
                       
                       
                                                                                //zym++; if(zym>11)         zym=1;                        // 调试用
                                                                        }                                                                                                                                                                                                        // 显示 湿度/温度  front_color 蓝色0x1F00

                                                                       
                DISP_DHT11 ( temp6_color  , back_color , 0x01F4        , 0x0091  ) ;                                // 500 ,145
                                                                               

                //-----------------显示 期望--------
                DISP_QIWANG1( alar7_color , back_color ) ;                                        // 显示 期望的,祝福的话1, 4个字加一个标点符号, ,50,464
                                                                       
                //----------------- 显示 每日 成语  ----------       
                DISP_ChengYu( RTC3_color  , back_color ,  0x0030, 0x0216,  HZchengyu[IDcy] ,        20        ) ;                // 48,534,显示成语(颜色,坐标,字库开始地址,长度,10个为一个成语加逗号,)
               

                                                                        //----------------- 显示座右铭  ----------       
                DISP_ZuoYouMing( date4_color , back_color ,        dsmp[8]+2 ) ;                                                // 显示 期望的,祝福的话 共9个字    ,,300 ,464               
                                                                       
                //----------------- 显示 提醒----------               
                DISP_tixing                (  word5_color,         back_color ,0x01F4        , 0x00BE  );                        //  500,190 显示 环境温度湿度 提醒       
               
                //----------------设置时,提醒设置内容---------
                DISP_SETword( RTC3_color , back_color ) ;                                                                        // 设置时,提醒设置内容
                //----------------------------------

                DISP_LdYs_tishi(  temp6_color  , back_color ,  0x02BC, 0x000E );                //  颜色 和 亮度 提示,         (显示的颜色,坐标)back_color+0x0840 , back_color ,
       
                        DISP_TIAOSHI ( front_color  , back_color ) ;                // 调试数据,, 48,566
                                                                       
               
               
                //---------------- 计算农历 年月日  ---------
                Conversion( 0,        date_time[6],        date_time[5],        date_time[4] ) ;                        // 11月07日 计算 农历日期,由阳历年月日到农历年月日
               
                DISP_NongLi  ( alar7_color , back_color ,        0x0040 , 0x00CD )        ;                                //  64,205.显示农历 年月日
               
                DISP_nongliHolidays( date4_color , back_color ,        0x0040 , 0x0107 )        ;                                //  70,263 .显示 节日
                DISP_gongliHolidays( word5_color , back_color ,        0x0104 , 0x0107 )        ;                                //  260,263 .显示 节日
               
                js_JIEQI(date_time[6],        date_time[5]  ,        date_time[4] ) ;                                        // 节气计算返回 日期,年月日计算 24节气
               
                DISP_24jieqi( temp6_color , back_color ,        0x0180 , 0x00D7 )        ;                        // 384,215 显示24节气

                //-----------------闹钟声音输出----周六周日不响---------------
               
                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);        }        // 打开光标显示,坐标/长/高/开关
        ////        if(gb==8)        { ;        }                                                                                                                                                                                                                        // 打开光标显示
               
       
       
                if(        xqtemp!=dsmp[8] ){        IDcy++ ;        if( IDcy>52 )        {        IDcy = 0;        }                }                // 星期变化时,说明是第二天了, 显示 每日 成语
               
        ////        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,退出,显示时间
                                                                break;        }       
                                                       
                                                break;       
                                                       
                                                }                                        // ----switch END -------
                                }                                                        //------if(kb=0)  END ---------       
        }                                                                                //---- slse END ---------
       
       
   //==-------------------------------
}        //----------- while  end-
       
}
回复

使用道具 举报

板凳
ID:83626 发表于 2019-9-3 21:18 | 只看该作者
  1. /*
  2. 红色:FC10,F800,8208,8000,4000,
  3. 黄色:FFF0,FFE0,8400,8408,
  4. 绿色:87F0,87E0,07E0,0400,0200,0408,07F0,07E8,
  5. 蓝色:001F,0010,0008,0014,0210,0418,041F,841F,0210,
  6. 青色:07FF,87FF,
  7. 灰色:C618,8410,
  8. 西瓜红,粉色:F810,F81F,FC1F,FC18,8008,8010,4008,
  9. 紫蓝:801F,4010,0410,0208,4410,8418,
  10. 橙黄:FC08,FC00,8200,
  11. 黑色:0000
  12. 白色:FFFF
  13. 护眼:CF59               */
  14. //    ------------********************************************************************/

  15. #include "STC15W4K32S4.H "                //
  16. #include " usartPING8cui.H "        // 屏
  17.         //#include " usartBPKT.H "                        // 空调
  18.         //#include " DIANBIAO.H "                                // 电表
  19. #include " initalize.H "                        // 初始化 串口定时器,定时中断程序
  20. #include " scankey.H "                          // 键扫描程序,处理,初始化时的按键设置,文字颜色,亮度
  21. #include " setRTCkey.H "                          // 键扫描程序,处理,时间等设置


  22. #include " RTC_DS3231.H  "                // DS3231时钟芯片子程序20160917

  23. #include " READ_DHT11.H  "                //  温度、湿度传感器 DHT11 子程序

  24. #include " DISPshijian.H "        // 显示参数,,时间

  25. #include " Font_GB2312_code.H "        // 汉字字库成语

  26. #include " stcEEPROM.H        "                                // STC单片机 EEPROM 存储器

  27. #include " wannianli.H        "                                // 万年历计算,农历,节日,节气

  28. #include " JIEQI24.H        "                                // 万年历计算,农历,节日,节气

  29. //#include <STC15F2K60S2.H>

  30. void DISP_MUORENset( void );           //显示屏 初始化 亮度,颜色,表格,标题,数字颜色,背景色,前景色
  31. void init_DUANKOU ( void ) ;                //IO端口初始化
  32. void init_UART_TIME( void )        ;                //初始化 串口和定时器

  33. //====================================================================================
  34. //*********************************************************************************


  35. //******************************************************************************

  36. /*
  37. //========== 定时器中断服务函数 ===============================================
  38. //=============================================================================
  39. //  定时器0:interrupt 1 ,       
  40. //  定时器1:interrupt 3 ,       
  41. //  定时器2:interrupt 12 ,   串口2和串口3共用波特率
  42. //  定时器3:interrupt 19 ,   运行时间,//34482微秒@22.1184MHz         34.482*29=1秒
  43. //  定时器4:interrupt 20             串口4,空调600BPS用
  44. //-----------------------------------------------------------------------------
  45. void Time1_int(void) interrupt 3                 // 定时器1 扫描
  46. {
  47. ;
  48. }
  49. /*
  50.         if(TMcon==29) {TMcon =0 ;        TMsec++ ;                                         }                                                         //调试用指示灯
  51.         if(TMsec==60) {TMsec =0 ;        TMmin++ ;        if(DBconsumption_b==1)        TMmin_SUM++ ;        if(TMmin_SUM==60)        TMmin_SUM=0;        }        //有用电时,时间累加,定时器不停
  52.         if(TMmin==60) {TMmin =0 ;        TMhou++ ;        if(DBconsumption_b==1)        TMhou_SUM++ ;        }
  53.         if(TMhou==24) {TMhou =0 ;                        */


  54. //========== 串行口1中断服务函数 ===============================================
  55. //=============================================================================
  56. //  串口1:interrupt 4 ,        ISP
  57. //  串口2:interrupt 8 , 定时器2        显示屏                4800bps
  58. //  串口3:interrupt 17 ,定时器2        电表                4800bps
  59. //  串口4:interrupt 18   定时器4         空调                600bps
  60. //-----------------------------------------------------------------------------






  61. //***********************************************************************************************************
  62. //=========================  屏初始化参数,表格,颜色,亮度  =============================================
  63. void DISP_MUORENset(void)
  64. {
  65.   
  66.                 Dis_Clear();                        //显示屏 清屏

  67. //        Dis_SMS        ( 0xF800, 0x049B );                        //显示屏 红色显示 ,显示说明书,颜色,黄色  ,显示背景图片   

  68. //                Brightness( liangdu_key() );                // 上电检测亮度设定值,上电有效
  69.                
  70. //                yanse_key();                                                                                // 颜色选择,通过键控

  71.     Dis_Clear();                        //显示屏 清屏
  72.        
  73.                 Set_ColorPallet( front_color , back_color );                //屏的前景色,背景色设置
  74.        
  75.                 Dis_Clear();                                                                        //显示屏 清屏  ,设置完颜色后,必须清屏才显示

  76. //                DISP_KCBbiaoge();                                                        // 课程表表格直线

  77.                 //                DISP_JRKC(0x07FF , back_color);                //显示"今日课程" 文字,和课程序号12345,绿色07E0,  07FF青色
  78.                 //-------------------------------                       

  79. //        DISP_biaoti                ( front_color , back_color ) ;                                //显示行标题        front_color ; back_color ; Digital_color ;
  80. ///        DISP_daiweifuhao( front_color , back_color  ) ;                        //显示单位符号
  81. //        DISP_biaogeZHIXIAN();                                                                                                                                //课程表 绘制表格,直线

  82. }

  83. //***********************************************************************************************************
  84. //=========================  端口 初始化, =============================================
  85. void init_DUANKOU ( void )
  86. {

  87.         P0M1 = 0x00 ;
  88.         P0M0 = 0x00 ;                //

  89.         P1M1 = 0x00 ;
  90.         P1M0 = 0x00 ;                // 输出

  91.         P2M1 = 0x00 ;
  92.         P2M0 = 0x00 ;                // 输出

  93.         P3M1 = 0x00 ;
  94.         P3M0 = 0x00 ;                // 输出

  95.                         //        P3M1 = 0x01;
  96.                         //        P3M0 = 0x00;                   // 仅为输入        0 ,0 标准双向口,0,1推勉输出,1,0仅输入,1,1高阻

  97. }

  98. //***********************************************************************************************************
  99. //=========================  初始化 串口和定时器 ===========================串口3占用了20150923 定时器3==================

  100. void init_UART_TIME( void )                        //初始化 串口和定时器
  101. {
  102. //        UART1_Init();                //Baud=4800         
  103.        
  104.         UART2_Init();                //Baud=115200,用于同屏幕通信,占用定时器2
  105.        
  106.         Timer0Init();                // 5ms                定时器0初始化 运行时间,并 开始计数
  107.         Timer1Init();                // 10ms                定时器1初始化 运行时间  ,并 开始计数
  108.         Timer3Init() ;        // 35ms                定时器 T3初始化 并 开始计数
  109.         Timer4Init() ;        // 500us        定时器 T3初始化 并 开始计数
  110.        
  111.         INT_INTERRUPT_Init();                // 其它中断初始化,外中断

  112.         //                IP2 = 0x00 ;                         //中断优先控制位
  113.         //                IP  = 0x00 ;                        //中断优先控制位

  114.                                  //        IE2 |= 0x08;      //充许串口3中断,电表用
  115.                                  //        IE2 |= 0x10;                        //充许串口4中断,空调用


  116. }

  117. //**********************************************************************************
  118. //**********************************************************************************

  119. void main()
  120. {
  121.         unsigned char  ala , xq ;        //
  122.        
  123.         unsigned char  kb=0 , jq=0;        //
  124.         unsigned char  tu=0 ;                        //, zym
  125.        
  126.         unsigned char         LDtjD_ws=2, LDtempB=7 ;                //夜晚亮度调整用,临时数,晚上22-早6点 亮度15
  127.        
  128.         unsigned char  IDcy = 0        ;                                // 成语 ID,循环显示1-52个成语
  129.        
  130.         unsigned char  xqtemp=0;                                // 星期临时值,临时值-星期,变化不等于0时,说明 第二天了

  131.         init_DUANKOU();                                        // IO端口 初始化
  132.         init_UART_TIME(  );                        // 初始化 串口和定时器

  133.         Delay_Ms(1000);                                        // 延时1s,等待屏幕初始化完成,此时显示logo(图片0)
  134.         //--------------------
  135.                                                                                                         // 屏的颜色: 红色F800,淡蓝色001F,黄色FFE0,绿色07E0,白色FFFF,黑色0000,青色07FF,深黄色8400,深蓝色0008,
  136.         //----------------------------

  137.         DISP_MUORENset();                        //显示屏初始化 亮度,颜色,表格画直线,数字颜色,背景色,前景色,
  138.        
  139.                                                         //Set_ColorPallet(0xF800, 0x049B)  ;                        //,背景色,前景色       
  140.        
  141.         //Delay_Ms(5000); Delay_Ms(5000);        Delay_Ms(5000);        Delay_Ms(5000);
  142.        
  143.         //-------------------------------
  144.         comm_DS3231init();                                        // DS3231
  145.        
  146.         //---读出闹钟值----放在RAM---------
  147.         ALtime[0]=(ZH_Data(0,Readbyte(0x09)));        // AL1时 BCD to HEX;
  148.         ALtime[1]=(ZH_Data(0,Readbyte(0x08)));        // AL1分
  149.         ALtime[2]=(ZH_Data(0,Readbyte(0x0c)));        // AL2时
  150.         ALtime[3]=(ZH_Data(0,Readbyte(0x0b)));        // AL2分

  151.         //--读出闹钟开关状态---
  152.         ala = Readbyte(0x0E);                                                //        闹钟控制寄存器
  153.                 if((ala&0x01)==1){AL1_B=1;}         // &按位与
  154.                 else AL1_B=0;

  155.                 if((ala&0x02)==2){AL2_B=1;}
  156.                 else AL2_B=0;

  157.         wri_addrm(0x0F,0);                                //闹钟 响        清闹钟寄存器=0,上电清2个闹钟
  158.                
  159.                 wri_addrm(0x10, 0x02)        ;                        // 10H老化补偿位,并进2个电容
  160.                
  161.                         /*        //-----------调试用,调试后关闭-------------
  162.                        
  163.                                         if( set_timeq == 0 )                                        //如果上电时,按下=初始化
  164.                                                 { initialize_DS3231() ;                        // 初始化 时钟3231
  165.                                                         init_alrm()  ;                                                        // 初始化闹钟 // 初始化 闹钟 3231 enable alarm
  166.                                                 }        */
  167.                                 //-------------------------------------       
  168.                                
  169.                 beep1s(100);                        // 上电响一声       
  170.                
  171.                 EA = 1;         
  172.                
  173.                
  174. //-------------------------------------------------------------------------------------
  175. //=================================================================-
  176.   while(1)
  177.         {                    //----- 现在主程序的循环周期为 12.7ms----12.7ms执行一圈-------

  178. /*  Dis_Pic(tu);                                //显示图片
  179.                 tu++;
  180.                 if(tu>94)        tu= 0 ;
  181.        
  182.                 Delay_Ms(5000);                        //延时1s,等待屏幕初始化完成,此时显示logo(图片0)
  183.   
  184.                 Dis_Clear();                                                                                                                                        //显示屏 清屏  ,设置完颜色后,必须清屏才显示

  185.                
  186.                 DISP_biaogeZHIXIAN();                        //绘画直线,表格               
  187.         */       
  188.                
  189. /*        // ,背景1-前景2-时钟字色3-日期色4-文字色5-温度6-闹钟色7
  190.                                 front_color ;         back_color ;  RTC3_color ;        date4_color;        word5_color ;  temp6_color ; alar7_color ;       
  191.                
  192.                
  193.         //===============================================================================
  194.         //        datZY(dsmp[8]);                // 字节 高低位 顺序 76543210,变成01234567端口顺序改变用
  195.                 */       
  196.                
  197.                 if((TiSetD_end_b==1)||(AlSetD_end_b==1))        {        AlSetD_end_b=0;TiSetD_end_b=0;        Dis_Clear();        Delay_Ms(500);                }                        // 时间设置完标志位,显示时清0,清屏
  198.                         //----------------文字及背景颜色设置----------
  199.                 if(YStj_b==1)
  200.                         { SETyanse(); Set_ColorPallet( front_color , back_color );        YStj_b = 0 ;        Dis_Clear();        Delay_Ms(500);        }                // 设置背景色后必须清屏延时
  201.                        
  202.                                 //----------------屏幕亮度设置---------------
  203.                 if(LDtj_b==1)                { Brightness( LDtjD );        LDtj_b = 0 ;                }       
  204.                                 //------ -屏幕亮度 晚上10点 到早上5点 最低,其它时间,默认值- --------
  205.                 if( (date_time[2]>0x05)&&(date_time[2]<0x22) )        {        if(LDtempB==7) {        Brightness( LDtjD );        LDtempB=3;}        }                        // 早6到晚10点 正常亮度
  206.                 else { if(LDtempB==3) {        LDtempB=7;           Brightness( LDtjD_ws );                        }        }
  207.                
  208.                         //----------------设置时间、闹钟--------
  209.                 if(effeKEY_b==1)        {        effeKEY_b=0  ;        setRTCkeyCL();        SetDTtreg();        }                // 有效键后,扫描按键,并处理,设置时间、闹钟、亮度、初始化、颜色, 设置 时间、闹钟
  210.                                                                                
  211.                

  212.        
  213.        
  214.                        
  215.         //------------------ 显示课程表位=1 -------------
  216.         if( dispKCB_b ==0 )                                 // ,         DISP_kechengbiaoALL(  0xF800, 0x0000  ) ;        
  217.         {
  218.                 if(        kb==5)        {         kb = 0 ;        Dis_Clear();        Delay_Ms(500);        }                //显示屏 清屏,清屏后必须延时
  219.                        
  220.                

  221.                         //=-=-=-=-=-=-=-=-=-=-==========--------------------------       
  222.                        
  223.                 DISP_KCBbiaoge();                                                                                                                // 课程表表格直线       
  224.                 DISP_JRKC( word5_color,        back_color );                                // 显示"今日课程" 文字,和课程序号12345,绿色07E0,  07FF青色
  225.                

  226.                 //-----------------显示 时间--
  227.                 read_dati();                                                                                                                        //读RTC 3231 ,date_time[0],秒分时.星期.日月年,温度
  228.                 DISP_CL_BCDto();                                                                                                        //处理时钟 3231 BCD 显示用,时间,温度 转化成显示用
  229.                
  230.                 DISP_RTCshijian( RTC3_color ,         back_color   ) ;                // back_color显示实时时间,(0xF800, 0x049B),白色0xFFFF
  231.                 DISP_RTCriqi   ( date4_color , back_color   ) ;                // 显示日期,年月日星期
  232.                 DISP_RTCxingqi ( date4_color , back_color, 0x0212 , 0x000E  ) ;                // 显示星期 几
  233.                 DISP_RTCxingqi ( date4_color , back_color, 0x001E , 0x013A  ) ;                // 显示星期 几  30 ,314,显示2个地点,2个坐标
  234.                
  235.                 //-----------------显示 课程--
  236.                 if( date_time[2] > 18 )         {        xq = dsmp[8] + 1;         if( xq>7 ){ xq=1; }                 }                        // 如果时间大于12点 显示明日 课程表
  237.                 else                                                                                         { xq = dsmp[8];        }
  238.                
  239.                 //----------星期六和星期日,今天明天课程 里显示:放假休息喽-----------------
  240.                
  241.                
  242.                 //-----------------显示 课程表--
  243.                 DISP_kechengbiaoXUAN( word5_color , back_color , xq ) ;                // 前景色FFE0黄色,背景色,星期几就显示星期几的课程内容       
  244.                
  245.                 //-----------------显示 闹钟时间----
  246.                 DISP_RTCalarm                          ( alar7_color , back_color , 0x01F4        , 0x0061  ) ;                                        // 500,97显示 闹钟时间
  247.                 DISP_RTCalarmONOFF         ( alar7_color , back_color , 0x0244        , 0x0061  ) ;                                        // 580,97显示 闹钟状态,开关
  248.                
  249.                 //-----------------显示 温湿度------
  250.                 if(sec5s_b==1){         DHTreceive( )        ;                                                                //        DHTcon++; if(DHTcon==10) DHTcon=0;                        //  接收 湿度传感器DHT11数据,2分钟读一次湿度
  251.                                                                                         sec5s_b= 0;                sec = 0 ;
  252.                        
  253.                                                                         ////        IDcy+=4 ;        if(IDcy==52)        IDcy=0;                // 显示成语
  254.                        
  255.                                                                                 //        jq++ ;        if(jq>12)        jq=1 ;       
  256.                                                
  257.                                                                                         xqtemp =        dsmp[8] ;                                        // 赋值 星期
  258.                        
  259.                                                                                         wri_addrm(0x10, 0x02)        ;                        // 10H老化补偿位,并进2个电容
  260.                                                
  261.                                                                                         lhbc1_D=(ZH_Data(0,Readbyte(0x10)));        // 读出老化补偿电容值,AL1时 BCD to HEX;
  262.                        
  263.                        
  264.                                                                                 //zym++; if(zym>11)         zym=1;                        // 调试用
  265.                                                                         }                                                                                                                                                                                                        // 显示 湿度/温度  front_color 蓝色0x1F00

  266.                                                                        
  267.                 DISP_DHT11 ( temp6_color  , back_color , 0x01F4        , 0x0091  ) ;                                // 500 ,145
  268.                                                                                

  269.                 //-----------------显示 期望--------
  270.                 DISP_QIWANG1( alar7_color , back_color ) ;                                        // 显示 期望的,祝福的话1, 4个字加一个标点符号, ,50,464
  271.                                                                        
  272.                 //----------------- 显示 每日 成语  ----------       
  273.                 DISP_ChengYu( RTC3_color  , back_color ,  0x0030, 0x0216,  HZchengyu[IDcy] ,        20        ) ;                // 48,534,显示成语(颜色,坐标,字库开始地址,长度,10个为一个成语加逗号,)
  274.                

  275.                                                                         //----------------- 显示座右铭  ----------       
  276.                 DISP_ZuoYouMing( date4_color , back_color ,        dsmp[8]+2 ) ;                                                // 显示 期望的,祝福的话 共9个字    ,,300 ,464               
  277.                                                                        
  278.                 //----------------- 显示 提醒----------               
  279.                 DISP_tixing                (  word5_color,         back_color ,0x01F4        , 0x00BE  );                        //  500,190 显示 环境温度湿度 提醒       
  280.                
  281.                 //----------------设置时,提醒设置内容---------
  282.                 DISP_SETword( RTC3_color , back_color ) ;                                                                        // 设置时,提醒设置内容
  283.                 //----------------------------------

  284.                 DISP_LdYs_tishi(  temp6_color  , back_color ,  0x02BC, 0x000E );                //  颜色 和 亮度 提示,         (显示的颜色,坐标)back_color+0x0840 , back_color ,
  285.        
  286.                         DISP_TIAOSHI ( front_color  , back_color ) ;                // 调试数据,, 48,566
  287.                                                                        
  288.                
  289.                
  290.                 //---------------- 计算农历 年月日  ---------
  291.                 Conversion( 0,        date_time[6],        date_time[5],        date_time[4] ) ;                        // 11月07日 计算 农历日期,由阳历年月日到农历年月日
  292.                
  293.                 DISP_NongLi  ( alar7_color , back_color ,        0x0040 , 0x00CD )        ;                                //  64,205.显示农历 年月日
  294.                
  295.                 DISP_nongliHolidays( date4_color , back_color ,        0x0040 , 0x0107 )        ;                                //  70,263 .显示 节日
  296.                 DISP_gongliHolidays( word5_color , back_color ,        0x0104 , 0x0107 )        ;                                //  260,263 .显示 节日
  297.                
  298.                 js_JIEQI(date_time[6],        date_time[5]  ,        date_time[4] ) ;                                        // 节气计算返回 日期,年月日计算 24节气
  299.                
  300.                 DISP_24jieqi( temp6_color , back_color ,        0x0180 , 0x00D7 )        ;                        // 384,215 显示24节气

  301.                 //-----------------闹钟声音输出----周六周日不响---------------
  302.                
  303.                 if(AlaSkB==1)                        // 外中断置位
  304.                         {        if((date_time[3]==0x06)||(date_time[3]==0x07)) {        SOTalaspk();        }
  305.                                 else        alaspk(); }                                                                // 周末不闹 如果闹钟到有中断了,就声音 闹钟输出
  306.                
  307.                                
  308.                 //------------------------------------------------------------------------------
  309.         ////        if(gb==0)        { gb=8;                DISP_guangbiao(0x0078,0x010B,0x1F,0x05,0x01);        }        // 打开光标显示,坐标/长/高/开关
  310.         ////        if(gb==8)        { ;        }                                                                                                                                                                                                                        // 打开光标显示
  311.                
  312.        
  313.        
  314.                 if(        xqtemp!=dsmp[8] ){        IDcy++ ;        if( IDcy>52 )        {        IDcy = 0;        }                }                // 星期变化时,说明是第二天了, 显示 每日 成语
  315.                
  316.         ////        xqtemp =        dsmp[8] ;                                        // 赋值 星期
  317.                                                                                 //        Delay_Ms(500);       
  318.                

  319.                        
  320.         }                        // -----K5=0 END-------------
  321.        
  322.        
  323.         else                 // dispKCB_b = 1
  324.         {         
  325.                         if(kb==0)
  326.                                 {        switch(dispKCB_D)                                        //        0000 0000 02BC 01BD 0019 0019
  327.                                                 {case 1:
  328.                                                         {       
  329.                                                                 Dis_PICshear( 0x09, 0x0000, 0x0000,  0x02BC, 0x01BD,  0x0019, 0x0019 );                        // 剪切显示图片 课程表
  330.                                                                 break;        }
  331.                                                        
  332.                                                 case 2:
  333.                                                         {       
  334.                                                                 Dis_PICshear( 0x17, 0x0000, 0x0000,  0x02BC, 0x01BD,  0x0025, 0x0025  );                        // 剪切显示图片 课程表
  335.                                                                 break;        }
  336.                                                        
  337.                                                 case 3:
  338.                                                         {       
  339.        
  340.                                                                 Dis_Pic(85);                        // 显示图片 课程表
  341.                                                                 break;        }
  342.                                                        
  343.                                                 case 4:
  344.                                                         {
  345.                                                                 Dis_Pic(tu);                        // 显示图片 课程表
  346.                                                                 if(sec10s_b==1){        sec10s_b=0;        tu++;        if(tu>84){ tu=0;}                }                                        //        Dis_Clear();                        // 显示屏 清屏
  347.                                                                
  348.                                                                 break;        }       
  349.                                                        
  350.                                                 case 5:
  351.                                                         {       
  352.                                                                 kb = 5 ;       
  353.                                                                 dispKCB_b = 0 ;                // =1显示课程表,清0,退出,显示时间
  354.                                                                 break;        }       
  355.                                                        
  356.                                                 break;       
  357.                                                        
  358.                                                 }                                        // ----switch END -------
  359.                                 }                                                        //------if(kb=0)  END ---------       
  360.         }                                                                                //---- slse END ---------
  361.        
  362.        
  363.    //==-------------------------------
  364. }        //----------- while  end-
  365.        
  366. }
复制代码
回复

使用道具 举报

地板
ID:755390 发表于 2020-6-9 15:09 | 只看该作者
楼主有没有出套件?
回复

使用道具 举报

5#
ID:83626 发表于 2020-7-23 19:47 | 只看该作者
阿东奎 发表于 2020-6-9 15:09
楼主有没有出套件?

这个没有,当初就是有硬件剩余 ,做个玩的。
回复

使用道具 举报

6#
ID:634450 发表于 2020-7-30 20:23 | 只看该作者
楼主有没有硬件图之类的
回复

使用道具 举报

7#
ID:653096 发表于 2020-11-13 15:28 | 只看该作者
有没有原理图啊
回复

使用道具 举报

8#
ID:180919 发表于 2020-11-21 13:09 | 只看该作者
有硬件套件就好了,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表