各位小伙伴们大家好,我是奕轩君,今天分享的是如何利用51单片机开发电子时钟!
- 硬件部分
51单片机*1
LCD1602 *1
杜邦线 *若干
LCD我就不具体介绍了,还有程序代码量比较大,具体程序注释!请参考本人发的LCD1602那篇文章!
- 软件部分
#include "reg52.h"//C预处理头文件
unsigned char str[]={"0123456789"};
unsigned char str1[]={"Clock_"};
unsigned char str2[]={"CSDN_YXJ"};//定义字符串
unsigned int num=0;
unsigned char hour=12,min=4,sec=0;//定义,时,分,秒
sbit RS=P3^0;
sbit RW=P3^1;
sbit E=P3^2;//位定义
void delay(unsigned int n)//大约延时1ms函数
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)
{
for(j=0;j<115;j++);
}
}
void writedat(unsigned char dat)//写数据
{
RS=1;
RW=0;
E=0;
P2=dat;
delay(5);
E=1;
E=0;
}
void writecom(unsigned char com)//写参数
{
RS=0;
RW=0;
E=0;
P2=com;
delay(5);
E=1;
E=0;
}
void initlcd()//设置lcd初始化
{
writecom(0x38);
writecom(0x38);
writecom(0x0c);
writecom(0x06);
writecom(0x01);
}
void inittimer()//定时器函数
{
TMOD=0x01;
TF0=0;
TR0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//设置定时器初始值,记时50ms
ET0=1;
EA=1;
}
void display()//显示函数
{
unsigned char wei1=0,wei2=0,wei3=0,wei4=0,wei5=0,wei6=0;//位定义,共6位
unsigned int i=0,j=0;
wei1=hour/10;
wei2=hour%10;
wei3=min/10;
wei4=min%10;
wei5=sec/10;
wei6=sec%10;
writecom(0x80+0x04);
delay(5);
while(str2[j]!='\0')
{
writedat(str2[j]);
delay(5);
j++;
}
writecom(0x80+0x41);
while(str1[i]!='\0')
{
writedat(str1[i]);
delay(5);
i++;
}
delay(5);
writedat(str[wei1]);
delay(5);
writedat(str[wei2]);
delay(5);
writedat(':');
delay(5);
writedat(str[wei3]);
delay(5);
writedat(str[wei4]);
writedat(':');
delay(5);
writedat(str[wei5]);
delay(5);
writedat(str[wei6]);
delay(5);
}
void main()//主函数
{
inittimer();
initlcd();
while(1)
{
display();
}
}
void inittimer_isr() interrupt 1 //中断服务函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)//20*50ms=1S ,延时1秒
{
sec=sec+1;
num=0;
}
if(sec==60)
{
min=min+1;
sec=0;
}
if(min==60)
{
hour=hour+1;
min=0;
}
if(hour==24)
{
hour=0;
}
}
仿真效果图
谢谢大家收看!