📄 fun.c
字号:
//文件名:fun.c
//文件包括:液晶模块的初始化子程序,写命令子程序,写数据子程序,按键扫描子程序,延时子程序,刷新时间子程序
//头文件
#include<config.h>
//延时1ms子程序程序
void Delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
//写命令子程序
void Write_com(uchar com)
{
RS=0;
RW=0;
Lcd_en=0;
P0=com;
Delay(5);
Lcd_en=1;
Delay(5);
Lcd_en=0;
}
//写数据子程序
void Write_data(uchar dat)
{
RS=1;
RW=0;
Lcd_en=0;
P0=dat;
Delay(5);
Lcd_en=1;
Delay(5);
Lcd_en=0;
}
/*
//读数据子程序
char Read_Data(void)
{
RS=1;
RW=1;
Lcd_en=0;
Delay(5);
Lcd_en=1;
Lcd_data=P0;
return(Lcd_data);
}
*/
//初始化子程序
//将开机要显示的内容和某些寄存器的处置全部初始化
void Initiate(void)
{
num=0;
temp=0;
// uchar t;
year=2008;
mon=5;
day=9;
we=5;
hour=8;
min=50;
sec=00;
SET_flag=0;
Lcd_en=0;
Write_com(0x38); //设置显示模式
Write_com(0x0c); //开显示,不显示光标
Write_com(0x06); //设置地址指针移动方式,每写一个字符后地址指针加1
Write_com(0x01); //显示清零,必须清零,否则液晶屏上会显示黑块
Write_com(0x80); //设置数据地址指针为第一行
for(t=0;t<16;t++)
{
Write_data(table[t]); //显示液晶第一行
Delay(5);
}
Write_com(0x80+0x40); //设置数据地址指针为第二行
for(t=0;t<16;t++)
{
Write_data(table1[t]); //显示液晶第二行
Delay(5);
}
TMOD=0x01;
TH0=(65536-50000)/256; //定时器计数器定时50ms
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
//刷新时间子程序
void Write_Time(uchar add,uchar dat)
{
uchar shi,ge;
shi=dat/10;
ge=dat%10;
Write_com(0x80+0x40+add); //设置数据地址指针
Write_data(0x30+shi); //刷新时间的十位
Write_data(0x30+ge); //刷新时间的个位
}
//刷新日期子程序
void Write_Date(uchar add,uchar dat)
{
uchar shi,ge;
shi=dat/10;
ge=dat%10;
Write_com(0x80+add); //设置数据地址指针
Write_data(0x30+shi); //刷新日期的十位
Write_data(0x30+ge); //刷新日期的个位
}
//刷新年子程序
void Write_Year(uchar add,int dat)
{
uchar qian,bai,shi,ge;
qian=dat/1000;
bai=dat/100%10;
shi=dat/10%10;
ge=dat%10;
Write_com(0x80+add); //设置数据地址指针
Write_data(0x30+qian); //刷新日期的十位
Write_data(0x30+bai); //刷新日期的个位
Write_data(0x30+shi); //刷新日期的十位
Write_data(0x30+ge); //刷新日期的个位
}
//键盘扫描子程序
void Key_scan(void)
{
if(SET==0)
{
Delay(5);
if(SET==0)
{
while(!SET);
SET_flag=1;
temp++;
if(temp==8)
{
temp=0;
SET_flag=0;
Write_com(0x0c); //光标不再闪烁
}
}
}
}
//
void Key_process(void)
{
TR0=0;
// Key_scan();
switch(temp)
{
case 1:
Write_com(0x80+0x40+9); //设置数据地址指针到秒钟的位置
Write_com(0x0f);
Up_key();
Down_key();
break;
case 2:
Write_com(0x80+0x40+6); //设置数据地址指针到分钟的位置
Up_key();
Down_key();
break;
case 3:
Write_com(0x80+0x40+3); //设置数据地址指针到时钟的位置
Up_key();
Down_key();
break;
case 4:
Write_com(0x80+15); //设置数据地址指针到星期的位置
Up_key();
Down_key();
break;
case 5:
Write_com(0x80+11); //设置数据地址指针到日的位置
Up_key();
Down_key();
break;
case 6:
Write_com(0x80+8); //设置数据地址指针到月的位置
Up_key();
Down_key();
break;
case 7:
Write_com(0x80+3); //设置数据地址指针到年的位置
Up_key();
Down_key();
break;
default:break;
}
TR0=1;
}
//加调节键按键扫描程序
void Up_key(void)
{
if(value_up==0)
{
Delay(5);
if(value_up==0)
{
while(!value_up);
switch(temp)
{
case 1:
// Write_com(0x80+9);
// sec=Read_Data();
sec++;
if(sec==60)
sec=0;
Write_Time(9,sec);
Write_com(0x80+0x40+9);
break;
case 2:
min++;
if(min==60)
min=0;
Write_Time(6,min);
Write_com(0x80+0x40+6);
break;
case 3:
hour++;
if(hour==24)
hour=0;
Write_Time(3,hour);
Write_com(0x80+0x40+3);
break;
case 4:
we++;
if(we==8)
we=1;
Write_com(0x80+15);
Write_data(0x30+we);
break;
case 5:
day++;
if(day==31)
day=1;
Write_Date(11,day);
Write_com(0x80+11);
break;
case 6:
mon++;
if(mon==12)
mon=0;
Write_Date(8,mon);
Write_com(0x80+8);
break;
case 7:
year++;
if(year==10000)
year=0000;
Write_Year(3,year);
break;
default:break;
}
}
}
}
//减调节键按键扫描程序
void Down_key(void)
{
if(value_down==0)
{
Delay(5);
if(value_down==0)
{
while(!value_down);
switch(temp)
{
case 1:
sec--;
if(sec==-1)
sec=59;
Write_Time(9,sec);
Write_com(0x80+0x40+9);
break;
case 2:
min--;
if(min==-1)
min=59;
Write_Time(6,min);
Write_com(0x80+0x40+6);
break;
case 3:
hour--;
if(hour==-1)
hour=23;
Write_Time(3,hour);
Write_com(0x80+0x40+3);
break;
case 4:
we--;
if(we==-1)
we=7;
Write_com(0x80+15);
Write_data(0x30+we);
break;
case 5:
day--;
if(day==-1)
day=31;
Write_Date(11,day);
Write_com(0x80+11);
break;
case 6:
mon--;
if(mon==-1)
mon=12;
Write_Date(8,mon);
Write_com(0x80+8);
break;
case 7:
year--;
if(year==-1)
year=9999;
Write_Year(3,year);
break;
default:break;
}
}
}
}
/*
void Key_scan(void)
{
if(SET==0)
{
Delay(5);
if(SET==0)
{
temp++;
while(!SET);
if(temp==1)
{
TR0=0; //当功能键有效时,定时器计数器停止计数
Write_com(0x80+0x40+9); //设置数据地址指针到秒钟的位置
Write_com(0x0f);
}
if(temp==2)
{
Write_com(0x80+0x40+6); //设置数据地址指针到分钟的位置
}
if(temp==3)
{
Write_com(0x80+0x40+3); //设置数据地址指针到时钟的位置
}
if(temp==4)
{
temp=0;
Write_com(0x0c); //光标不再闪烁
TR0=1;
}
}
}
if(temp!=0)
{
if(value_up==0)
{
Delay(5);
if(value_up==0)
{
while(!value_up);
if(temp==1)
{
sec++;
if(sec==60)
sec=0;
Write_Time(9,sec);
Write_com(0x80+0x40+9);
}
if(temp==2)
{
min++;
if(min==60)
min=0;
Write_Time(6,min);
Write_com(0x80+0x40+6);
}
if(temp==3)
{
hour++;
if(hour==24)
hour=0;
Write_Time(3,hour);
Write_com(0x80+0x40+3);
}
}
}
if(value_down==0)
{
Delay(5);
if(value_down==0)
{
while(!value_down);
if(temp==1)
{
sec--;
if(sec==-1)
sec=59;
Write_Time(9,sec);
Write_com(0x80+0x40+9);
}
if(temp==2)
{
min--;
if(min==-1)
min=59;
Write_Time(6,min);
Write_com(0x80+0x40+6);
}
if(temp==3)
{
hour--;
if(hour==-1)
hour=23;
Write_Time(3,hour);
Write_com(0x80+0x40+3);
}
}
}
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -