利用51单片机制作的电子时钟
2015-05-29 21:56
344 查看
最近研究起来了单片机,用的是国产STC98C52芯片。
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
买了很长时间了可是一直在那里放着,今天重新拿出来写了一段电子时钟的C++程序,利用充电宝供电,当作电子时钟挺不错的。
功能:
4个七段数码管作为时钟显示的主体两个显示小时,两个显示分钟,8个LED灯作为秒数的闪烁,4个独立按键分别为hour+1,hour+10,minute+1,minute+10。
查询LED电路,接入端为P1^0到P1^7。
数码管采用了驱动芯片,接入端为P2^0到P2^3。
按键的接入端如图所示。
有了各种电路的接入端,我们利用keil进行编程。
/*
* Copyright (c) 2015,烟台大学计算机学院
* All right reserved.
* 作者:邵帅
* 文件:temp.c
* 完成时间:2015年05月29日
*/
#include <reg52.h>
#define uchar unsigned char
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
sbit key1=P3^5;//按键
sbit key2=P3^4;
sbit key3=P3^3;
sbit key4=P3^2;
static unsigned char second,minute,hour;
unsigned int tcount;
unsigned char m;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90};
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display()
{
P0=table[hour/10];
P2_0 = 0;
delay(5);
P2_0 = 1;
P0=(table[hour%10]& 0x7f);
P2_1 = 0;
delay(5);
P2_1 = 1;
P0=table[minute/10];
P2_2 = 0;
delay(5);
P2_2 = 1;
P0=table[minute%10];
P2_3 = 0;
delay(5);
P2_3 = 1;
}
void main(void)
{
unsigned int a;
TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(key1==0)
{
if(key1==0) //确认按键被按下
{
while(!key1);//松手检测
hour++;
}
}
if(key2==0)
{
if(key2==0)
{
while(!key2);
hour=hour+10;
}
}
if(key3==0)
{
if(key3==0)
{
while(!key3);
minute++;
}
}
if(key4==0)
{
if(key4==0)
{
while(!key4);
minute=minute+10;
}
}
for(a=100;a>0;a--)
{
display();
}
}
}
void t0(void) interrupt 1 using 0
{
tcount++;
if(tcount==4000)
{tcount=0;
second++;
if(second==60)
{second=0;
minute++;
if(minute==60)
{minute=0;
hour++;
if(hour==24)
{hour=0;
}
}
}
P1=~P1;
}
}
打包成hex文件,进行烧录。
运行单片机!
本来计划使用小米的盒子当外壳的,后来发现盒子有点小,就先裸机了,反正5V电不着~
@ Mayuko
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
买了很长时间了可是一直在那里放着,今天重新拿出来写了一段电子时钟的C++程序,利用充电宝供电,当作电子时钟挺不错的。
功能:
4个七段数码管作为时钟显示的主体两个显示小时,两个显示分钟,8个LED灯作为秒数的闪烁,4个独立按键分别为hour+1,hour+10,minute+1,minute+10。
查询LED电路,接入端为P1^0到P1^7。
数码管采用了驱动芯片,接入端为P2^0到P2^3。
按键的接入端如图所示。
有了各种电路的接入端,我们利用keil进行编程。
/*
* Copyright (c) 2015,烟台大学计算机学院
* All right reserved.
* 作者:邵帅
* 文件:temp.c
* 完成时间:2015年05月29日
*/
#include <reg52.h>
#define uchar unsigned char
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
sbit key1=P3^5;//按键
sbit key2=P3^4;
sbit key3=P3^3;
sbit key4=P3^2;
static unsigned char second,minute,hour;
unsigned int tcount;
unsigned char m;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90};
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display()
{
P0=table[hour/10];
P2_0 = 0;
delay(5);
P2_0 = 1;
P0=(table[hour%10]& 0x7f);
P2_1 = 0;
delay(5);
P2_1 = 1;
P0=table[minute/10];
P2_2 = 0;
delay(5);
P2_2 = 1;
P0=table[minute%10];
P2_3 = 0;
delay(5);
P2_3 = 1;
}
void main(void)
{
unsigned int a;
TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(key1==0)
{
if(key1==0) //确认按键被按下
{
while(!key1);//松手检测
hour++;
}
}
if(key2==0)
{
if(key2==0)
{
while(!key2);
hour=hour+10;
}
}
if(key3==0)
{
if(key3==0)
{
while(!key3);
minute++;
}
}
if(key4==0)
{
if(key4==0)
{
while(!key4);
minute=minute+10;
}
}
for(a=100;a>0;a--)
{
display();
}
}
}
void t0(void) interrupt 1 using 0
{
tcount++;
if(tcount==4000)
{tcount=0;
second++;
if(second==60)
{second=0;
minute++;
if(minute==60)
{minute=0;
hour++;
if(hour==24)
{hour=0;
}
}
}
P1=~P1;
}
}
打包成hex文件,进行烧录。
运行单片机!
本来计划使用小米的盒子当外壳的,后来发现盒子有点小,就先裸机了,反正5V电不着~
@ Mayuko
相关文章推荐
- 命令中的特殊字符
- 话说物联网操作系统
- 第13周-多态性--项目0-课后实践·阅读程序2.
- 利用51单片机制作的电子时钟
- windows配置redmine
- 【架构师之旅】ITOO框架总结
- SharePoint 部署解决方案Feature ID冲突
- 零基础学习hadoop到上手工作线路指导(初级篇)
- 第十三周阅读项目(纯虚构函数)
- MySQL 数据库性能优化之缓存参数优化
- SharePoint 部署解决方案Feature ID冲突
- setTimeout的异步
- MYSQL 日期函数大全
- Word Amalgamation(hdoj1113)
- http://www.zhihuishi.com/class/1
- Git学习笔记之Git常用命令
- Matlab 常用命令记录
- zookeeper伪分布式集群搭建
- Subline Text 使用技巧
- ScrollView+ListView滚动冲突,没有滑动效果 解决办法