51单片机--数字电子时钟(单片机基础应用)

前言

整理代码的时候发现之前写的一个单片机(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
评论 189
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胡同的诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值