数码管左移解析
sfrd指令用法例子

sfrd指令用法例子
右循环移位指令ROR、左循环移位指令ROL
带进位循环右移指令RCR、带进位循环左移指令RCL
位右移位指令SFTR、位左位指令SFTL
字右移位指令WSFR、字左移位指令WSFL
先入先出(FIFO)写入指令SFWR、读出指令SFRD
1、右循环移位指令ROR、左循环移位指令ROL
2、带进位循环右移指令RCR、带进位循环左移指令RCL
执行RCR、RCL指令时,各位的数据与进位位M8022一起(16位指令时一共17位)向右(或向左)循环移动n位。
在循环中移出的位送入进位标志,后者又被送回到目标操作元件的另一端。
4、字右移位指令WSFR、字左移位指令WSFL
5、先入先出(FIFO)写入指令SFWR、读出指令SFRD
案例:数码管显示控制
用plc控制七段数码管循环显示数字0~9,显示间隔1s。
LED数码管工作原理
一、硬件设计
二、软件设计
a~g
段逻辑译码关系。
数码管显示分析课件

显示效果比较
静态驱动方式的显示效果较好, 因为每个数码管的每个段都由一 个独立的驱动器控制;而动态驱 动方式的显示效果可能会受到时
序的影响。
选择考虑
在要求显示效果较高的情况下, 可以选择静态驱动方式;而在要 求成本较低的情况下,可以选择
动态驱动方式。
04 数码管显示应用实例
时间显示电路
01
3. 检查程序中数码管的逻辑控制,确保显示数据的正确 性。
详细描述
2. 检查数码管的硬件故障,如接触不良等,进行修复 或更换。
总结:解决数码管显示闪烁的问题需要检查信号干扰、 硬件故障和软件逻辑等多个方面,确保各个环节的正常 运行。
数码管显示错误代码解析
总结词:数码管显示错误代码可能是由于编程语言或库 函数的错误、显示数据格式不正确等原因导致的。
动态扫描
采用动态扫描技术,多个数码管可以 同时显示不同的内容。
02 数码管显示编码方式
七段数码管显示编码
01
七段数码管结构
七段数码管是一种常见的显示器件,它由七个LED段和一个小数点组成
。每个LED段都有一个独立的引脚,可以独立控制其亮灭状态。
02 03
编码原理
七段数码管的编码方式是根据要显示的数字或字符的形状,将每个LED 段赋予一个二进制编码。例如,要显示数字“2”,只需要将对应的 LED段点亮即可。
03
九段数码管
由九个LED段组成的,用于显示0-9的数字以及小数点 ,部分还包含一个背光灯。
数码管的分类
按位数分类
一位、两位、三位等,位数越多 ,可以显示的信息越丰富。
按颜色分类
红、绿、黄等,不同颜色适用于 不同场合和环境。
数码管的显示原理
8位 LED左移

8位 LED左移#include<reg52.h> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉sbit P35 = P3^5;//这是为了关闭开发板上的点阵实际应用去掉void Delay(unsigned int t); //函数声明void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255 P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉P20=0; //这是为了关闭开发板上的数码管实际应用去掉P21=0; //这是为了关闭开发板上的数码管实际应用去掉P35=0; //这是为了关闭开发板上的点阵实际应用去掉P1=0xFF;//P1口置1Delay(50000);P1=0xfe; //赋初始值for(i=0;i<8;i++) //加入for循环,表明for循环大括号中的程序循环执行8次{Delay(50000);P1<<=1;}while (1) //主循环{//主循环中添加其他需要一直工作的程序}}延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}led循环左移#include<reg52.h> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义/*-------------------------IO口定义----------------------------*/sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉sbit P35 = P3^5;//这是为了关闭开发板上的点阵实际应用去掉void Delay(unsigned int t); //函数声明void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255 P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉P20=0; //这是为了关闭开发板上的数码管实际应用去掉P21=0; //这是为了关闭开发板上的数码管实际应用去掉P35=0; //这是为了关闭开发板上的点阵实际应用去掉P1=0xFF;//P1口置1Delay(50000);P1=0xfe; //赋初始值while (1) //主循环{for(i=0;i<8;i++) //加入for循环,表明for循环大括号中的程序循环执行8次{Delay(50000);P1<<=1;P1=P1|0x01; //左移后,最右端自动赋值0,所以需要该语句赋值1}P1=0xfe; //重新赋初始值//主循环中添加其他需要一直工作的程序}}void Delay(unsigned int t){while(--t);}查表led显示#include<reg52.h> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉sbit P35 = P3^5;//这是为了关闭开发板上的点阵实际应用去掉unsigned char code table[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0x00,0x55,0x55,0xaa,0xaa};//rom允许情况可以无限添加void Delay(unsigned int t); //函数声明void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255 P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉P20=0; //这是为了关闭开发板上的数码管实际应用去掉P21=0; //这是为了关闭开发板上的数码管实际应用去掉P35=0; //这是为了关闭开发板上的点阵实际应用去掉P1=0xFF;//P1口置1while (1) //主循环{for(i=0;i<16;i++) //加入for循环,表明for循环大括号中的程序循环//执行16次,表明表格中有16个元素{P1=table[i];Delay(30000);}//主循环中添加其他需要一直工作的程序}}不同频率闪烁1个LED#include<reg52.h> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit LED0=P1^0;// 用sbit 关键字定义LED到P1.0端口,//LED是自己任意定义且容易记忆的符号sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉sbit P35 = P3^5;//这是为了关闭开发板上的点阵实际应用去掉void Delay(unsigned int t); //函数声明void main (void){//此方法使用bit位对单个端口赋值unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255 P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉P20=0; //这是为了关闭开发板上的数码管实际应用去掉P21=0; //这是为了关闭开发板上的数码管实际应用去掉P35=0; //这是为了关闭开发板上的点阵实际应用去掉P1=0xFF;//P1口置1while (1) //主循环{for(i=0;i<10;i++) //加入for循环,表明for循环大括号中的程序循环执行10次{LED0=0; //将P1.0口赋值0,对外输出低电平Delay(5000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将P1.0口赋值1,对外输出高电平Delay(5000);}for(i=0;i<10;i++){LED0=0; //将P1.0口赋值0,对外输出低电平Delay(60000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将P1.0口赋值1,对外输出高电平Delay(60000);}//主循环中添加其他需要一直工作的程序}}void Delay(unsigned int t){while(--t);}不同频率闪烁多个LED#include<reg52.h> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉sbit P35 = P3^5;//这是为了关闭开发板上的点阵实际应用去掉sbit LED0=P1^0;// 用sbit 关键字定义LED到P1.0端口,LED是自己任意定义且容易记忆的符号sbit LED1=P1^1;sbit LED2=P1^2;sbit LED3=P1^3;sbit LED4=P1^4;sbit LED5=P1^5;sbit LED6=P1^6;sbit LED7=P1^7;void Delay(unsigned int t); //函数声明void main (void){//此方法使用bit位对单个端口赋值unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255 P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉P20=0; //这是为了关闭开发板上的数码管实际应用去掉P21=0; //这是为了关闭开发板上的数码管实际应用去掉P35=0; //这是为了关闭开发板上的点阵实际应用去掉P1=0xFF;//P1口置1while (1) //主循环{for(i=0;i<10;i++) //加入for循环,表明for循环大括号中//的程序循环执行10次{LED0=0; //将P1.0口赋值0,对外输出低电平LED2=1;LED4=0;Delay(5000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将P1.0口赋值1,对外输出高电平LED2=0;LED4=1;Delay(5000);}for(i=0;i<10;i++){LED0=0; //将P1.0口赋值0,对外输出低电平LED2=1;LED4=0;Delay(60000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将P1.0口赋值1,对外输出高电平LED2=0;LED4=1;Delay(60000);}//主循环中添加其他需要一直工作的程序}}延时函数,含有输入参数 unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535void Delay(unsigned int t){while(--t);}双灯左移右移闪烁#include<reg52.h> //包含头文件,一般情况不需要改动,sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉sbit P35 = P3^5;//这是为了关闭开发板上的点阵实际应用去掉void Delay(unsigned int t); //函数声明void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围unsigned char temp;//定义临时变量用于转换P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉P20=0; //这是为了关闭开发板上的数码管实际应用去掉P21=0; //这是为了关闭开发板上的数码管实际应用去掉P35=0; //这是为了关闭开发板上的点阵实际应用去掉P1=0xFF;//P1口置1while (1) //主循环{temp=0xfc;P1=temp;for(i=0;i<7;i++) //加入for循环,表明for循环大括号//中的程序循环执行7次{Delay(50000); //调用延时程序;更改延时数字可//以更改延时长度;用于改变闪烁频率temp<<=1;temp=temp|0x01; //也可以直接把temp换成P1P1=temp; //之所以加入temp做中间变量,转换//完成后直接赋值到端口,防止直接//操作端口造成的短暂闪烁}temp=0x3f;P1=temp;for(i=0;i<7;i++) //加入for循环,表明for循环大括号//中的程序循环执行7次{Delay(50000); //调用延时程序;更改延时数字可以//更改延时长度;用于改变闪烁频率temp>>=1;temp|=0x80; //等效于temp=temp|0x80P1=temp;}for(i=0;i<3;i++) //加入for循环,表明for循环大括号//中的程序循环执行3次{P1=0xff;Delay(50000);P1=0x00;Delay(50000);} //主循环中添加其他需要一直工作的程序}}void Delay(unsigned int t){while(--t);}。
LED数码管使用详解

LED数码管使用详解LED数码管是一种常见的显示设备,它由七个发光二极管组成,可以显示数字、字母和一些特殊字符。
LED数码管广泛应用于计时器、计数器、电子钟表和计算器等电子设备中。
本文将详细介绍LED数码管的原理、工作方式和常见的使用场景。
一、LED数码管的原理七段数码管是将七个LED灯组成的,分别用a、b、c、d、e、f、g七个字母来表示。
每个字母对应一个段,不同的段可以通过控制对应的引脚(PIN)的高低电平来点亮或关闭。
通过控制这些引脚的电平,可以显示出不同的数字、字母和部分特殊字符。
二、LED数码管的工作方式LED数码管的工作方式是通过控制各个LED灯的点亮与否来显示相应的字符。
七段数码管通常由一个共阳极或共阴极的七段式数字表示器组成。
共阳极的意思是所有LED的阳极(长脚)都连接在一起,共用一个电压。
共阴极的意思是所有LED的阴极(短脚)都连接在一起,共用一个地。
当需要显示一些数字时,通过给相应的管脚(a到g)施加适当的高电平或低电平来点亮或关闭对应的LED灯。
例如,如果需要显示数字1,就只需要将a和b两个管脚连接到高电平,其余的管脚连接到低电平。
这样,数码管的a和b段就会点亮,显示出数字1的形状。
三、LED数码管的使用场景1.电子钟表:LED数码管由于其数字显示效果清晰、易读,被广泛应用于电子钟表或数码时钟中。
2.计时器和计数器:在需要进行计时和计数的场景中,如比赛计时、倒计时器等,LED数码管可以方便地显示时间或计数值。
3.温度显示器:LED数码管可以用于温度测量设备中,通过控制不同的管脚电平来显示温度值。
4.电子秤和电子计量器:在商店或实验室中,LED数码管可用于显示测量的重量或数量。
5.电子计算器:LED数码管常用于简单的电子计算器中,用于显示计算结果或输入的数字。
6.电子设备调试:在电子设备的调试过程中,可以使用LED数码管来显示和检查各种信号和状态。
7.数字显示面板:在需要显示数字或字母的面板上,可以使用LED数码管来显示相关信息。
初级电子工程师必读:数码管的原理及应用

初级电子工程师必读:数码管的原理及应用数码管作为一种显示设备,其应用在我们生活中随处可见,最常见的应用莫过于多功能万年历,看图~是不是很炫很好看,小编觉得...也就那么回事吧,还没我做的好看呢,哈哈哈哈哈~言归正传,下面我们来说说一个小小的数码管是如何实现这些数字的显示,它的内部结构是什么样的呢?它的工作原理又是什么样的呢?数码管又称8段LED灯,对,你没看错,它就是由8段LED灯组成。
在我们的实际应用中,对这8段LED灯又分别取名为:a,b,c,d,e,f,g,h(或dp),看图~在数码管的内部,根据连线的不同,将数码管分为共阴数码管和共阳数码管。
共阴数码管:8个LED灯的阴极全部连接在一起,将每个LED灯的阳极分别引出共阳数码管:8个LED灯的阳极全部连接在一起,将每个LED灯的阴极分别引出下图中左边为共阴数码管的内部结构,右边则为共阳数码管的内部结构。
数码管的内部结构说完了,接下来我们再说说数码管是怎么显示的。
我们以共阳数码管为例,将数码管的8段LED灯依次排序:h,g,f,e,d,c,b,a。
对于共阳数码管,当公共端为高电平,其中某一段LED灯的阴极为低电平时,该段亮,否则为高电平时,该段不亮,由此可得出数码管的编码表,见下表。
下面我们在proteus仿真软件中搭建一个实际的电路,来验证上面的编码是否正确。
在实际的使用中,数码管一定要串入限流电阻,否则就烧了~这是共阳数码管的应用,共阴数码管的应用与之类似。
共阳数码管的公共端接高电平,某一端接低电平,该段则亮;共阴数码管为公共端接低电平,某一端接高电平,该段则亮,二者的逻辑刚好相反。
其实,这只是静态数码管的使用,位选不变,段选改变,称为静态显示。
如果位选改变,段选也改变,则称为动态显示。
数码管左移

/*-----------------------------------------------名称:多位数码管动态扫描显示变化数据内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值------------------------------------------------*/#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P2^2;//定义锁存使能端口段锁存sbit LATCH2=P2^3;// 位锁存unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char TempData[8]; //存储显示值的全局变量void Delay(unsigned int t); //函数声明void Display(unsigned char FirstBit,unsigned char Num);/*------------------------------------------------主函数------------------------------------------------*/main(){unsigned int i,k,j;unsigned char s;while(1){j++;if(j==20){j=0;if(0==k){for(s=0;s<8;s++) //完全循环完成后清零所有缓冲区TempData[s]=0;}TempData[8-i]=dofly_DuanMa[k]; //把需要显示的字符依次送缓冲区TempData[8+1-i]=0; //不需要显示的区域清零if(i==(8-k)){i=0;k++;if(k==8)k=0;}i++;}Display(0,8);//从第一位显示,共显示8位}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}/*------------------------------------------------显示函数,用于动态扫描数码管输入参数FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。
数码管的几种驱动方式汇总

动态的也叫扫描方式,是利用发光二极管的余辉效应和人眼的视觉暂留效应来实现的,只要在在一定时间内数码管的笔段亮的频率够快,人眼就看不出闪烁,一般外围硬件较少,但是对单片机资源耗用巨大。
静态的也较锁存方式,单片机送出数据后控制外围锁存器件锁存数据,这样数码管笔段里的电流不变,数码管稳定显示,这样单片机可以干别的活不用管数码管了。这种方案的优点是对单片机的P口资源和时间耗用很少,但是数码管的外围辅助电路复杂。
●支持段电流上限调整,可以省去所有限流电阻。
●扫描极限控制,支持1到8个数码管,只为有效数码管分配扫描时间。
(二)键盘控制
●内置64键键盘控制器,基于8×8矩阵键盘扫描。
●内置按键状态输入的下拉电阻,内置去抖动电路。
●键盘中断,低电平有效输出。
●提供按键释放标志位,可供查询按键按下与释放。
(三)其它
特点
I2C串行接口,提供键盘中断信号,方便于处理器接口;
可驱动8位共阴数码管或64只独立LED和64个按键;
可控扫描位数,可控任一数码管闪烁;
提供数据译码和循环,移位,段寻址等控制;
8个功能键,可检测任一键的连击次数;
无需外接元件即直接驱LED,可扩展驱动电流和驱动电压;
提供工业级器件,多种封装形式PDIP24,SO24。
●高速的4线串行接口,支持多片级联,时钟速度从0到10MHz。
●串行接口中的DIN和DCLK信号线可以与其它接口电路共用,节约引脚。
●完全内置时钟振荡电路,不需要外接晶体或者阻容振荡。
●内置上电复位和看门狗Watch-Dog,提供高电平有效和低电平有效复位输出。
●支持3V~5V电源电压。
●提供SOP28和DIP24S两种无铅封装,兼容RoHS。
第3节-数码管驱动(项目3)

}
void main (void)
{
unsigned char i;
ห้องสมุดไป่ตู้
// 变量 i 作为数组的0~9编号
P2 = 0;//P2.0 = 0,通过反相器反相后,加在数码管公共端上的电压
while (1)
{ P0 = seven_seg[i]; delay(50000); i++;
//输出0~9到共阳七段显示器 //调用时间延迟函数delay()
在程序设计时,库函数可以很方便的被用户程序调用。 例如,利用库函数实现的跑马灯程序为
/************************/
#include<reg51.h> #include<intrins.h>//库函数的头文件
void delay(unsigned int x)
while (1)
{ …….. delay(1000); …… }
}
//调用时间延迟函数,实参为1000
三、有返回值函数
如果函数中要返回数值时,必须使用return命令。 并且返回值的类型必须与函数的类型一致。如把8位8421二 进制码转换成8421BCD码函数。
unsigned char DEC_BCD_conv(unsigned char x)
if(i == 10)
i = 0;
}
}
当程序中使用常量数据时,如共阳数码管数字显示编 码、液晶显示器的汉字编码等,一般希望这些数据当程序 下载到单片机时存放在单片机的ROM区,对此类数据声明前 面需要加上关键字code或const,如数码管的显示编码。
利用数码管也可以显示日期和时间,但是在本项目中, 数字变化时间是由延时函数实现的,由于C语言程序进过编 译后的生成的汇编程序与直接采用汇编语言编写的程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数码管左移
名称:数码管左移
日期:2012年05月19日
内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^6;//定义锁存使能端口段锁存(LATCH1(锁存器的段选端)可以用我们习惯的dula代替)
sbit LATCH2=P2^7;// 位锁存(LATCH2(位选端)可以用我们习惯的wela代替)
unsigned char code DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 显示段码值0~9
unsigned char code WeiMa[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//分别对应相应的数码管点亮,即位码(位码从高到低)
unsigned char TempData[9]; //存储显示值的全局变量(TempData【9】是含有9个元素的数组,全局变量,不明白建议去看看C语言)void Delay(unsigned int t); //函数声明
void Display(unsigned char FirstBit,unsigned char Num);
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned char i,k,j;(i与Display函数定义中的i不一样,局部变量)
unsigned char s;
while(1)
{
j++;
if(j==20) (有使正在移动的数延时一段时间的作用)
{
j=0;
if(0==k)
{
for(s=0;s<8;s++) //完全循环完成后清零所有缓冲区
TempData[s]=0xff;
}
TempData[i]=DuanMa[k]; //把需要显示的字符依次送缓冲区//(给TempData赋值,每执行一次该语句,只给TempData【9】中的一个元素赋值)
TempData[i-1]=0xff; //不需要显示的区域清零(一定看过实验现象才好理解,这里就那实验现象中0移动来说,0从0x80(位)到0x40位时(此时TempData【i】中只有TempData【0】和TempData【1】被赋值为0,其他的值为0xff(对共阳极而言,即什么都不显)),如果没TempData【i-1】=0xff这句,那么0x80和0x40位上都是0,这条语句作用是使0移动的数码管0x80位上什么都不显示,上面说清零有点不好理解)i++;
if(i==(8-k))(k起限制数字移动的次数的作用,对于k=0,i的最大值7,对于k=1,i为6。
对于k=7,i为0){
i=0;
k++;
if(k==8)
k=0;
}
}
Display(0,8);//从第一位显示,共显示8位
}
}
/*------------------------------------------------
延时函数,含有输入参数unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
/*------------------------------------------------
显示函数,用于动态扫描数码管
输入参数FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
如输入0表示从第一个显示。
Num表示需要显示的位数,如需要显示99两位数值则该值输入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{
unsigned char i;(局部变量,i和main函数里的i不一样)
f or(i=0;i<Num;i++)
{
DataPort=0xff; //清空数据,防止有交替重影
LATCH1=1; //段锁存
LATCH1=0;
DataPort=WeiMa[i+FirstBit]; //取位码
LATCH2=1; //位锁存
LATCH2=0;
DataPort=TempData[i]; //取显示数据,段码(TempData【i】里面的i值就是display中的i)
LATCH1=1; //段锁存
LATCH1=0;
Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
}
}
注释:①main函数中k=0
TempData【0】、TempData【1】、TempData【2】、TempData 【3】、TempData【4】、TempData【5】、TempData【6】、TempData 【7】=0;;(这些赋值不是同时进行的)
②k=1时
TempData【0】、TempData【1】、TempData【2】、TempData 【3】、TempData【4】、TempData【5】、TempData【6】=1 ③k=2时
TempData【0】、TempData【1】、TempData【2】、TempData 【3】、TempData【4】、TempData【5】=2;
④k=3时
TempData【0】、TempData【1】、TempData【2】、TempData 【3】、TempData【4】=3;
⑤k=4时
TempData【0】、TempData【1】、TempData【2】、TempData 【3】=4;
⑥k=5时
TempData【0】、TempData【1】、TempData【2】=5;
⑦k=6时
TempData【0】、TempData【1】=6;
⑧k=7时
TempData【0】=7;。