前言
整理代码的时候发现之前写的一个单片机(STC89C51)代码,主要是利用3个中断源(计时中断,外部中断),蜂鸣器,8个LED灯,独立按键(矩阵按键)以及8片阴极数码管完成一个数字电子时钟,并且具有调分钟数(+,-),调小时数(+,-),报警的功能。贴上来(代码很乱,emm不想改了,不过跑是没问题的2333
设计
-
给两个中断
一,时间处理中断时间每秒刷新一下数码管
二,中断按键1 设置时间 中断按键2 退出设置时间 -
按键控制
按键1 时针+1
按键2 时针-1
按键3 分针+1
按键4 分针-1 -
当时间的table运行到某个状态的时候报警(led闪烁5秒 可以配合着时间中断进行变化)
C51程序代码:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
/*
32 -- 25
33 -- 24
s23:hour+1
s17:hour-1
s10:minute+1
s5:minute-1
s6:set timer
s11:exit set
*/
sbit led_en = P1^2;
sbit lcd_en = P1^7;
sbit line_en = P1^3;
sbit wei = P1^1;
sbit duan = P1^0;
sbit wengmingqi = P3^7;
sbit KEY1 = P2^4;
sbit KEY2 = P2^5;
uint table1[] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //0~9,- 段码
uint table2[] = {
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位码
uint time_table[] = {
1,2,10,0,0,10,0,0}; //12-00-00 当前时间
uint time_tag_table[] = {
1,2,10,0,0,10,0,4}; //12-10-00 目标事件时间
uint led_table[2]={
0xff,0xfe}; //led亮灭
int second=0,minute=0,ho