KST-51:从999999开始的倒计时程序,只显示有效位
此程序为手把手教你学51单片机的例程。例程中实现只显示有效位(高位0不显示),实现了数码管稳定显示不抖动。
for结合break 实现只显示有效位。
switch结合i 实现数码管动态刷新
#include <reg52.h>sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;unsigned char code LedChar[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[6] = { //数码管显示缓冲区,初值0xff启动时都不亮0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
unsigned char i = 0; //动态扫描索引
unsigned int cnt = 0; //记录T1中断次数
unsigned char flag1s = 0; //1s定时标志void main()
{char j; //循环变量unsigned long sec = 1000000; //记录经过的秒数,倒计时为初值999999+1unsigned char buf[6]; //中间转换缓冲区EA = 1; //总中断ENLED = 0; //使能U3ADDR3 = 1; //需要动态改变ADDR0-2,所以不需要再初始化TMOD = 0x10; //设置T1为模式1TH1 = 0xFC; //为T1赋初值0xFC67,定时1msTL1 = 0x67;ET1 = 1; //使能T1中断TR1 = 1; //启动T1while (1){if (flag1s == 1) //判断1s定时标志{flag1s = 0; //1s定时标志清零sec--; //秒技术自减1//将sec按十进制从低到高一次提取到buf数组中buf[0] = sec%10;buf[1] = sec/10%10;buf[2] = sec/100%10;buf[3] = sec/1000%10;buf[4] = sec/10000%10;buf[5] = sec/100000%10;//从最高位开始,遇到0不显示,遇到非0退出循环for (j=5; j>=1; j--){if (buf[j] == 0)LedBuff[j] = 0xFF;elsebreak;}//将剩余的有效数字为如实转换for ( ; j>=0; j--) //for()其实未对j操作,j既保持上个循环结束时的值{LedBuff[j] = LedChar[buf[j]];}}}
}
/* 定时器1中断服务函数 */
void InterruptTimer1() interrupt 3
{TH1 = 0xFC; //重新加载初值TL1 = 0x67;cnt++; //中断次数计数值加1if (cnt >= 1000) //1000次即为1s{cnt = 0; //清零计数值以重新开始下一秒计时flag1s = 1; //设置1s定时标志为1}//以下代码完成数码管动态扫描刷新P0 = 0xFF; //显示消隐switch (i){case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0]; break;case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=LedBuff[1]; break;case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=LedBuff[2]; break;case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=LedBuff[3]; break;case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=LedBuff[4]; break;case 5: ADDR2=1; ADDR1=0; ADDR0=1; i=0; P0=LedBuff[5]; break;default: break;}
}
KST-51:从999999开始的倒计时程序,只显示有效位相关推荐
- 51单片机用c语言倒计时程序,51单片机实现100以内倒计时,求大佬指点。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #define uchar unsigned char #define uint unsigned ...
- 51单片机编写60秒倒计时程序
#include <reg52.h> #define guan P0 #define wei P2 #define uchar unsigned char #define uint uns ...
- Java黑皮书课后题第1章:1.7(求π的近似值)编写程序,显示4*(1-1/3+1/5-1/7+1/9-1/11【+1/13】)
Java黑皮书课后题第1章:1.7(求π的近似值) 题目描述 代码 代码块 评析 修改日志 题目描述 可以使用以下公式计算π: [手动空格]π=4*(1-1/3+1/5-1/7+1/9-1/11+-) ...
- 单片机学习笔记————51单片机实现数码管中的倒计时程序
一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...
- 数码管显示倒计时c语言程序,1~99秒倒计时数码管显示C程序+Proteus仿真
1~99秒倒计时数码管显示C程序+Proteus仿真文件. 优化了程序,使用51单片机内部定时器,可以实现1-99秒内倒计时. 仿真效果为: 源程序为: /* 调试环境:Proteus 7.8AT89 ...
- 共阳极数码时钟c语言程序,基于51单片机C语言数字钟程序.doc
基于51单片机C语言数字钟程序 基于51单片机C语言数字钟程序 数字电子钟的设计 一. 绪论 (一)引言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地 ...
- 简易电子钟c语言程序,(最新整理)基于51单片机的电子钟C语言程序
<(最新整理)基于51单片机的电子钟C语言程序>由会员分享,可在线阅读,更多相关<(最新整理)基于51单片机的电子钟C语言程序(9页珍藏版)>请在人人文库网上搜索. 1.完整) ...
- Python | 使用时间模块编写倒计时程序
文章目录 一,使用Python中的时间模块编写一个简易的倒计时程序 1.程序代码 2.运行结果 一,使用Python中的时间模块编写一个简易的倒计时程序 1.程序代码 ""&quo ...
- 课设-51单片机+PM2.5+温湿度(程序+原理图+Protel仿真)
51单片机PM2.5+温湿度(程序+原理图+Protel仿真) 一.功能 二.模块 三.代码程序 四.PCB原理图 一.功能 本系统以STC89C52单片机为核心,主要包括传感器温湿度采集,传感器PM ...
- 基于51单片机的贪吃蛇小程序(8*8LED点阵实现)by_jy
** 基于51单片机的贪吃蛇小程序(8*8LED点阵实现)by_jy ** 一直很想写一个贪吃蛇的小程序,这两天终于抽空完成了,这里把我的思路分享给大家,仅供参考! 代码如下: 先放段主函数压压惊 v ...
最新文章
- 部署tomcat环境
- windows篇-第四章 安装和配置Windows域
- 基于并联SVM支持向量机训练HOG特征提取的人员目标提取
- wxWidgets:你好,世界
- VTK:几何对象之IsoparametricCellsDemo
- MySQL连接方式:长连接或者短连接
- hadoop启动碰到java.net.UnknownHostException
- (八)JAVA springcloud ssm b2b2c多用户商城系统源码:配置中心服务化和高可用
- 如何使用移动硬盘加密
- ur3 aubo movit机械臂运动
- 动态拨号云服务器安装Ubuntu系统使用说明
- VM+Lamp环境搭建
- JAVA毕设项目html5在线医疗系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
- win7怎么更换锁屏壁纸
- 轻松禁用WinRAR设置
- 第5章 - 二阶多智能体系统的协同控制 --> 连续时间系统编队控制
- 一年赚一百万很简单(穷人翻身唯一出路)
- 利用yolov8零售商品识别实现的智能结算系统 yolo+后端flask+数据库sqlite+前端html(从零开始,全流程教学)
- 选股服务器列表为空 无法执行选股,东方财富客户端如何设置自动选择服务器 设置有条件选股方法...
- 股市神童”胡立阳:股市赚钱的人都不“正常