打印
[PIC®/AVR®/dsPIC®产品]

pic单片机做的万年历

[复制链接]
201|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzmm|  楼主 | 2023-5-28 10:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <pic.h>
#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();
        }
}
转自http://www.51hei.com/bbs/dpj-149790-1.html

使用特权

评论回复
沙发
benjaminka| | 2023-6-6 12:12 | 只看该作者
写一个万年历的单片机程序,要求调日期时星期自动变,请问要怎么写

使用特权

评论回复
板凳
minzisc| | 2023-6-6 13:01 | 只看该作者
通过RTC来获取当前日期和时间,并根据日期计算出当月的日历。

使用特权

评论回复
地板
hearstnorman323| | 2023-6-6 13:22 | 只看该作者
用单片机设计一个万年历,如何实现阳历到农历的转换?

使用特权

评论回复
5
geraldbetty| | 2023-6-6 14:13 | 只看该作者
万年历的设计思路是什么呢              

使用特权

评论回复
6
ccook11| | 2023-6-6 15:05 | 只看该作者
求个用单片机c语言实现的万年历              

使用特权

评论回复
7
lzmm|  楼主 | 2023-6-10 12:51 | 只看该作者
使用时钟芯片1302做万年历              

使用特权

评论回复
8
geraldbetty| | 2023-6-10 13:10 | 只看该作者
电子万年历的程序怎么计算平年和闰年

使用特权

评论回复
9
geraldbetty| | 2023-6-10 15:39 | 只看该作者
做万年历时,那个月份该怎么处理?

使用特权

评论回复
10
juliestephen| | 2023-6-10 17:01 | 只看该作者
怎样用单片机做一个多功能万年历,用12864屏,不能用时钟芯片

使用特权

评论回复
11
fengm| | 2023-6-10 17:20 | 只看该作者
怎样制作万年历单片机              

使用特权

评论回复
12
chenqianqian| | 2023-6-11 22:26 | 只看该作者
没有显示吗?

使用特权

评论回复
13
mollylawrence| | 2023-6-13 21:46 | 只看该作者
基于单片机的万年历难吗              

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

385

主题

8573

帖子

11

粉丝