×
单片机 > 单片机程序设计 > 详情

pic单片机做的万年历

发布时间:2020-08-25 发布时间:
|

 

#include
#include "ziku.h"
#include "lcd_init.h"
#include "ds1302.h"
#include "ds18b20.h"
#include "keyscan.h"
#include "yinli.h"
uch jj,ii;
//子程序
//LCD显示空白边框子程序
void LCDShowTable()
{
        uch i;
        SlectScreen(1);     //写左半屏
        SetLine(0);         //起使页
        SetColumn(0);       //起使列
        for(i=0;i<64;i++)
        {
                if((i==0)||(i==63))WriteData(0xff);//第1、63列竖线
                else WriteData(0x01);              //最上面一行线
        }
        for(i=1;i<7;i++)
        {
                SetLine(i);
                SetColumn(0);
                WriteData(0xff); //竖线
                SetColumn(63);
                WriteData(0xff); //竖线        
        }
        SetLine(7);
        SetColumn(0);
        for(i=0;i<64;i++)
        {
                if((i==0)||(i==63))WriteData(0xff);
                else WriteData(0x80);             //最下面的横线
        }
        
        SlectScreen(2);//写右半屏
        SetLine(0);
        SetColumn(0);
        for(i=0;i<64;i++)
        {
                if(i==63)WriteData(0xff);
                else WriteData(0x01);
        }
        SetLine(4);
        SetColumn(0);
        for(i=0;i<64;i++)
        {
                if(i==63)WriteData(0xff);
                else WriteData(0x01);
        }
        for(i=1;i<7;i++)
        {
                SetLine(i);
                SetColumn(63);
                WriteData(0xff);        
        }
        SetLine(7);
        SetColumn(0);
        for(i=0;i<64;i++)
        {
                if(i==63)WriteData(0xff);
                else WriteData(0x80);
        }        
}
/*----------------------------------------------------------*/

//显示固定字符子程序
void LCDShowGudingWord()
{
        Show8X16(0,80,maohao,1);
        Show8X16(0,104,maohao,1);
        
        Show16X16(6,80,yue,2);
        Show16X16(0,40,nian,1);
        Show16X16(4,2,yue,0);
        Show16X16(6,8,xing,2);
        Show16X16(6,24,qi,2);
        Show16X16(2,96,danwei1,0);
        Show8X16(0,8,s2,1);
        Show8X16(0,16,s0,1);
}
/*----------------------------------------------------------*/

void TMR0init()
{
        T0CS=0;
        PSA=0;
        PS2=1;
        PS1=1;
        PS0=1;
        TMR0=0x80;
        T0IE=1;
        T0IF=0;
}
//冒号闪烁子程序
void FlashMaohao()
{
        static uch timecount1;
        static int timecount2;
        
        if(TMR0IF==1)
        {
                TMR0=0x80;
                TMR0IF=0;
                timecount1++;
                timecount2++;
                if(timecount1==10)
                {
                        flag++;
                    flag=flag%2;    //闪烁标志在0-1间翻转
                    timecount1=0;
                }
                if(timecount2==1200)//1分钟采样一次温度
                {
                        timecount2=0;
                        get_temp();   //温度转换子程序
                }
        }
        if(flag==0)
        {
                Show8X16(0,80,maohao,1);
                Show8X16(0,104,maohao,1);
        }
        if(flag==1)
        {
                Show8X16(0,80,noshu,1);//清除
                Show8X16(0,104,noshu,1);
        }
}

void Naoling()
{
        
        if(kk==1)
        {
                if(RD3==0)
                {
                        jj++;
                        jj=jj%4;
                        while(1)
                        {
                                if(RD3==1)break;
                        }
                }
                if(jj==1)
                {
                        Naoling_hour_1=        Naoling_hour;
                        Naoling_minute_1=Naoling_minute;
                        RC4=1;
                        RC6=0;
                        RC7=0;
                }
                if(jj==2)
                {
                        Naoling_hour_2=        Naoling_hour;
                        Naoling_minute_2=Naoling_minute;
                        RC4=0;
                        RC6=1;
                        RC7=0;
                }
                if(jj==3)
                {
                        Naoling_hour_3=        Naoling_hour;
                        Naoling_minute_3=Naoling_minute;
                        RC4=0;
                        RC6=0;
                        RC7=1;
                        
                }
        }
}


void NaolingXiang()
{
        int i;
        if((kk==1)&&(Naoling_hour_1==clock[2])&&(Naoling_minute_1==clock[1]))
        {
                RC5=1;
                for(i=0;i<100;i++);
                RC5=0;
                for(i=0;i<500;i++);
        }
        if((kk==1)&&(Naoling_hour_2==clock[2])&&(Naoling_minute_2==clock[1]))
        {
                RC5=1;
                for(i=0;i<100;i++);
                RC5=0;
                for(i=0;i<200;i++);
        }
        if((kk==1)&&(Naoling_hour_3==clock[2])&&(Naoling_minute_3==clock[1]))
        {
                RC5=1;
                for(i=0;i<200;i++);
                RC5=0;
                for(i=0;i<500;i++);
        }
}

//查询子程序
void chaxun()
{
        if(RD3==0)
        {
                ii++;
                ii=ii%2;
        }
        while(1)
        {
                if(RD3==1)break;
        }
        if(ii==1)
        {
                KeyScan();
        }
}

//主程序
void main()
{
        keyinit();              //键盘初始化
        LCDinit();              //LCD操作初始化
        LCDShowTable();         //显示空白表格
        LCDShowGudingWord();    //显示固定字符
        get_temp();             //读取温度
        TMR0init();
        while(1)
        {
                v_Get1302(clock);   //读取时间、日历
                display();
                FlashMaohao();      //冒号闪烁
                KeyScan();                //键盘扫描        
                GetWeek(clock[6]+2000,clock[4],clock[3]);
                GetChinaCalendar(clock[6]+2000,clock[4],clock[3]);
                //Naoling();
                //NaolingXiang();
                chaxun();
        }
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项