51单片机-1602液晶显示的时钟代码
2017-08-08 21:24
429 查看
单片机小白,初学单片机,利用51单片机简单的编写了基于1602显示的时钟程序,技术不好,可能会有许多不好的地方,希望大神指正
基本功能:时钟显示,利用按键调时,分#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit en=P3^4;
sbit rs=P3^5;
sbit rw=P3^6;
sbit s2=P3^0;
sbit s3=P3^1;
sbit s4=P3^2;
sbit s5=P3^3;
uchar shi,fen,miao,num,num1=0,num2=0,num3=0,flag;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void busy()
{
uchar busy;
P0=0xff;
rs=0;
rw=1;
do
{
en=1;
busy=P0;
en=0;
}while(busy & 0x80);//取最高位
}
void write_com(uchar com)
{
busy();
rs=0;
rw=0;
P0=com;
en=1;
en=0;
}
void write_date(uchar date)
{
busy();
rs=1;
rw=0;
P0=date;
en=1;
en=0;
}
void display(uchar num,weizhi)
{
uchar shi,ge;
shi=num/10;
ge=num%10;
write_com(0x80+0x03+weizhi);
write_date(0x30+shi);
write_date(0x30+ge);
}
void init()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);//清屏
write_com(0x80|0x07);
write_date(':');
write_com(0x80|0x0a);
write_date(':');
display(0,2);
display(0,5);
display(0,8);
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=0;
}
void keyscan()
{
if(s5==0)
{
delay(10);
if(s5==0)
{
while(!s5);
TR0=~TR0;
}
}
if(s3==0)
{
delay(10);
if(s3==0)
{
num2++;
if(num2==60)
num2=0;
display(num2,5);
while(!s3);
}
}
if(s2==0)
{
delay(10);
if(s2==0)
{
num3++;
if(num3==24)
num3=0;
display(num3,2);
while(!s2);
}
}
}
void main()
{
init();
while(1)
{
keyscan();
}
}
void time0() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
if(num==20)
{
num=0;
num1++;
}
display(num1,8);
if(num1==60)
{
num1=0;
num2++;
if(num2==60)
{
num2=0;
num3++;
if(num3==24)
{
num3=0;
}
display(num3,2);
}
display(num2,5);
}
}
基本功能:时钟显示,利用按键调时,分#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit en=P3^4;
sbit rs=P3^5;
sbit rw=P3^6;
sbit s2=P3^0;
sbit s3=P3^1;
sbit s4=P3^2;
sbit s5=P3^3;
uchar shi,fen,miao,num,num1=0,num2=0,num3=0,flag;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void busy()
{
uchar busy;
P0=0xff;
rs=0;
rw=1;
do
{
en=1;
busy=P0;
en=0;
}while(busy & 0x80);//取最高位
}
void write_com(uchar com)
{
busy();
rs=0;
rw=0;
P0=com;
en=1;
en=0;
}
void write_date(uchar date)
{
busy();
rs=1;
rw=0;
P0=date;
en=1;
en=0;
}
void display(uchar num,weizhi)
{
uchar shi,ge;
shi=num/10;
ge=num%10;
write_com(0x80+0x03+weizhi);
write_date(0x30+shi);
write_date(0x30+ge);
}
void init()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);//清屏
write_com(0x80|0x07);
write_date(':');
write_com(0x80|0x0a);
write_date(':');
display(0,2);
display(0,5);
display(0,8);
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=0;
}
void keyscan()
{
if(s5==0)
{
delay(10);
if(s5==0)
{
while(!s5);
TR0=~TR0;
}
}
if(s3==0)
{
delay(10);
if(s3==0)
{
num2++;
if(num2==60)
num2=0;
display(num2,5);
while(!s3);
}
}
if(s2==0)
{
delay(10);
if(s2==0)
{
num3++;
if(num3==24)
num3=0;
display(num3,2);
while(!s2);
}
}
}
void main()
{
init();
while(1)
{
keyscan();
}
}
void time0() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
if(num==20)
{
num=0;
num1++;
}
display(num1,8);
if(num1==60)
{
num1=0;
num2++;
if(num2==60)
{
num2=0;
num3++;
if(num3==24)
{
num3=0;
}
display(num3,2);
}
display(num2,5);
}
}
相关文章推荐
- 51单片机配合超声波测距以及用1602液晶进行显示
- 电子时钟(51单片机定时器,1602液晶)
- 51单片机 1602液晶显示
- 51单片机入门之六:1602液晶显示
- DS1602液晶显示程序代码
- c语言通过89C51驱动1602液晶显示(入门级别)
- 12.9 1602液晶简单显示程序
- 测试时钟显示程序通过, 点阵显示 碰到一些困难 发现调试比写代码更纠结。代码没错 烧到板子里就是打不到想要的现象
- Arduino入门笔记(5):1602液晶实验(实现时钟)
- 一个网页上随鼠标移动显示时钟的javascript 代码
- [51单片机] 1602液晶显示控制代码2
- 1602液晶滚动显示
- js实现Form栏显示全格式时间时钟效果代码
- STC单片机之1602显示时钟
- 51单片机 时钟程序设计 数码管可闪烁显示数值
- 基于DS1302芯片---使用51单片机C语言编制的电子时钟(液晶1602显示)
- js实现Form栏显示全格式时间时钟效果代码
- 1602液晶显示实验报告
- PCF8591 1602液晶显示
- 1602液晶移动显示