51单片机动态数码管显示时间+protues仿真
项目场景:
纯小白 第一次写文章 写的不好请见谅
做51单片机数码管显示时间实验的时候protues 仿真出现了问题
问题描述
做51单片机数码管显示时间实验的时候protues 仿真出现了问题
仿真数码管不显示时间 暂停仿真却显示当前单个数码管正常值
错误代码:
static unsigned char i = 0;if(++i == 9) i = 1; //消重影P0 = 0x0;switch(i){case 1: P2=wei[0]; P0=~SMG[0]; break;case 2: P2=wei[1]; P0=~SMG[1]; break;case 3: P2=wei[2]; P0=~SMG[2]; break;case 4: P2=wei[3]; P0=~SMG[3]; break; case 5: P2=wei[4]; P0=~SMG[4]; break;case 6: P2=wei[5]; P0=~SMG[5]; break;case 7: P2=wei[6]; P0=~SMG[6]; break;case 8: P2=wei[7]; P0=~SMG[7]; break;//delay(1); 延时1ms}
原因分析:
开始以为是定时器1时间短,修改后发现问题没解决,加入延时函数反而正常了
解决方案:
最后发现是P0消隐位置不对 加入延时刚好避开了消隐 凑巧解决了问题 修改消隐位置后问题解决
全程序如下:
#include <reg52.h>#define uchar unsigned char
#define uint unsigned intunsigned char code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char SMG[8];
unsigned char shi = 11,fen = 45,miao =14;void delay (uint i){uint m,n;for(m=i;m>0;m--)for(n=72;n>0;n--);}void show()
{static unsigned char i = 0;if(++i == 9) i = 1; //消重影switch(i){case 1: P2=wei[0]; P0 = 0x0;P0=~SMG[0]; break;case 2: P2=wei[1]; P0 = 0x0;P0=~SMG[1]; break;case 3: P2=wei[2]; P0 = 0x0;P0=~SMG[2]; break;case 4: P2=wei[3]; P0 = 0x0;P0=~SMG[3]; break; case 5: P2=wei[4]; P0 = 0x0;P0=~SMG[4]; break;case 6: P2=wei[5]; P0 = 0x0;P0=~SMG[5]; break;case 7: P2=wei[6]; P0 = 0x0;P0=~SMG[6]; break;case 8: P2=wei[7]; P0 = 0x0;P0=~SMG[7]; break;}
}
void timer0_init(void)
{EA = 1; //打开总中断TMOD |= 0x01; //TMOD = 0x01TH0 = (65536 - 50000) / 256;TL0 = (65536 - 50000) % 256; //设置定时器初值ET0 = 1; //打开定时器中断TR0 = 1; // 打开定时器}void timer1_init(void)
{EA = 1; //打开总中断TMOD |= 0x10; // TMOD = TMOD | 0x10 = 0x11TH1 = (65536 - 2000) / 256;TL1 = (65536 - 2000) % 256; //设置定时器初值ET1 = 1; //打开定时器中断TR1 = 1; // 打开定时器
}
void main()
{timer0_init();timer1_init();while(1);
}void timer0_isr() interrupt 1
{static unsigned char i = 0;TH0 = (65536 - 50000) / 256; //高八位赋初值TL0 = (65536 - 50000) % 256; //设置定时器初值,1ms产生一次中断 低八位赋初值 i++;if(20 == i){i = 0;miao++;if(60 == miao){miao = 0;fen++;if(60 == fen){fen = 0;shi++;if(24 == shi){shi = 0;fen = 0;miao = 0;}}}}SMG[0] = duan[shi / 10];SMG[1] = duan[shi % 10];SMG[2] = 0x40;SMG[3] = duan[fen / 10];SMG[4] = duan[fen % 10];SMG[5] = 0x40;SMG[6] = duan[miao / 10];SMG[7] = duan[miao % 10];}void timer1_isr() interrupt 3
{TH1 = (65536 - 2000) / 256;TL1 = (65536 - 2000) % 256; //设置定时器初值show();
}
附上仿真图及效果
51单片机动态数码管显示时间+protues仿真相关推荐
- 51单片机动态数码管显示自己学号
实验题目:使用51单片机实现动态数码管显示自己8位学号,例如20220018 在此原理图又分两种连接方式: 第一种是8位数码管接38译码器来减少端口使用. 第二种是,没有端口要求接好就可以那就是,把位 ...
- 51单片机 动态数码管显示
本章博客写的内容主要围绕动态数码管显示,动态数码管显示与静态数码管显示比较稍有变化,主要在添加延时函数这点上 1.首先将上一章节使用子函数方法的代码复制过来 将Nixie( , )移到下方while循 ...
- 51单片机动态数码管显示
1.数码管介绍 LED数码管:数码管是一种简单.廉价的显示器,是由多个发光二极管封装在一起组成"8"字型的器件 2.位选 选第几位显示,G1,G2A,G2B为使能端,有效就工作.图 ...
- 51单片机实现数码管显示小数
51单片机实现数码管显示小数 要求 1 Proteus 面向编程的模型搭建 2 代码实现 2.1. 实现数码管刷新 2.2 对小数进行分解的函数 3 测试用例 4 仿真结果 要求 要求1:根据整数部分 ...
- 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真
51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真 本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去. 本案例需要使 ...
- Proteus:单片机动态数码管显示“HELLO”模拟
题目概述: 单片机动态数码管显示"HELLO". 编程: #include <reg51.h> #define uchar unsigned char #define ...
- 51单片机七段数码管显示时钟无按键控制—①—74HC595版
参考链接: 51单片机七段数码管显示时钟加按键控制-③-74HC595版 51单片机七段数码管显示时钟加按键控制-②-74HC595版 文章目录 一.实验内容: 二.实验分析: 三.仿真图: 四.源代 ...
- 51单片机——动态数码管实验,小白讲解,相互学习
多位数码管介绍: 多位数码管,即两个或两个以上单个数码管并列集中在一起形成一体的数码管.当多位一体时,他们内部的公共端是独立的,二负责显示什么数字的段线(a-dp)全部是连接在一起的,独立的公共端可以 ...
- 51单片机 | 动态数码管实验
文章目录 一.数码管介绍 1.多位数码管简介 2.数码管动态显示原理 二.74HC245和74HC138芯片介绍 1.74HC245 芯片简介 2.74HC138 芯片简介 三.硬件设计 四.软件设计 ...
最新文章
- 安装 并且使用_安装密封圈的注意事项
- linux忆连软件,linux安装软件方法汇总
- 让SignalR客户端回调支持强类型
- 一次自定义Configuration的悲惨经历。
- C#串口SerialPort常用属性方法
- OpenCV (iOS)中的形态学变换(11)
- Oracle Sql优化一例---利用函数索引
- IP协议和IPX协议的区别
- Overload 和 Override 的区别
- python爬取网盘分享链接_Python实战三 | 蓝奏网盘抓取网盘链接信息
- Java最佳学习途径
- mysql 3个表左连接查询_MySQL数据库三个表的左连接查询(LEFT JOIN)
- 什么是动态页空间?什么静态空间?
- Linkin-1.0.0提交spark任务到HDP环境报错:failed to request external resource provider
- 肝了一天一夜 吐血整理的超级实用的Web前端面试题总结
- (加入显示电量功能)模仿魅族、华为、小米电池续航管理软件, 动态水波纹滚动的圆形小球View
- Java Mail---SMTP协议-Java发邮件(带附件)演示过程
- JavaScript数据类型基本数据类型与引用数据类型的区别
- 标注工具:parselmouth(歌声合成语音合成标注)
- 王衠:爱游戏电视游戏平台将实现宽带支付