-
8位数码管
2021-04-01 08:39:408位数码管 1. 8位段码(0-F,-----) 2. 8位位选(0-8)为减少IO口,用38译码器,用3位二进制输出并行8位十进制 3. 给每个数码管送段码 4. 在某一个时间,只给某一个位选信号,只显示一个数码管 5. 显示完要给...8位数码管
1.循环8位位选 (0-8)为减少IO口,用38译码器,用3位二进制
输出并行8位十进制。在某一个时间,只给某一个位选信号,只显示一个数码管
2. 8位段码 (0-F,-----)给每个数码管送段码
3. 等待10ms---100ms
4. 显示完要给全部位选送断开电平,起消隐的作用
5. 第1步的循环和第4步,利用人眼余辉效应,起显示效果
6. 段码表为一个数组,内部存让数码管显示字符的代码
7. 位选表为一个外部变量数组,内部存每一位将要显示的字符的缓冲变量
-
8位数码管模块资料
2017-04-24 21:26:568位数码管模块资料 -
8位数码管.rar
2017-12-23 15:51:53利用AT89S52单片机上的8位数码管,实现秒表。而且附有虚拟电路图 -
proeus8位数码管仿真
2014-11-18 13:18:20proeus8位数码管仿真 -
单片机8位数码管控制
2014-04-17 22:05:50单片机8位数码管控制 -
8位数码管动态扫描
2014-01-08 17:44:288位数码管动态扫描用Proteus仿真实现8位数码管动态扫描控制。 用Keil C51编程实现上述功能 用Keil与Proteus联调,自动或手动改写显示内容 -
8个8位数码管HC595驱动.zip
2019-10-12 15:05:428个8位数码管,用两个HC595驱动,有原理图,有STM32,89C51,Arduino的例子供参考。 -
基于FPGA的8位数码管扫描显示电路设计
2018-04-14 10:55:53基于FPGA的8位数码管扫描显示电路设计,基于FPGA的8位数码管扫描显示电路设计 -
8位数码管扫描显示
2013-12-03 22:31:40基于verilog的8位数码管扫描显示,仿真成功 -
8位数码管显示函数
2011-12-03 20:31:098位数码管显示函数 -
基于proteus的51单片机仿真实例,8位数码管显示实例
2020-08-13 22:54:04前面讲过1位数码管的显示实例,这次讲的是8位数码管显示实例。 -
8位数码管秒表程序.rar
2009-08-02 22:49:248位数码管秒表程序.rar8位数码管秒表程序.rar8位数码管秒表程序.rar8位数码管秒表程序.rar8位数码管秒表程序.rar8位数码管秒表程序.rar8位数码管秒表程序.rar8位数码管秒表程序.rar8位数码管秒表程序.rar8位数码管... -
74hc595驱动8位数码管电路图及程序
2020-07-16 11:34:3474hc595驱动8位数码管电路图及程序,详见正文 -
单片机控制8位数码管实现数字滚动显示
2020-04-04 14:23:14单片机控制8位数码管实现数字1-8从右向左滚动显示, 当所有的数字滚动完成(数码管上面没有数字)后, 数字重新从右边第一个数码管开始向左滚动显示。 -
8位数码管动态扫描显示(207)
2018-11-12 13:24:41STM8S207串行通讯595控制8位数码管动态扫描显示 接线 PD5 SCLK PD1 DIO PD6 RCLK -
51单片机8位数码管数频电路代码
2018-09-17 10:43:1551单片机8位数码管数频电路代码,要求高位为0不显示,精确到1HZ -
stm8s单片机2位数码管显示_分时复用在8位数码管动态扫描中的应用
2020-12-19 13:42:30在单片机教学中,我们往往会遇到8位数码管的动态显示电路。动态驱动是将所有数码管的8个段码a,b,c,d,e,f,g,dp”的同名端连在一起,公共端各自独立,还为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立...在单片机教学中,我们往往会遇到8位数码管的动态显示电路。动态驱动是将所有数码管的8个段码a,b,c,d,e,f,g,dp”的同名端连在一起,公共端各自独立,还为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O口线控制。通过分时轮流控制各个数码管的“位选端”(COM端),使各个数码管轮流受控显示。
原理图如图①所示。动态扫描程序的基本思路是:
第一步:①P0口输出第一个段码数据②P2口输出位码数据③延时④消隐位码——完成第一位数码显示;第二步:①P0口输出第二个段码数据②P2口输出位码数据③延时④消隐位码——完成第二位数码显示;……继续显示下一个数码,最后直至显示一组画面。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,只要扫描的速度足够快(如扫描频率为50HZ,则扫描速度一般在20ms以内),给人的印象就是一组稳定的显示数据。
但在综合项目的实践中,会发现这种图①显示方式占用的单片机端口多,如果是8位数码管的话,共占用16个脚(8位段码和8个位选端)。如果选用138译码器,则需要3个引脚输出8位位码数据,占用了11个端口。能不能使单片机的多个外部设备共用单片机I/O线来实现“复用”的功能呢?我们对原有的显示电路进行改进:为了节约I/O接口采用了低8位地址与数据总线分时复用的方法。单片机首先由P2、P0口送出16位地址,然后通过P0口读写数据,在整个读写过程中,高8位地址是不变的。单片机在访问外部存储器的时候P0口首先是作为低8位的地址数据线输出地址信号,外接的锁存器74LS373将它锁存后,P0口再写入数据。这个就是P0口双向8位数据口和低8位地址输出口的复用,分时就是先地址后数据,从而达到节约端口的目的。
原理图如图②所示,占用I/O端口变少。单片机的外围可接2片74LS373进行数据锁存。我们分三步来理解这个程序:
首先是片选:单片机的P2.6和P2.7分别接两片74LS373的1脚 /OE(输出使能端),进行位码和段码的片选。只要P2.7为低电平,即可使得U3(74LS373位选锁存芯片)使能端有效;只要P2.6为低电平,可使U2(74LS373段选锁存芯片)使能端有效。
然后是锁存:单片机的/WR端接两片74LS373的控制端LE(11脚)。当LE=“1”时,74LS373输出端1Q—8Q与输入端1D—8D相同;当LE为下降沿时,将输入数据锁存。P0口输出数据稳定后,/WR写选通发出脉冲信号(低电平),P0 输出的段码或位码数据经由74LS373锁存。
最后是显示控制:定义总线,对外部数据进行赋值。P2口输出外部数据存储器其地址的高8位,P0口输出地址低8位,然后由P0口输出赋值数据,此时P2口在整个过程中信号不变(这是关键),整个对外部数据存储器的访问时序详见图③。在ALE信号下降沿时,P0口为低8位地址输出状态①;WR只在P0口输出数据稳定后发出有效脉冲信号(低电平)②。
当P2.6为低电平,选中U2(74LS373位选锁存芯片),P0口输出位码数据给U2锁存;当P2.7为低电平,选中U3(74LS373段选锁存芯片),P0口输出段码数据给U3锁存;然后延时显示、消隐,最后数码管完成动态扫描显示数据。
附1:动态显示八位数控制程序
#include
void delay() //延时程序
{ unsigned char k;
for(k=0;k<200;k++);
}
unsigned chartab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};//设置共阳极0~9字型码
unsigned charval[]={2,0,1,8,1,1,0,8};
void main()
{unsigned chari,j;
while(1)
{for(i=0,j=0x01;i<8;i++) //位选码初值为01H,显示8个位码
{P0=tab[val[i]]; //根据va1[i]值送段选码至P0段选码
P2=~j; //位选码:选中第一位数码管显示
delay(); //延时
P2=0xff; //位消隐
j=j<<1; //位选码左移一位,选中下一位LED
}}}
附2:分时复用动态扫描显示八位数控制程序
#include // 包含reg52.h头文件
unsigned char xdata DM _at_ 0x7fff; //定义总线外部地址段码:DM赋值时,P2赋值为0x7f,P0赋值为0xff
unsigned char xdata PX _at_ 0xbfff; //定义总线外部地址位码:PX赋值时,P2赋值为0xbf,P0赋值为0xff
unsigned charcode smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共阳数码管0~9的段码
unsigned charcom[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位码
unsigned charshuju[]= {2,0,1,8,1,1,0,8}; //需要显示的数据
voiddelay() //延时程序
{ unsigned chark;
for(k=0;k<200;k++);
}
void display()
{
unsigned char i; //定义控制变量
for(i=0;i<8;i++)
{ PX=0xff; //P0口输出赋值数据,WR输出写时序脉冲,位码消隐
DM=smg[shuju[i]]; //P0口输出赋值数据,WR输出写时序脉冲,数据给段码
PX=com[i]; //数据给位码
delay(); //延时显示
}
}
void main()
{ while (1)
{
display(); //调用显示函数
}
}
最后,我们用仿真器下载程序进行烧录,分时复用动态扫描实验现象和图①电路一致。减少端口的方法还有很多,比如选用138译码器,则需要3个引脚输出8位位码数据,占用了11个端口,也不失为一种好办法。
江苏 周 荻 缪耀东
-
51单片机8位数码管电子时钟仿真图及源代码
2020-07-14 16:13:25本文主要讲了51单片机8位数码管电子时钟仿真图及源代码,下面一起来学习一下 -
8位数码管的右移文件
2012-11-24 21:38:498位数码管的相关程序,包含相关的右移动态显示程序 -
8位数码管动态扫描原理演示.c
2011-09-21 09:12:048位数码管动态扫描原理演示.c8位数码管动态扫描原理演示.c8位数码管动态扫描原理演示.c -
8051之8位数码管实现10位学号滚动显示
2018-06-12 18:33:36在8051单片机上实现8位数码管滚动显示10位学号的代码,采用动态显示 -
proteus-8位数码管显示
2012-02-05 10:55:49通过proteus仿真软件,实现8位数码管显示,课堂作业,大家懂的!!! -
8位数码管动态显示实验程序
2012-10-16 20:41:1351单片机8位数码管动态显示,protues仿真电路+c程序 -
51单片机8位数码管动态扫描显示
2012-12-04 20:11:4051单片机 8位数码管动态扫描显示 -
使用SPI接口的74HC595控制-8位数码管显示
2016-12-06 09:52:5574HC595控制8位数码管显示 -
8位数码管低8位显示_矩阵键盘8位数码管显示键值
2020-12-24 13:48:09#includetypedef unsigned char uint8;typedef unsigned int uint16;sbit a=P2^2;sbit b=P2^3;sbit c=P2^4;uint8 smg[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C...#include
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit a=P2^2;
sbit b=P2^3;
sbit c=P2^4;
uint8 smg[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
uint8 sum[8];
uint8 m,button;
void delay(uint16 i) //10ms
{
uint8 j,k;
for(;i>0;i--)
for(j=38;j>0;j--)
for(k=130;k>0;k--);
}
void delay1(uint8 i) //1.3ms
{
uint8 j,k;
for(;i>0;i--)
for(j=10;j>0;j--)
for(k=130;k>0;k--);
}
void keyscan()
{
uint8 value,h,l;
P1=0x0f;
l=P1&0x0f;
if(l!=0x0f)
{
delay(1);
if(l!=0x0f)
{
l=P1&0x0f;
l=l|0xf0;
P1=l;
h=P1&0xf0;
l=l&0x0f;
value=h+l;
button=1; //有按键按下
delay(50); //如果不加这条语句的话,其按键按下一下会显示多个相同数字
switch(value)
{
case 0xe7: m=0;break;
case 0xeb: m=1;break;
case 0xed: m=2;break;
case 0xee: m=3;break;
case 0xd7: m=4;break;
case 0xdb: m=5;break;
case 0xdd: m=6;break;
case 0xde: m=7;break;
case 0xb7: m=8;break;
case 0xbb: m=9;break;
case 0xbd: m=10;break;
case 0xbe: m=11;break;
case 0x77: m=12;break;
case 0x7b: m=13;break;
case 0x7d: m=14;break;
case 0x7e: m=15;break;
default : break;
}
}
}
}
void display() //按键使数字向左移动
{
uint8 i;
for(i=0;i<8;i++)
{
switch(i)
{
case 0: a=1,b=1,c=1;break;
case 1: a=0,b=1,c=1;break;
case 2: a=1,b=0,c=1;break;
case 3: a=0,b=0,c=1;break;
case 4: a=1,b=1,c=0;break;
case 5: a=0,b=1,c=0;break;
case 6: a=1,b=0,c=0;break;
case 7: a=0,b=0,c=0;break;
}
P0=sum[i];;
delay1(1);
P0=0x00;
}
}
/*
void display() //按键使数字向右移动
{
uint8 i;
for(i=0;i<8;i++)
{
switch(i)
{
case 0: a=0,b=0,c=0;break;
case 1: a=1,b=0,c=0;break;
case 2: a=0,b=1,c=0;break;
case 3: a=1,b=1,c=0;break;
case 4: a=0,b=0,c=1;break;
case 5: a=1,b=0,c=1;break;
case 6: a=0,b=1,c=1;break;
case 7: a=1,b=1,c=1;break;
}
P0=sum[i];;
delay1(1);
P0=0x00;
}
}
*/
void main()
{
button=0;
while(1)
{
keyscan();
if(button==1)
{
sum[7]=sum[6];
sum[6]=sum[5];
sum[5]=sum[4];
sum[4]=sum[3];
sum[3]=sum[2];
sum[2]=sum[1];
sum[1]=sum[0];
sum[0]=smg[m];
button=0;
}
display();
}
}
-
4×4键盘及8位数码管显示构成的电子密码锁
2020-08-12 02:20:46用8位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用LED发光二极管亮一秒钟做为提示,同时发出“叮咚”... -
密码锁设计(4×4键盘及8位数码管显示)
2020-08-11 09:56:51用8位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用LED发光二极管亮一秒钟做为提示,同时发出“叮咚”... -
8位数码管显示电路及程序
2011-01-18 11:39:108位数码管显示电路及程序 altium designer keil uversion 4 -
74hc595级联驱动8位数码管
2011-12-27 09:16:2574hc595级联驱动8位数码管,当然也可以级联更多,