本程序实现了基本的电子时钟功能, 初始时间为23:59:55.
#include <STC89C5xRC.H>
unsigned char code DIG_CODE[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//对应数码管显示0~9
int tcount = 0;//记录经过的2ms区间段个数
int hour = 23, minute = 59, second = 55;
void T0_INT() interrupt 1 //timer0中断, 每2ms触发一次
{
TR0 = 0;//关闭timer0
TH0 = 0xF8;
TL0 = 0x30;//65536 - 2000 = 63536 = F830H
if(tcount % 6 == 0)
{
//秒数个位
P2 = 0;//右数第一个数字亮
P0 = DIG_CODE[second % 10];
tcount ++;
}
else if(tcount % 6 == 1)
{
//秒数十位
P2 = 1 << 2;//右数第二个数字亮
P0 = DIG_CODE[second / 10];
tcount ++;
}
else if(tcount % 6 == 2)
{
//分钟个位
P2 = 2 << 2;
P0 = DIG_CODE[minute % 10];
tcount ++;
}
else if(tcount % 6 == 3)
{
//分钟十位
P2 = 3 << 2;
P0 = DIG_CODE[minute / 10];
tcount ++;
}
else if(tcount % 6 == 4)
{
//小时个位
P2 = 4 << 2;
P0 = DIG_CODE[hour % 10];
tcount ++;
}
else if(tcount % 6 == 5)
{
//小时十位
P2 = 5 << 2;
P0 = DIG_CODE[hour / 10];
tcount ++;
}
if(tcount == 500)//2ms * 500 = 1000ms = 1s -> 1s时间到
{
tcount = 0;
second ++;
if(second == 60)
{
second = 0;
minute ++;
if(minute == 60)
{
minute = 0;
hour ++;
if(hour == 24)
{
hour = 0;
}
}
}
}
TR0 = 1;//重新开启timer0
}
int main()
{
P2 = 111 << 2;
P0 = 0;//数码管全灭
TMOD = 0x01;
TH0 = 0xF8;
TL0 = 0x30;
IE = 0x82;
TR0 = 1;//开启timer0
while(1)
{
;
}
return 0;
}
关键字:电子时钟
引用地址:
基于8051实现的电子时钟(Version1.0)
推荐阅读最新更新时间:2024-10-25 13:02
基于8051实现的可启停/显示或隐藏时间的电子时钟(Version1.2)
程序实现的功能: 1. 实验箱上电后, 不显示当前时间. 2. 向8051发送 Show.E 后, 显示当前时间. 3. 向8051发送 Hide.E 后, 隐藏当前时间. 4. 向8051发送 Start.E 后, 时钟开始计时. 5. 向8051发送 Stop.E 后, 时钟停止计时(若当前处于 Show 状态, 则显示停止计时前的时间). #include STC89C5xRC.H #include string.h unsigned char code DIG_CODE = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
[单片机]
基于8051实现的电子时钟(Version1.0)
本程序实现了基本的电子时钟功能, 初始时间为23:59:55. #include STC89C5xRC.H unsigned char code DIG_CODE = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//对应数码管显示0~9 int tcount = 0;//记录经过的2ms区间段个数 int hour = 23, minute = 59, second = 55; void T0_INT() interrupt 1 //timer0中断, 每2ms触发一次 { TR0 = 0;//关闭timer0 TH0 = 0xF
[单片机]
基于8051实现的电子时钟(Version1.1)
程序实现的功能: 1. 实验箱上电后, 不显示当前时间. 2. 向8051发送 Start.E 后, 电子时钟开始工作, 并显示当前时间(时 分 秒). 3. 向8051发送 Stop.E 后, 电子时钟暂停工作, 并隐藏当前时间. #include STC89C5xRC.H #include string.h unsigned char code DIG_CODE = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//对应数码管显示0~9 char buf ;//存放收到的数据 int tcount = 0;//记录经过的
[单片机]
51单片机带闹钟可调时间的电子时钟程序设计
硬件部分 基于51单片机、 ds1302时钟芯片、 ds18b20温度芯片、 以及1602液晶显示的 实时时间 和 实时温度显示 。同时可通过按键 设置 年、月、日、时、分、星期。 并且可以设置闹钟 当闹钟时间到时 蜂鸣器持续发出 滴..声 同时led灯不停闪烁 且在一分钟内没有按指定停止按键 闹钟将自动停止 。。。 软件部分 如果网页上复制的代码不能编译可以从这里下载keil工程: http://www.51hei.com/f/dszdec.rar #include reg52.h #define uchar unsigne
[单片机]
可以调整时间的电子时钟-C语言
使用stc89c52单片机,电路很简单,采用八位共阳数码管,p0口为数码管的段选,p2口为位选. 通过key1-key3来调整时间 重点: 1、函数的模块化 2、中断 #include reg52.h #define uchar unsigned char #define uint unsigned int sbit p2_0=P2^0; sbit p2_1=P2^1; sbit p2_2=P2^2; sbit p2_3=P2^3; sbit p2_4=P2^4; sbit p2_5=P2^5; sbit p2_6=P2^6; sbit p2_7=P2^7; sbit key0=P3^2; sbit key1=P3^3; sb
[单片机]
8051单片机的UART0串口初始化
1、C8051f的UART0是异步、全双工串口。其波特率发生器规定由定时器1定时器提供。可配置为8位UART或9位UART(多机通讯第九位用于片选作用)。SYSCLK=24.5MHZ(我的板子采用内部晶振频率作为系统时钟) BAUDRATE=115200(波特率) 2、初值TH1 Tl1配置 由上述公式可计算初值:TH1 = 256-(SYSCLK/BAUDRATE/2)而程序内是TH1 = -(SYSCLK/BAUDRATE/2),这两种是相同的。第一种是以正数的二进制形式保存在计算机内。第二种是负数,取反加1求得补码保存在计算机中。结果是相同的。每当TL1中的值溢出后 TH1存储的重装载值装载到TL1中开始计数。
[单片机]
C8051f300_UART0串口发送初始化
1、C8051f的UART0是异步、全双工串口。其波特率发生器规定由定时器1 定时器提供。可配置为8位UART或9位UART(多机通讯第九位用于片选作用)。SYSCLK=24.5MHZ(我的板子采用内部晶振频率作为系统时钟) BAUDRATE=115200(波特率) 2、初值TH1 Tl1配置 由上述公式可计算初值: TH1 = 256-(SYSCLK/BAUDRATE/2)而程序内是TH1 = -(SYSCLK/BAUDRATE/2),这两种是相同的。第一种是以正数的二进制形式保存在计算机内。第二种是负数,取反加1求得补码保存在计算机中。结果是相同的。每当TL1中的值溢出后 TH1存储的重装载值装载到TL1中开始计数。
[单片机]