需知道:

LED的特性是什么?共阳极与共阴极的区别?什么是段码?段码是怎么计算的(自己可以推断共阴极或共阳极的段码)?段码与位选的区别?7段LED显示的字符分别有哪些?自己能够写得出吗?能够区分静态显示与动态显示吗?

实验要求:

​ 编程控制单片机驱动一个八位一体LED数码管和一个开关,实现:开关拨上实现八个LED数码管同时循环显示“0,1,2……E,F”等十六个字符。开关拨下时,实时切换八个LED数码管显示状态为同时显示八个不同的数字,例如“12345678”。当开关再次拨上时,将继续切换前的字符往下同时循环显示“0,1,2……E,F”等十六个字符。

实验工具:

仿真软件:proteus8.0

软件:keil4

提示:高版本的可以打开低版本的,但是低版本打不开高版本的。

实验步骤

实验电路

元件简要介绍:

元件名称 图片 备注
7SEG-MPX8-CC—BLUE MPX表示多位一体,8表示8位
RESPACK—8 8个可以连接的引脚,1号引脚连接电源,2-9号引脚连接单片机的P0接口,可做上拉电阻用
SW-SPDT
AT89C51

软件源代码:

版本1

此代码参考了 参考链接

#include<reg51.h>
#define uchar unsigned char
sbit DI1=P0^0; //定义8位数码管位选信号
sbit DI2=P0^1;
sbit DI3=P0^2;
sbit DI4=P0^3;
sbit DI5=P0^4;
sbit DI6=P0^5;
sbit DI7=P0^6;
sbit DI8=P0^7;
//定义输入端的信号端口
sbit sw=P1^7; void delay(uchar x) //定义延时函数
{ uchar j; while(x--){ for(j=0;j<125;j++); }
} /*定义数码管显示字符跟数字的对应数组关系*/ unsigned char code dis[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F ,0x77,0x7c,0x39,0x5e,0x79,0x71};void main() { char i,k=0;while(1){if(sw==1){for(i=0;i<=15;i++){        P0=0x00;P3=dis[k%16];if(sw!=1)break;delay(500);k++;}}else{   P3=0x00; //P0口初始化 DI1=0; //第一位数码管位选 P3=dis[1]; //第一位数码管显示0 delay(5); DI1=1; //关闭第一位数码管位选 DI2=0; //第二位数码管位选 P3=dis[2]; //第二位数码管显示1 delay(5); DI2=1; //关闭第二位数码管位选 DI3=0; //第三位数码管位选 P3=dis[3]; //第三位数码管显示2 delay(5); DI3=1; //关闭第三位数码管位选 DI4=0; //第四位数码管位选 P3=dis[4]; //第四位数码管显示3 delay(5); DI4=1; //关闭第四位数码管位选 DI5=0;P3=dis[5];delay(5);DI5=1;DI6=0;  //6位P3=dis[6];delay(5);DI6=1;//7位DI7=0;P3=dis[7];delay(5);DI7=1;DI8=0;      //8位P3=dis[8];delay(5);DI8=1;}   }  }

看到版本2的代码,会觉得这个代码行数过多。而且在else里的代码有很多循环的,可以利用通式将其替换。

版本2:

#include <REGX51.H>
#include <intrins.h>sbit  sw=P1^7; //段码  ,code存储在RAM中,访问速度快
unsigned char code dis[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F ,0x77,0x7c,0x39,0x5e,0x79,0x71};//延时函数void delay(unsigned int time){   unsigned int i;for(;time>0;time--)for(i=125;i>0;i--);           }//主函数void main()
{   unsigned char bit_scan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//每次亮一个灯   unsigned char  i,j,k=0;while(1){if(sw==1) //开关拨上    { for(j=0;j<16;j++){    P0=0x00;//位码。LED全部亮P3=dis[k%8];if(sw!=1)//开关拨下,退出循环break;delay(500);  //无它不显示其他的数字k++; //标记}    }else{  for(i=0;i<8;i++){P0=bit_scan[i]; P3=dis[i+1];delay(5); }}}}

遇到的问题

问题1

WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
不影响运行,只是说你定义的函数没有调用而已

解决办法:不用管

问题2

多次修改代码,然后就提示

--- Error: failed to execute 'D:\program files\单片机开发工具\Keil4\C51\BIN\C51.EXE'

然后按照提示的路径,查看文件,发现自己没有BIN文件(之前没有注意看,同学有这个文件,所以就默认自己有吧)

解决办法参考1.1:https://blog.csdn.net/qq_24835087/article/details/87929636

解决办法参考1.2:http://www.myexceptions.net/ai/1918822.html

解决办法参考1.3:https://www.cnblogs.com/shareidea/p/5273158.html

1.1未解决,复制了同学的BIN文件到安装路径,结果还是不行。

1.2未解决,在RealView Folder里选择keil安装目录下的C:\Keil\ARM\ARMCC\bin,点OK后就可以正常使用了里根本浏览不了路径

1.3,解决了。路径\Keil4\

问题3

如果将版本2的代码,稍微改一下,即开关拨上拨下各自弄个函数。那么实验要求里的当开关再次拨上时,将继续切换前的字符往下同时循环显示“0,1,2……E,F”等十就实现不了。为什么会出现这样的效果,我没有弄清楚

#include <REGX51.H>
#include <intrins.h>sbit  sw=P1^7; //段码  ,code存储在RAM中,访问速度快
unsigned char code dis[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F ,0x77,0x7c,0x39,0x5e,0x79,0x71};//延时函数void delay(unsigned int time){   unsigned int i;for(;time>0;time--)for(i=125;i>0;i--);           }//开关拨上函数void hight(){  unsigned char j,k=0;//P0=0x00;//在这个位置LED不亮for(j=0;j<16;j++){     P0=0x00;//位码。LED全部亮P3=dis[k%16];if(sw!=1)//开关拨下,退出循环break;delay(500); //无它不显示其他的数字k++; //标记}}//开关拨下函数
void low()
{  unsigned char bit_scan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//每次亮一个灯 unsigned char  i;for(i=0;i<8;i++)
{P0=bit_scan[i]; P3=dis[i+1];delay(5); if(sw!=0)break;}
}
//主函数void main()
{    while(1){if(sw==1) //开关拨上    {   hight();}else{low();}   }}

最后

欢迎各位评论,指教!

实验三LED计数静动态显示(附代码和电路图)相关推荐

  1. led数码显示控制plc实验_实验三 LED数码显示控制 PLC实验报告

    广州大学学生实验报告 开课学院及实验室:工程北 529 2015 年 5 月 28 日 学院 机械与电气 工程 年级. 专 业.班 姓名 学号 实验课程名称 电气控制与可编程控制器 成绩 实验项目名称 ...

  2. led数码显示控制plc实验_实验三led数码显示控制plc实验报告

    开课学院及实验室:工程北 529 2015 年 5 月 28 日 学院 机械与电气 工程 年级. 专 业.班 姓名 学号 实验课程名称 电气控制与可编程控制器 成绩 实验项目名称 实验三 LED 数码 ...

  3. led数码显示控制plc实验_实验三LED数码显示控制PLC实验报告.doc

    实验三LED数码显示控制PLC实验报告 广州大学学生实验报告 开课学院及实验室:工程北529 2015年 5 月28 日 学院机械与电气工程年级.专业.班姓名学号实验课程名称 电气控制与可编程控制器成 ...

  4. 阵列信号DOA估计系列(三).MVDR/Capon波束形成(附代码)

    标题阵列信号DOA估计系列(三).MVDR/Capon波束形成 MVDR算法得基本思路是在频域/空间形成一个窄带滤波器,从此出发,可见MVDR不但对噪声有抑制作用,来对观察频率/角度之外的信号有抑制作 ...

  5. 合肥工业大学机器人足球仿真robcup作业三(python实现)附代码有注释

    第三次作业 题目:已知2个点的信息,定位自己的绝对坐标. 设图中C(0,0),P1(-52.5,-32), P2(-52.5, 32), P3(52.5,32), P4(52.5,-32), P5(0 ...

  6. 听说双十一销售额符合三次函数?(附代码)

    先来吐槽一下:双十一过后,我估计参加不了任何超过十块的饭局! 言归正传,今天确实是被双十一销售额刷屏了 突然·,我在微博.朋友圈等地方看到,这样一种声音,从 2009-2019,淘宝天猫的双十一销售总 ...

  7. 4.3、使用寄存器版本点亮LED灯(内附代码)

    第一种:指针形式 led.c文件:#include "led.h" #include "stm32f4xx.h" void LED_Init(void) {// ...

  8. MIT操作系统实验lab1(pingpong案例:附代码、详解)

    1.题目描述:在xv6上实现pingpong程序,即两个进程在管道两侧来回通信.父进程将"ping"写入管道,子进程从管道将其读出并打印<pid>:received p ...

  9. 2020A炉温曲线第三题模拟退火算法(附代码)

    在问题二的条件下求出面积的最小值 from matplotlib import pyplot as plt import numpy as np import random import math f ...

  10. 【目标检测】基于yolov6的钢筋检测和计数(附代码和数据集)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. Hello,大家好,我是augustqi. 今天给大家 ...

最新文章

  1. 如何设置'REUSE_ALV_GRID_DISPLAY'的单个单元格的颜色
  2. (论坛答疑点滴)DataGrid的EditCommandColumn如何使用图片作为按钮?
  3. 关键词分词工具_快图制作工具 | 如何制作词云图?
  4. Spring Boot集成Redis,这个坑把我害惨了!
  5. 海明码编码和校验原理与实现【转载】
  6. SpringCloud学习笔记014---可以使用json对rabbitmq进行封装,方便数据传输
  7. 由char* 引发的Segmentation fault错误
  8. java在文本域内添加按钮_JAVA中在窗体中添加了一个文本框,然后再文本框中输入字符,如何...
  9. Android 关于ZXing的使用
  10. 【Python】EXCEL转Json
  11. 如何在恢复模式下重新启动Mac?
  12. php获取用户 地区 、ip地址
  13. VS的一个项目,release/debug/x64/win32的设置有没有办法一次设置?
  14. linux 开源视频剪辑,Linux 上的开源视频剪辑软件Olive
  15. android studio 读取网络图片
  16. spring 自带的定时器task
  17. ipguard客户端如何卸载_关于卸载Oracle步骤和相关SQL的学习
  18. 输入圆柱的高和半径,求圆柱体积,volume=π×r 2 ×h 。要求定义和调用函数cylinder (r, h )计算圆柱体的体积。
  19. python之域名证书检测
  20. 25个最恶意的病毒网站 千万不要点击浏览!

热门文章

  1. 资源吧网站模板下载织梦cms精仿资源吧网站模板
  2. python socket编程在阿里云的esc服务器下 [Errno 99] Cannot assign requested address解决方式
  3. java使字符串转二维码
  4. ui设计现状与意义_UI设计师的前景与现状?
  5. Rasa课程、Rasa培训、Rasa面试系列之 Rasa幕后英雄系列-高级开发者 Rachael
  6. react-native获取农历日期和二十四节气
  7. InnoDB的MVCC如何解决不可重复读和快照读的幻读,当前读用next-key解决幻读
  8. MCE公司:DDR1 和 DDR2 双靶点抑制剂的设计合成及其抗炎作用研究
  9. 萌新-以ijcai19为模板的latex排版总结
  10. IJCAI 2021 投稿安排出来了!新审稿机制体验一下?