STC15系列单片机学习笔记——扫描频率可改变的电子钟

这篇博客详细介绍了如何使用STC15系列单片机设计一个数字钟,该钟可以通过按键调节扫描频率,提供8个不同等级的扫描速度。作者分析了源代码,包括头文件导入、变量定义、数码管和LED灯的控制、转换函数、按键操作以及时间自增的实现,同时提到了如何设置定时器初始值来确保精准计数。
摘要由CSDN通过智能技术生成

1.单片机外观图
在这里插入图片描述

2.相关原理图
在这里插入图片描述
3.案例目的
数字钟是通过计数模拟时钟,将计数值转换成时间形式,以格式时-分-秒在LED数码管上进行显示,并通过按键调节扫描频率,该实验分8个等级,通过对应8个二极管从左至右指示扫描频率越来越高的8中扫描频率。

4.源代码片段分析
4.1 导入头文件以及变量定义

#include<STC15F2K60S2.H>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit led_sel=P2^3;//发光二极管的负极
sbit key1= P3 ^2; //控制数码管扫描频率

/*---------变量定义---------*/
//七段码(段选),0-9
uchar duanxuan[] = {
   0x3f, 0x06, 0x5b, 0x4f, 0x66,
                    0x6d, 0x7d, 0x07, 0x7f, 0x6f}; 

uchar const line = 0x40; //横杠的七段码
										
int key1ActionFlag = 0;     //值为1时表示按键操作
char timeAddOneFlag = 0;    //标记为1,此时需要秒+1
int ledActionFlag=0;        //led灯的标志
uint ledOnFlag = 0;         //led灯亮
char tubeOnFlag = 0;        //数码管亮
int myDisplay[8] = {
   0};     //数码管显示的内容
int ledValue = 1;           //led显示的数值
uint currHour = 0;
uint currMinute = 0;
uint currSecond = 0;
uint interCount = 0;
uint keyDownTime = 0;
uint scanTime = 1;  //扫描时间
uint currBit = 0;   //当前显示的位

4.2 数码管代码片段

/**
 * 数码管设置为显示指定的数值
 */
void changeAll(long num) 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值