数码管动态显示(软件延时)+多参数分时显示+Protues仿真
1 实验现象(四个参数:窗口(通道)+分隔符+参数数据)






2 参考程序
2.1 主函数
#include "DisplaySmg.h" unsigned char wnd; //窗口或参数的个数,状态机设计
unsigned char param1=55; //参数1
unsigned char param2=66; //参数2
unsigned char param3=77; //参数3
unsigned char param4=88; //参数4 void disp_service(); void main()
{
unsigned int i; //0~65535
for(i=0;i<5000;i++) //数码管开机显示
{
DisplaySmg(); //函数执行一次,for循环i控制显示时间
}
while(1)
{
disp_service();
}
} void disp_service()
{
unsigned int i; //如果为char,i始终到不了5000
switch(wnd)
{
case 0:
{
LedBuf[0]=0;
LedBuf[1]=22;
LedBuf[2]=param1/10;
LedBuf[3]=param1%10;
for(i=0;i<5000;i++)
{
DisplaySmg(); //调用数码管显示函数,该函数仅执行一次
}
wnd++;
break;
} case 1:
{
LedBuf[0]=1;
LedBuf[1]=22;
LedBuf[2]=param2/10;
LedBuf[3]=param2%10;
for(i=0;i<5000;i++)
{
DisplaySmg(); //调用数码管显示函数,该函数仅执行一次
}
wnd++;
break;
}
case 2:
{
LedBuf[0]=2;
LedBuf[1]=22;
LedBuf[2]=param3/10;
LedBuf[3]=param3%10;
for(i=0;i<5000;i++)
{
DisplaySmg(); //调用数码管显示函数,该函数仅执行一次
}
wnd++;
break;
}
case 3:
{
LedBuf[0]=3;
LedBuf[1]=22;
LedBuf[2]=param4/10;
LedBuf[3]=param4%10;
for(i=0;i<5000;i++)
{
DisplaySmg(); //调用数码管显示函数,该函数仅执行一次
}
wnd=0;
break;
}
default:break;
}
}
2.2 数码管显示函数模块(采用switch case语言实现)
#ifndef __DisplaySmg_H__
#define __DisplaySmg_H__ #include <REG52.H>
#include "DelayXms.h" #define GPIO_SEG P0 //段选端
#define GPIO_SEL P2 //位选端
#define SMG_NUM 4 //数码管的个数 extern unsigned char LedBuf[]; //外部变量声明 void DisplaySmg(); #endif
#include "DisplaySmg.h"
unsigned char code LedData[]={ //共阴型数码管的段码表,字符,序号
0x3F, //"0",0
0x06, //"1",1
0x5B, //"2",2
0x4F, //"3",3
0x66, //"4",4
0x6D, //"5",5
0x7D, //"6",6
0x07, //"7",7
0x7F, //"8",8
0x6F, //"9",9
0x77, //"A",10
0x7C, //"B",11
0x39, //"C",12
0x5E, //"D",13
0x79, //"E",14
0x71, //"F",15
0x76, //"H",16
0x38, //"L",17
0x37, //"n",18
0x3E, //"u",19
0x73, //"P",20
0x5C, //"o",21
0x40, //"-",22
0x00, //熄灭 23
};
unsigned char code LedAddr[]={0xfe,0xfd,0xfb,0xf7}; //数码管位选
unsigned char LedBuf[]={22,22,22,22}; //显示缓存区
void DisplaySmg()
{
unsigned char i; //等价于 "static unsigned char i = 0;"
//第一步 送段码
//第二步 送位选
//第三步 延时1ms,<10ms
//第四步 消影(共阴形)
switch(i)
{
case 0:
GPIO_SEG = LedData[LedBuf[0]];
GPIO_SEL = LedAddr[0];
DelayXms(1);
GPIO_SEG = 0x00;
i++;
break;
case 1:
GPIO_SEG = LedData[LedBuf[1]];
GPIO_SEL = LedAddr[1];
DelayXms(1);
GPIO_SEG = 0x00;
i++;
break;
case 2:
GPIO_SEG = LedData[LedBuf[2]];
GPIO_SEL = LedAddr[2];
DelayXms(1);
GPIO_SEG = 0x00;
i++;
break;
case 3:
GPIO_SEG = LedData[LedBuf[3]];
GPIO_SEL = LedAddr[3];
DelayXms(1);
GPIO_SEG = 0x00;
i=0;
break;
default:break;
}
}
2.3 延时函数模块
#ifndef __DelayXms_H__
#define __DelayXms_H__ #include <intrins.h> void DelayXms(unsigned char xms); #endif
#include "DelayXms.h" void DelayXms(unsigned char xms) //@11.0592MHz
{
unsigned char i, j;
while(xms--)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
3 参考来源
(1)单片机应用 数码管动态显示之switch case语句实现动态刷新及多参数的分时显示_哔哩哔哩_bilibili;
数码管动态显示(软件延时)+多参数分时显示+Protues仿真的更多相关文章
- 利用Keil u4调试,精确实现软件延时
用定时器延时,有时候显得有点麻烦,我们不如考虑软件精确延时,软件延时无非就是利用for或while多重循环.以前用到延时函数时,都是从网上下载别人写好的延时子程序.延时5ms,400ms,1s,……, ...
- 数码管动态显示Verilog实现(参考小梅哥教程)(视觉暂留)
一个数码管有九个引脚,控制八段二极管的亮灭,用以显示需要的数字. 当有N个数码管时,一个一个控制的话需要N x 9 个引脚,消耗资源较多. 因此可以利用动态显示的方案通过人眼的视觉暂留特性达到静态显示 ...
- js如何实现动态显示表格数据(点奇数显示奇数单元格内容)
js如何实现动态显示表格数据(点奇数显示奇数单元格内容) 一.总结 一句话总结: 1.动态指定表格中每个单元格的id,然后通过id可以获取每个单元格,然后对里面的innerHTML进行赋值. 2.弄了 ...
- 如何设置WebViewer的参数栏显示状态
当为用户提供数据过滤功能时,需要为报表添加参数,而很多应用场景下,在初次展现报表时就为报表会展现全部的数据,然后再通过参数供用户选择,从而实现数据过滤,而一旦为参数设置默认值,参数面板就会自动隐藏.导 ...
- 在ModelSim波形图中以参数名显示变量
在ModelSim波形图中以参数名显示变量 在使用Verilog HDL编写有限状态机等逻辑的时候,状态机的各个状态通常以参数表示,但当使用ModelSim仿真的时候,状态机变量在wave窗口中以二进 ...
- 网页向flash传参数。显示视频。(例子)
[例子1]网页向flash传参数,显示视频: 下面要做的事情:做一个flash文件,可以通过网页得到参数(视频文件名).然后显示视频,并在文本框中显示视频文件名的文字. 1.建立一个flash文件:3 ...
- IDEA给类和方法配置注释模板(参数换行显示)
创建类模板 1.打开设置:File–>settings–>Editor–>File and Code Templates–>Includes 2.输入注释模板 #if (${P ...
- 还可以使用 -c 参数来显示全部内容,并标出不同之处 diff -c test2.txt test1.txt
二.实例 在test目录下存放了两个文本文件,test1.txt test2.txt . 比较这两个文件的异同. diff test1.txt test2.txt "5c5& ...
- nios II--实验7——数码管IP软件部分
软件开发 首先,在硬件工程文件夹里面新建一个software的文件夹用于放置软件部分:打开toolsàNios II 11.0 Software Build Tools for Eclipse,需要进 ...
- 80C51 数码管动态显示0~7
所使用的开发板 普中科技HC6800-ES V2.0 PC:win7 64位 编译软件: keil uversion2 烧写工具: 普中科技开发的PZ-ISP V1.82 烧写方式:热烧写 #incl ...
随机推荐
- windows10 搭建gitea服务器
前一章写了在win上搭建gitlab服务器,因为gitlab服务器没有win的安装,所有需要在win上先按照lunix虚拟机. 这里有个小点的git服务器---gitea.适用于个人或者小团队所有. ...
- react中设置短链接
原因比如,我page要引入一个页面,那么引入起来就很麻烦.图片在src\assets\img\login\bg.jpg组件在src\pages\login\index.tsx引入代码如下: impor ...
- 图片对嘴生成视频:HunyuanVideo-Avatar
之前几章有相应的介绍,一张图片和一个音频,生成一段对嘴视频. FLOAT: https://www.cnblogs.com/cj8988/p/18984186 (带表情,比较快,但是会裁剪为正方形尺寸 ...
- POLIR-Laws-民法典: 第 5 章: 民事权利
POLIR-Laws-民法典: 第 5 章: 民事权利 第五章 民事权利 第一百零九条 自然人的人身自由.人格尊严受法律保护. 第一百一十条 自然人享有: 生命权.身体权.健康权. 姓名权.肖像 ...
- 微软又一自动化开源王炸,Selenium 慌了!
在当今数字化时代,浏览器自动化工具对于开发人员.测试人员以及数据分析师等群体而言,是提高工作效率.实现流程自动化的得力助手.Selenium 作为一款经典的开源浏览器自动化工具,多年来在行业内占据着重 ...
- git项目初次push提示error: failed to push some refs to https://gitee.com/xxxx/gittest.git’解决方案 --九五小庞
在本地与远程新建仓库并关联后,初次push可能会遇到以下问题 $ git push -u origin master To https://gitee.com/xxxx/gittest.git ! [ ...
- 03Java基础语法之运算符
运算符 Java语言支持的运算符 算数运算符:+,-,*,/,%,++,-- 赋值运算符:= 关系运算符:>,<,>=,<=,==,!= instanceof 逻辑运算符:&a ...
- 搜索&记忆化(重复子问题,逻辑相同)
中序遍历:左儿子,我,右儿子 点击查看代码 void dfs(int u) { if(u > n) return ; dfs(u + 1); cout << u << e ...
- Django实时通信实战:WebSocket与ASGI全解析(下)
一.实战:构建实时聊天室 环境准备 下面将使用 Django Channels 构建一个多用户实时聊天室.Django Channels的介绍.安装与配置,参考上篇. 实现 WebSocket 消费者 ...
- MFC好书推荐
1. Programming Windows with MFC MFC最好的入门书籍,一个类一个类的拆开然后讲解给你,很容易上手 2. MFC Interals 分析的很深入,学过了第一本后,可以通过 ...