1602时钟
来源:互联网 发布:世界海洋污染现状数据 编辑:程序博客网 时间:2024/05/20 00:12
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^0; //定义RS口为P10
sbit rw=P2^1; //定义RW口为P11
sbit en=P2^2; //定义E口为P12
sbit key_set=P3^3;
sbit key_up=P3^4;
sbit key_down=P3^5;
uchar code table[]="AUTOMATIC";
uchar code table1[]="NUMBER 18";
uchar code table2[]="2011/3/6 SUNDAY";
uchar code table3[]="00:00:00";
uchar num,aa,sec,min,hou,key_num;
void delay(uint z)
{
uint x,y;
for (x=z;x>0;x--)
{
for(y=250;y>0;y--);
}
}
void write_dat(uchar); //写数据子程序
void write_com(uchar); // 写程序子程序
void init();
void display_2(uchar add,uchar acc); //时分秒显示子程序
void keyscan() //时间调节程序
{
if(key_set==0)
{
delay(5);
if(key_set==0)
{
while(!key_set);
key_num++;
if(key_num==1)
{
TR0=0;
write_com(0x80+0x40+11);
write_com(0x0f);
}
if(key_num==2)
{
write_com(0x80+0x40+8);
}
if(key_num==3)
{
write_com(0x80+0x40+5);
}
if(key_num==4)
{
key_num=0;
write_com(0x0c);
TR0=1;
}
}
}
if(key_num!=0)
{
if(key_up==0)
{
delay(5);
if(key_up==0)
{
while(!key_up);
if(key_num==1)
{
sec++;
if(sec==60)
sec=0;
display_2(10,sec);
write_com(0x80+0x40+11);
}
if(key_num==2)
{
min++;
if(min==60)
min=0;
display_2(7,min);
write_com(0x80+0x40+8);
}
if(key_num==3)
{
hou++;
if(hou==24)
hou=0;
display_2(4,hou);
write_com(0x80+0x40+5);
}
}
}
if(key_down==0)
{
delay(5);
if(key_down==0)
{
while(!key_down);
if(key_num==1)
{
sec--;
if(sec==-1)
sec=59;
display_2(10,sec);
write_com(0x80+0x40+11);
}
if(key_num==2)
{
min--;
if(min==-1)
min=59;
display_2(7,min);
write_com(0x80+0x40+8);
}
if(key_num==3)
{
hou--;
if(hou==-1)
hou=23;
display_2(4,hou);
write_com(0x80+0x40+5);
}
}
}
}
}
void main()
{
init();
while(1)
{
keyscan();
if(aa==20)
{
aa=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hou++;
if(hou==24)
{
hou=0;
}
display_2(4,hou);
}
display_2(7,min);
}
display_2(10,sec);
}
}
}
void write_com(uchar com) //写程序子程序
{
rs=0;
en=1;
P1=com;
delay(5);
en=1;
delay(5);
en=0;
}
void write_dat(uchar dat) //写数据子程序
{
rs=1;
en=1;
P1=dat;
delay(5);
en=1;
delay(5);
en=0;
}
void init()
{
rw=0;
en=0;
write_com(0x38); // 显示模式设置
write_com(0x0c); // 光标控制设置 开关 闪烁
write_com(0x06); // 光标控制设置 自动左移
write_com(0x80); // 数据指针位置复位
write_com(0x01); // 显示清屏
for(num=0;num<14;num++) //显示作者
{
write_dat(table[num]);
delay(1);
}
write_com(0x80+0x40);
for(num=0;num<15;num++)
{
write_dat(table1[num]);
delay(1);
}
delay(100);
write_com(0x01);
for(num=0;num<16;num++)
{
write_dat(table2[num]);
delay(1);
}
write_com(0x80+0x40);
for(num=0;num<12;num++)
{
write_dat(table3[num]);
delay(1);
}
TMOD=0x01; //初始化定时器
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void display_2(uchar add,uchar acc) //时分秒显示子程序
{
uchar shi,ge;
shi=acc/10;
ge=acc%10;
write_com(0x80+0x40+add);
write_dat(0x30+shi);
write_dat(0x30+ge);
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
- 1602时钟
- 1602时钟
- STC89C51时钟 1602显示
- 时钟
- 时钟
- 时钟
- 时钟
- 时钟
- 时钟
- 时钟
- 时钟
- 时钟
- 时钟
- 时钟
- 时钟
- 时钟
- 时钟
- 时钟
- 【转】oracle 字符集乱码解决-.Net 中读写Oracle数据库常用两种方式:OracleClient和OleDb
- BaseAdapter使用
- 设计一个类似与ipcs与ipcrm的程序ipcmsg
- 基本的线程实例(delphiXE)
- 地理编码服务 GeoCode Service
- 1602时钟
- Recovery刷机图文教程
- 《代码大全》学习-第2章 用隐喻来更充分地理解软件开发
- 百万级PHP站点Poppen.de的技术架构
- [javaws]jnlp介绍及使用
- ARM寄存器介绍
- asp.net前台页面数据绑定----对象类表绑定
- android开发学习资料
- 通过各集合类的特点,选择最佳的使用情境【篇二】