液晶时钟程序单片机Word格式.docx
- 文档编号:18016968
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:20
- 大小:928.93KB
液晶时钟程序单片机Word格式.docx
《液晶时钟程序单片机Word格式.docx》由会员分享,可在线阅读,更多相关《液晶时钟程序单片机Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
星期日月年
charmiao,shi,fen;
//定义秒分时变量
ucharcodetable[]="
2012-11-28Wed"
;
//voidwrite_week(charwe);
//显示星期几函数
voiddelay(uintz)
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
voiddi()//蜂鸣器响一声函数
beep=0;
delay(100);
beep=1;
voidwrite_com(ucharcom)//液晶写命令函数
LCDRS=0;
P0=com;
delay(5);
LCDEN=1;
LCDEN=0;
voidwrite_date(uchardate)//液晶写数据函数
LCDRS=1;
P0=date;
voidwrite_week(charwe)//写星期几显示函数
write_com(0x80+12);
switch(we)
{
case1:
write_date('
M'
);
delay(5);
//星期一Monday
o'
n'
break;
case2:
T'
//星期二Tuesday
u'
e'
case3:
W'
//Wednesday
d'
case4:
//Thursday
h'
case5:
F'
//星期五Friday
r'
i'
case6:
S'
//星期六Saturday
a'
t'
case7:
//星期日Sunday
default:
}
voidwrite_sfm(ucharadd,uchardate)//写时分秒函数
ucharshiwei,gewei;
shiwei=date/10;
gewei=date%10;
write_com(0x80+0x40+add);
//设置显示位置
write_date(0x30+shiwei);
//加上0x30是因为数字变成字符串需要加上0x30,看ASCII码值与字符的关系
write_date(0x30+gewei);
voidwrite_year_month_day(ucharadd,ucharday)//写年月日数函数
ucharshi,ge;
shi=day/10;
ge=day%10;
write_com(0x80+add);
write_date(0x30+shi);
write_date(0x30+ge);
voidinit()//初始化函数
ucharnum;
rd=0;
dula=0;
wela=0;
//将使能端置0以完成高脉冲
fen=0;
miao=0;
shi=0;
count=0;
//计数初始为0
init_24c02();
write_com(0x38);
//设置16*2显示,5*7点阵,8位数据接口
write_com(0x0c);
//设置开显示,不显示光标
write_com(0x06);
//写一个字符后地址指针自动加1
write_com(0x01);
//显示清0,数据指针清0
write_com(0x80);
//设置显示初始坐标
for(num=0;
num<
15;
num++)//显示年月日
write_date(table[num]);
write_com(0x80+0x40+6);
//写出时间显示部分的两个冒号
write_date(0x3a);
write_com(0x80+0x40+9);
miao=read_add
(1);
//开机上电时读取24c02IIC的数据赋值
fen=read_add
(2);
shi=read_add(3);
week=read_add(4);
//读取星期几
day=read_add(5);
//读取多少日
month=read_add(6);
year=read_add(7);
write_sfm(10,miao);
//分别送去液晶显示
write_sfm(7,fen);
write_sfm(4,shi);
write_week(week);
//开机从24c02读取的星期几数从新写入液晶显示出来
write_year_month_day(9,day);
write_year_month_day(6,month);
write_year_month_day(3,year);
//定时器初始化
TMOD=0x01;
//设置定时器0工作模式1
TH0=(65536-45876)/256;
//定时器装初值
TL0=(65536-45876)%256;
EA=1;
//开总中断
ET0=1;
//打定时器0中断
TR0=1;
//启动定时器0
voidkeyscan()//按键扫描函数
if(s1==0)
s1_num++;
//功能键按下次数记录
while(!
s1);
//按键释放确认
di();
if(s1_num==1)//只按一次按键时
TR0=0;
//关闭定时器
write_com(0x80+0x40+11);
write_com(0x0f);
//打开光标闪烁
if(s1_num==2)//第二次按下光标闪烁定位到分钟位置
write_com(0x80+0x40+8);
if(s1_num==3)//第三次按下光标闪烁定位到小时位置
write_com(0x80+0x40+5);
/**************************************
if(s1_num==4)//第三四次按下退出
s1_num=0;
//取消光标闪栎
//启动定时器使时钟开始走
***************************************/
if(s1_num==4)//光标处星期
write_com(0x80+14);
if(s1_num==5)//光标处日
write_com(0x80+10);
if(s1_num==6)//光标处月
write_com(0x80+7);
if(s1_num==7)//光标处年
write_com(0x80+4);
if(s1_num==8)//当第八次按功能键时退出光标闪烁及开始计时
if(s1_num!
=0)
if(s2==0)//增加键确认按下
if(s2==0)
s2);
if(s1_num==1)
miao++;
if(miao==60)
write_add(1,miao);
if(s1_num==2)
fen++;
if(fen==60)
write_add(2,fen);
if(s1_num==3)
shi++;
if(shi==24)
write_add(3,shi);
if(s1_num==4)//按四次功能键后光标至星期几处,可调节星期几
week++;
if(week==8)
week=1;
//写一个字符后光标会移一位,所以要重新定义光标位置
write_add(4,week);
if(s1_num==5)//光标至显示日处,可调节多少日
day++;
if(day==32)
day=1;
write_add(5,day);
if(s1_num==6)//光标至显示月处调节月份
month++;
if(month==13)
month=1;
write_add(6,month);
if(s1_num==7)
year++;
if(year==100)
year=00;
write_add(7,year);
if(s3==0)//确认减小键被按下
//按键防抖延时
s3);
miao--;
if(miao==-1)
miao=59;
fen--;
if(fen==-1)
fen=59;
shi--;
if(shi==-1)
shi=23;
if(s1_num==4)
week--;
if(week==0)
week=7;
if(s1_num==5)//光标至显示日处,可调节多少日
day--;
if(day==0)
day=31;
//光标位置移回在显示多少日的个位
month--;
if(month==0)
month=12;
year--;
if(year==-1)
year=99;
voidmain()
init();
//首先初始化各数据
while
(1)
keyscan();
//按键扫描函数
voidtimer0()interrupt1//定时器0中断服务程序
count++;
//中断次数累加,计数
if(count==20)//50微秒乘以20等于1秒
if(miao==60)//秒加到60则进位分钟
//同时秒数清0
if(fen==60)//分钟加到60则进位小时
//同时分钟清0
if(shi==24)//小时加到24则小时清0
//小时若变化则重新写入
//写入24c02存储起来,小时数的写入地址为3
//分钟若变化则重新写入
//秒若变化则重新写入
/***********************************
24C02.h头文件,将以下源代码需存为
与保存的C代码根目录下。
***********************************/
/bitwrite=0;
//写24c02的标志
//#defineucharunsignedchar
//#defineuintunsignedint
sbitsda=P2^0;
sbitscl=P2^1;
voiddelay0()
{;
voidstart()//开始信号
sda=1;
delay0();
scl=1;
sda=0;
voidstop()//停止信号
voidrespons()//应答信号
uchari=0;
while((sda==1)&
&
(i<
250))i++;
scl=0;
voidinit_24c02()//IIC初始化函数
voidwrite_byte(uchardate)//写一个字节函数
uchari,temp;
temp=date;
for(i=0;
i<
8;
i++)
temp=temp<
<
1;
sda=CY;
ucharread_byte()//读一个字节
uchari,k;
k=(k<
1)|sda;
returnk;
voidwrite_add(ucharaddress,uchardate)//指定地址写一个字节
start();
write_byte(0xa0);
respons();
write_byte(address);
write_byte(date);
stop();
ucharread_add(ucharaddress)//指定地址读一个字节
uchardate;
write_byte(0xa1);
date=read_byte();
returndate;
选择功能键时光标闪烁时:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 液晶 时钟 程序 单片机