📄 万年历.c
字号:
// cpu at89s52 Focs=11.0592MHz
#include<reg52.h> //头文件
#define uchar unsigned char
#define uint unsigned int
#define DATA P0 //定义P0口为数据总线
sbit rs= P2^0; //* rs=1 display RAM data;rs=0 instruction */
sbit rw= P2^1; //* rw=1,e=1,cs=1,read ;rw=0,e=0,cs=1,write */
sbit psb= P2^3; //*PSB=1,模式并口12864液晶(自带汉字库)*/
sbit ret= P2^5; //定义P2^5为液晶复位线
sbit E= P2^2; //定义为液晶的控制线
sbit q=P3^5; //定义P3^5为DS18B20的数据口线
uchar jp=0xa3; //液晶显示数字的地址编码高字节
uint num; //存放测得的温度值的变量定义
uchar hc[]={0,0}; //温度显示缓冲区
uint year=2007; //年月日变量定义
uchar month=1,day=1; //年月日变量定义
uchar yr1,yr2,mh1,mh2,dy1,dy2; // 处理年月日数据的变量定义
uchar second,minite,hour; //时分秒变量定义
uchar jsd1,jsd2,jme1; // 处理时钟数据的变量定义
uchar jme2,jhr1,jhr2; // 处理时钟数据的变量定义
uchar mss,mse,mil; //跑表变量定义
uchar pmss1,pmss2,pmse1; // 处理跑表数据的变量定义
uchar pmse2,pmil1,pmil2; //处理跑表数据的变量定义
uchar v; //定义年月日 时钟 跑表模式选择变量
uchar kk; //年月日与时钟模式选择变量定义
uchar i; //软件延时计数器变量定义
uchar *p; //定义指向显示缓冲区的指针变量
uchar counter; //定义定时器0定时计数器变量
uchar tt; //定义定时器1定时计数器变量
uchar mp=0xa1; //液晶显示"-"的高字节
uchar code MA[]={0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9}; //液晶显示数字的地址编码低字节
uchar pp[]={0,0,0,0,0,0}; //显示缓冲数组
uchar yf[]={32,29,32,31,32,31,32,32,31,32,31,32}; //月份数组
void delay(uchar ms); //软件延时子程序
void lcd_int(void); //实现对液晶复位,8位数据模式选择子程序
void Wrir(uchar com); //向LCD发送控制命令
void Wrda(uchar da); //向LCD发送数据命令
void Init_Lcd(void); //液晶初始化
void clearlcd(void); //液晶清屏
void Busy(void); //判液晶是否在忙子程序
void delay0(uint d); //软件延时子程序
void CL_data(uint i,uchar *z); //温度数据处理子程序
void Display(void); //液晶上显示实测温度子程序
void int_18b20(void); //初始化18b20子程序
void yingda(); //接收18b20应答信号子程序
void wrone(uchar da); //写给18b20一字节数据子程序
uint chuli18b20(void); //测温子程序
uchar rdone(void); //读取18b20一字节数据子程序
void zh_0(void); //时钟数据处理子程序
void zh_1(void); //年月日数据处理子程序
void zh_2(void); //跑表数据处理子程序
void display_0(uchar k,uchar *q); //液晶上显示时钟子程序
void display_1(uchar a,uchar *u); //液晶上显示年月日子程序
void display_y(void); //液晶上显示时钟 年月日 跑表三模式选择子程序
void wd(); //实测温度并在液晶上显示测得的温度值子程序
void process(void); //时钟 年月日 跑表三模式数据处理 显示子程序
void key1(void); //对年月日,时钟调整,起动时钟子程序
void key2(void); //实现对跑表暂停,清零,跑表调整子程序
void key_y(void); //实现进入时钟调整模式,年月日,时钟,跑表三种模式的选择
void ch(); //定时器初始化子程序
uchar keyscan(void); //动态扫描键盘子程序
/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :万年历
** 调试说明 :
*********************************************************************************************************
*/
void main(void)
{
ch(); //定时器初始化
lcd_int(); //复位与数据模式选择
Init_Lcd(); //液晶初始化
while(1)
{
key_y(); //一直调键扫
}
}
/*
*********************************************************************************************************
** 函数名称 :zh_0()
** 函数功能 :时钟数据处理子程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void zh_0(void)
{
pp[5]=jsd1; //秒个位
pp[4]=jsd2; //秒十位
pp[3]=jme1; //分个位
pp[2]=jme2; //分十位
pp[1]=jhr1; //时个位
pp[0]=jhr2; //分十位
}
/*
*********************************************************************************************************
** 函数名称 :zh_1()
** 函数功能 :年月日数据处理子程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void zh_1(void)
{
pp[1]=yr1;pp[0]=yr2;pp[3]=mh1;pp[2]=mh2;pp[5]=dy1;pp[4]=dy2;
}
/*
*********************************************************************************************************
** 函数名称 :zh_2()
** 函数功能 :跑表数据处理子程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void zh_2(void)
{
pp[5]=pmss1;pp[4]=pmss2;pp[3]=pmse1;pp[2]=pmse2;pp[1]=pmil1;pp[0]=pmil2;
}
/*
*********************************************************************************************************
** 函数名称 :delay(uchar ms)
** 函数功能 :延时
** 入口参数 :ms
** 出口参数 :无
*********************************************************************************************************
*/
void delay(uchar ms)
{
while(ms--)
{
for(i=120;i>0;i--); //软件延时
}
}
/*
*********************************************************************************************************
** 函数名称 :display_0(uchar k,uchar *q)
** 函数功能 :液晶上显示时钟与跑表
** 入口参数 :uchar k,uchar *q
** 出口参数 :无
*********************************************************************************************************
*/
void display_0(uchar k,uchar *q)
{
uchar l,j;
Wrir(k); //送显示开始地址
for(l=0;l<2;l++)
{
for(j=0;j<2;j++)
{
Wrda(jp);
Wrda(MA[*q]);
q++;
}
Wrda(mp);
Wrda(0xaa); //显示"-"
}
for(j=0;j<2;j++)
{
Wrda(jp);
Wrda(MA[*q]);
q++;
}
}
/*
*********************************************************************************************************
** 函数名称
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -