⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 用proteus仿真的万年历.rar
💻 C
字号:
/***************************************************
* 标题:万年历                                     *
* 作者:Wujieflash                                 *
* 日期:2008年1月13日                              *
* 说明:包含文件<ziku.h>,<lcd_init.h>              *
***************************************************/
#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();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -