项目场景:

纯小白 第一次写文章 写的不好请见谅

做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仿真相关推荐

  1. 51单片机动态数码管显示自己学号

    实验题目:使用51单片机实现动态数码管显示自己8位学号,例如20220018 在此原理图又分两种连接方式: 第一种是8位数码管接38译码器来减少端口使用. 第二种是,没有端口要求接好就可以那就是,把位 ...

  2. 51单片机 动态数码管显示

    本章博客写的内容主要围绕动态数码管显示,动态数码管显示与静态数码管显示比较稍有变化,主要在添加延时函数这点上 1.首先将上一章节使用子函数方法的代码复制过来 将Nixie( , )移到下方while循 ...

  3. 51单片机动态数码管显示

    1.数码管介绍 LED数码管:数码管是一种简单.廉价的显示器,是由多个发光二极管封装在一起组成"8"字型的器件 2.位选 选第几位显示,G1,G2A,G2B为使能端,有效就工作.图 ...

  4. 51单片机实现数码管显示小数

    51单片机实现数码管显示小数 要求 1 Proteus 面向编程的模型搭建 2 代码实现 2.1. 实现数码管刷新 2.2 对小数进行分解的函数 3 测试用例 4 仿真结果 要求 要求1:根据整数部分 ...

  5. 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真

    51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真 本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去. 本案例需要使 ...

  6. Proteus:单片机动态数码管显示“HELLO”模拟

    题目概述: 单片机动态数码管显示"HELLO". 编程: #include <reg51.h> #define uchar unsigned char #define ...

  7. 51单片机七段数码管显示时钟无按键控制—①—74HC595版

    参考链接: 51单片机七段数码管显示时钟加按键控制-③-74HC595版 51单片机七段数码管显示时钟加按键控制-②-74HC595版 文章目录 一.实验内容: 二.实验分析: 三.仿真图: 四.源代 ...

  8. 51单片机——动态数码管实验,小白讲解,相互学习

    多位数码管介绍: 多位数码管,即两个或两个以上单个数码管并列集中在一起形成一体的数码管.当多位一体时,他们内部的公共端是独立的,二负责显示什么数字的段线(a-dp)全部是连接在一起的,独立的公共端可以 ...

  9. 51单片机 | 动态数码管实验

    文章目录 一.数码管介绍 1.多位数码管简介 2.数码管动态显示原理 二.74HC245和74HC138芯片介绍 1.74HC245 芯片简介 2.74HC138 芯片简介 三.硬件设计 四.软件设计 ...

最新文章

  1. 安装 并且使用_安装密封圈的注意事项
  2. linux忆连软件,linux安装软件方法汇总
  3. 让SignalR客户端回调支持强类型
  4. 一次自定义Configuration的悲惨经历。
  5. C#串口SerialPort常用属性方法
  6. OpenCV (iOS)中的形态学变换(11)
  7. Oracle Sql优化一例---利用函数索引
  8. IP协议和IPX协议的区别
  9. Overload 和 Override 的区别
  10. python爬取网盘分享链接_Python实战三 | 蓝奏网盘抓取网盘链接信息
  11. Java最佳学习途径
  12. mysql 3个表左连接查询_MySQL数据库三个表的左连接查询(LEFT JOIN)
  13. 什么是动态页空间?什么静态空间?
  14. Linkin-1.0.0提交spark任务到HDP环境报错:failed to request external resource provider
  15. 肝了一天一夜 吐血整理的超级实用的Web前端面试题总结
  16. (加入显示电量功能)模仿魅族、华为、小米电池续航管理软件, 动态水波纹滚动的圆形小球View
  17. Java Mail---SMTP协议-Java发邮件(带附件)演示过程
  18. JavaScript数据类型基本数据类型与引用数据类型的区别
  19. 标注工具:parselmouth(歌声合成语音合成标注)
  20. 王衠:爱游戏电视游戏平台将实现宽带支付

热门文章

  1. 通过《iOS人机交互指南》的变化看iOS7的设计理念
  2. Fake3D Depth Map Cocos Creator Shader
  3. 牛顿迭代法求开方-详细且通俗讲解
  4. ServerGuide 引导安装指南
  5. java提供OTP服务
  6. linux 安装 ibm informix database server 14.10
  7. db2数据库常用语法及命令
  8. Flink - 尚硅谷- 大数据高级 Flink 技术精讲 - 2
  9. 怎么创建stm32固件库
  10. AntPathMatcher路径匹配器