用vhdl设计一个三位数码管动态显示控制电路 怎么做!!!

用vhdl设计一个三位数码管动态显示控制电路 怎么做!!!,第1张

下面是74LS49的VHDL描述,74LS49就是一个驱动共阴极数码管的译码器:

LIBRARY IEEE;

USE IEEEStd_logic_1164ALL;

ENTITY ls49 IS

PORT(bl_n:IN Std_logic;

bi:IN Std_logic_vector(3 DOWNTO 0);

a,b,c,d,e,f,g:OUT Std_logic);

END ls49;

ARCHITECTURE behave_49 OF ls49 IS

SIGNAL s:Std_logic_vector(6 DOWNTO 0);

BEGIN

PROCESS(bi,bl_n)

BEGIN

IF bl_n = ′0′ THEN

s ′0′);

ELSE

CASE bi IS

WHEN ″0000″ => s <= B″011_1111″;

WHEN ″0001″ => s <= B″000_0110″;

WHEN ″0010″ => s <= B″101_1011″;

WHEN ″0011″ => s <= B″100_1111″;

WHEN ″0100″ => s <= B″110_0110″;

WHEN ″0101″ => s <= B″110_1101″;

WHEN ″0110″ => s <= B″111_1101″;

WHEN ″0111″ => s <= B″010_0111″;

WHEN ″1000″ => s <= B″111_1111″;

WHEN ″1001″ => s <= B″110_1111″;

WHEN ″1010″ => s <= B″101_1000″;

WHEN ″1011″ => s <= B″100_1100″;

WHEN ″1100″ => s <= B″110_0010″;

WHEN ″1101″ => s <= B″111_1001″;

WHEN ″1110″ => s <= B″111_1000″;

WHEN ″1111″ => s <= B″000_0000″; -- 熄灭

WHENOTHERS=> s ′0′); -- 熄灭

END CASE;

END IF;

END PROCESS;

a <= s(0);

b <= s(1);

c <= s(2);

d <= s(3);

e <= s(4);

f <= s(5);

g <= s(6);

END behave_49;

Serial Port

你好:

键盘式电子密码锁我用51单片机和pic单片机做出来过,功能和你的要求大致相同,0~9组成的6位密码,有重新输入功能,输入完6位密码后自动判断正误。

具体的过程你可以到我的百度空间里看看,我把程序共享了的,还有设计方法。

希望我的回答能帮助到你。

//51单片机控制3位7段共阴数码管 p0口控制 abcdefg dp ,

//p20-p22控制123位,----注意:没有用P23。

//要使其间隔1S分别显示123,231,321,213无限循环

//下列程序,经过仿真,符合要求。

#include <reg52h>

#define uchar unsigned char

sbit bit1 = P2^0;

sbit bit2 = P2^1;

sbit bit3 = P2^2;

uchar code dulatab[] = //数字编码0-9

{0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

//----------------------------------------------------------------

void delay(uchar time)

{

uchar i, j;

for(i = 0; i < time; i++) for(j = 0; j < 110; j++);

}

//----------------------------------------------------------------

void disp_num(uchar a , b, c)

{

uchar i;

for(i = 1; i < 250; i++) {

P2 = 255; //关显示

P0 = dulatab[a];

bit1 = 0; delay(4);

P2 = 255; //关显示

P0 = dulatab[b];

bit2 = 0; delay(4);

P2 = 255; //关显示

P0 = dulatab[c];

bit3 = 0; delay(4);

}

}

//----------------------------------------------------------------

void main()

{

while(1) {

//要使其间隔1S分别显示123,231,321,213无限循环

disp_num(1, 2, 3);

disp_num(2, 3, 1);

disp_num(3, 2, 1);

disp_num(2 , 1, 3);

// disp_num( , , ); 还想显示内容,楼主可自行编写

// disp_num( , , );

}

}

//----------------------------------------------------------------

数码管显示什么数,不是由数码管本身决定的,而是由计数器电路决定的。所以,进位也与数码管无关,而是决计数器实现的。

如果是用单片机驱动的数码管显示,那就由程序来确定进位了。

所以,这要看你是用什么来控制的显示电路了。

修改如下:

#include<reg51h>

#define uint unsigned int

#define uchar unsigned char 

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

sbit key1=P2^7;

sbit key2=P2^6;

sbit weiH=P3^0;

sbit weiM=P3^1;

sbit weiL=P3^2;

uint num=0,ge=0,shi=0,fen=0,k; //num用来计数,ge为各位显示,shi为十位显示,fen为分钟显示

void delayms(uint xms)

{

uint i,j;

for(i=xms;i>0;i--) //i=xms即延时约xms毫秒

for(j=110;j>0;j--);

}

uchar key1scan(void)

{if(key1==0)

{delayms(10);

if(key1==0)

{while(!key1);

return 1;

}

return 0;

}

uchar key2scan(void)

{if(key2==0)

{delayms(10);

if(key2==0)

{while(!key2);

return 1;

}

}

return 0;

}

void showtime() interrupt 1//时间显示

{

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

num++;

num%=3;

switch(num)

{

case 0:

weiL=1; //显示秒的个位

P1=0xff;

P1=table[ge];

delayms(5);

weiL=0;

break;

case 1:

weiM=1; //显示秒的十位

P1=0xff;

P1=table[shi];

delayms(5);

weiM=0;

break;

case 2:

weiH=1; //显示分钟,只显示0-9

P1=0xff;

P1=table[fen];

delayms(5);

weiH=0;

break;

}

void main()

{

TMOD=0x01;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TR0=1;

ET0=1;

EA=1;

num=0;

while(1)

    {

if((key1scan()==1)&&(key2scan()!=1))break; //按键1按下,按键2未按下开始计时

    }

while(1)

    {

    delay(1000);

    ge++;

    if(ge>9)

        {

        ge=0;

        shi++

        if(shi>5)

            {

            fen++;

            if(fen>9)fen=0;

            }

         }

    showtime();

    }

}

以上就是关于用vhdl设计一个三位数码管动态显示控制电路 怎么做!!!全部的内容,包括:用vhdl设计一个三位数码管动态显示控制电路 怎么做!!!、基于51的用3位数码管 显示单片机控制电子密码锁的设计、51单片机控制3位7段共阴数码管等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9348136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存