矩阵键盘按键的数码管显示矩阵,键盘按键的数码管显示

矩阵键盘按键的数码管显示矩阵,键盘按键的数码管显示
矩阵键盘按键的数码管显示矩阵,键盘按键的数码管显示

一、矩阵键盘按键的数码管显示

1.实验目的

(1)掌握VHDL语言的语法规范,掌握时序电路描述方法

(2)掌握多个数码管动态扫描显示的原理及设计方法

2.实验所用仪器及元器件

计算机一台实验板一块电源线一根扁平线一根下载线一根

3.实验任务

要求设计出4*4矩阵键盘对某一按键按下就在数码管显示一个数字。按键从左上角到右下角依次为1,2, (16)

4.实验原理

按键模块原理

键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。

键盘键值的获取:键盘上的每一个按键其实就是一个开关电路,当某键被按下时,该按键的接点会呈现0的状态,反之,未被按下时则呈现逻辑1的状态。扫描信号由row进入键盘,变化的顺序依次为1110-1101-1011-0111-1110。每一次扫描一排,依次地周而复始。例如现在的扫描信号为1011,代表目前正在扫描9,10,11,12这一排的按键,如果这排当中没有按键被按下的话,则由column 读出的值为1111;反之当9这个按键被按下的话,则由column读出的值为1110。

根据上面所述原理,我们可得到各按键的位置与数码关系如表所示:1110 1110 1110 1110 1101 1101 1101 1101

row

1110 1101 1011 0111 1110 1101 1011 0111 column

1 2 3 4 5 6 7 8

键值

row 1011 1011 1011 1011 0111 0111 0111 0111 column 1110 1101 1011 0111 1110 1101 1011 0111

键值9 10 11 12 13 14 15 16

动态显示原理

为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。

各位数码管的相同段是并联的,段码的输出对各位数码管来说都是相同的。因此在同一时刻如果各位数码管都处于点亮状态,6位数码管将显示相同的字符。若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位处于点亮状态,而其它各位处于灭灯状态。同时,段码输出相应位要显示字符的字型码。这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出要显示的字符。

虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。

总之,多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz ,将看不到闪烁现象。

5.设计思路

该程序可分为两个模块:获取并存储键值模块和动态显示模块 获取并存储键值模块:此次实验只要求仿真而不需要接硬件,因而不存在按键这个动作,所以键盘扫描原理在这里并不适用。在程序设计中我们将row 和column 都设置为输入信号,则低电平出现的行和列所交处即为按键处,以此简单模拟按键。根据上表所列,将对应按键的键值存储在key_code 中。这样就完成了键值的存储。

动态显示模块:此次实验只需用到两个显示数码管,因此只要用一个高频时钟信号控制这两个数码管交替亮灭,并在对应位显示正确的键值,就完成动态显示了。

综上就可以实现矩阵案件的数码管显示了。具体流程图如下:

6.仿真波形

当row=1110,column=1110时,key_code=0000,键值为1,所以第一个数码管不亮,第二个数码管显示1,如下图:

row column 判断按键处,并

得出对应的键值。

将键值存储到key_code 中。

数码管动态显示键值。

显示1,第二个数码管显示6,如下图:

7.硬件实现

以上步骤都完成后,在硬件上实现就比较简单了。此时要注意两个问题:第

一,时钟频率的设置,在仿真时由于没有外在时钟源,所以把row和column都

设置为手动输入,但当在硬件上实现时要采用实验板上的低频时钟源,并设计分频电路提供合适的时钟频率。这就需要对程序做相应的修改;第二,管脚号的编写,根据各实物图纸标号和ATF1508的对应关系编写对应管脚号。

接下来要做的就是硬件连接,然后就是下载程序。程序通过编译后生成*.pof 文件,用pof2jed 软件将文件转换为jed格式,然后用Atmel ISP软件实现下载。如果下载成功的话,就能实现从左上到右下按键分别显示数字1-16。

8.实物展示

二、数码管学号滚动显示

1.实验目的

(1)掌握VHDL语言的语法规范,掌握时序电路描述方法

(2)掌握多个数码管动态扫描显示的原理及设计方法

2.实验所用仪器及元器件

计算机一台实验板一块电源线一根扁平线一根下载线一根

3.实验任务

要求学生在六个数码管滚动显示自己的学号(六位),每隔一定时间循环移位一次,学号为奇数则左移,学号为偶数则右移。间隔时间可由开关选择1秒,2秒,3秒和4秒。

4.实验原理

该实验同样主要用到按键模块和数码管的动态显示,实验原理和实验一所阐述的相同。

5.设计思路

循环右滚动,始终点亮6个数码管,左出右进。状态为:------

主要思路如下:

(1)加入按键控制,主要用到4个键,用来选择不同的移位周期。具体实现方案是引入一个变量time_count,用时钟信号和按键值来控制time_count的累加周期,从而控制移位周期。例如当按2键,key_code=0001,time_count以000,001为周期循环计数(即2s),每循环一次,shift就加1即移位周期为2s(shift控制移位)。以此类推,可以选择1s,2s,3s,4s不同的移位周期。

(2)为实现移位,关键改动为新增一个计数器,计数周期远远大于扫描周期,这样,在一个大的计数周期内,对于要显示的6位数码进行动态扫描,显示出6种移位状态中的一种;在下一个大的周期内,计数变量shift加1。定义led_sel_count来控制初始时刻对应位显示的数字(固定不变的关系),定义led_sel_llb控制数字显示的对应位置,则led_sel_llb=led_sel_count+shift 则代表相对于初始时刻移位shift位后该数字显示的对应位,这样就实现了移位。以此类推,实现循环移位。

(3)按键模块和动态显示模块同实验一

具体流程图如下:

6. 仿真波形

① Row=1110,Column=1110,key_code=0000,shift 的计数周期是1s,即移位周期为1s

② Row=1110,Column=1101,key_code=0001,time_count 以000,001循

Clk 信号

Time_count

Key_code(按

键值)

shift

led_sel_llb=led_sel_count+shift

实现移位

动态显示

Clk_temp 信号

移位模块

移位周期选择模块

动态显示模块

环计数,shift的周期为2s即移位周期为2s

③Row=1110,Column=1011,key_code=0010,time_count以000,001,010循环计数,shift的周期为3s即移位周期为3s

④Row=1110,Column=1110,key_code=0011,time_count以000,001,010,011循环计数,shift的周期为4s即移位周期为4s

7. 硬件实现

这个实验要注意的问题和上一个实验基本相同。这个实验涉及到动态显示,所以还要特别注意Clk和Clk-temp的设置,后者要比前者大的多才能实现动态显示。

程序编译通过后连接硬件并进行下载,下载成功则可以实现学号的动态显示和右移,并通过按键选择右移的周期。

8.体会和建议

由于上学期没有做过软件部分,所以这学期的任务还是比较重的。但是老师给的资料很全,照着资料一步步做下来还比较顺利。但还是发生了一些小插曲,Atmel ISP支持的下载文件类型为*.JED,而JED文件是由POF文件转换而来的。但是我们在编译的文件夹中却找不到POF文件,最后百度得知Quartus6.0版本编译后无法生成POF文件,必须破解到9.0版本才行。还有一开始电源线是坏的,下载一直不成功,但这个问题很快就排查出来了。

之前同学告诉我们下载不成功是因为热插拔冷插拔的原因,后来发现其实那个没什么关系貌似,是下载的电源线有问题。

我觉得课程设计的安排是有必要的,让我学到了很多:首先就是排查故障的方法,在确保软件不出错的情况下找硬件问题,这样一级级排查很有效;

其次就是善于发现问题并有效解决问题的能力。

通过这个阶段的努力把学到的理论知识运用到实践中,更直观也有利于对理论知识的理解。

9.附录(VHDL源程序)

-测试数码管,控制最右边2个数码管动态显示1~16

--40M有源晶振2 脚

--32.768晶振83脚

--数码管a~h 75,76,77,79,80,81,69,70

--6个选择管脚54,55,56,57,58,60

LIBRARY ieee ;

USE ieee.std_logic_1164.all ;

USE ieee.std_logic_unsigned.all ;

--显示模块

ENTITY count2 IS

PORT (

clk : IN STD_LOGIC;--40M高频时钟,也可以接低频时钟,看数码管显示的情况

led_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --数码管8段显示,可显示0~9,A~F

led_sel : buffer STD_LOGIC_VECTOR(5 DOWNTO 0);--选择6个数码管,‘1’表示点亮对应数码管

row : out STD_LOGIC_VECTOR (3 downto 0);--行列式键盘的4行

column : in STD_LOGIC_VECTOR (3 downto 0)--行列式键盘的4列) ;

END count2 ;

ARCHITECTURE Behavior OF count2 IS

SIGNAL clk_temp :STD_LOGIC;--分频后的电路时钟输出

signal data :STD_LOGIC_VECTOR(3 DOWNTO 0);--数码管要显示的数0~15表示1~16 signal led_sel_count :STD_LOGIC;--用于选择第5个和第6个数码管,分别用1和0代表

SIGNAL div_cnt : std_logic_vector(1downto 0);--行扫描驱动

SIGNAL scan_key : std_logic_vector(3 DOWNTO 0); --扫描码寄存器

SIGNAL key_code : std_logic_vector(3 DOWNTO 0); --存储键值

begin

row <= scan_key;

data <= key_code;

PROCESS(clk)--行扫描驱动,产生行扫描的值

BEGIN

IF(clk'EVENT AND clk = '0')THEN

div_cnt <= div_cnt + 1;

END IF;

END PROCESS;

PROCESS(div_cnt)

BEGIN

CASE div_cnt IS

WHEN "00"=> scan_key<="1110";

WHEN "01"=> scan_key<="1101";

WHEN "10"=> scan_key<="1011";

WHEN "11"=> scan_key<="0111";

WHEN OTHERS=>NULL;

END CASE;

END PROCESS;

PROCESS(clk)

BEGIN

IF(clk'EVENT AND clk='1')THEN

CASE scan_key IS --检测何处有键按下

WHEN "1110" =>

CASE column IS

WHEN "1110" =>

key_code <= "0000";

WHEN "1101" =>

key_code <= "0001";

WHEN "1011" =>

key_code <= "0010";

WHEN "0111" =>

key_code <= "0011";

WHEN OTHERS =>

NULL;

END CASE;

WHEN "1101" =>

CASE column IS

WHEN "1110" =>

key_code <= "0100";

WHEN "1101" =>

key_code <= "0101";

WHEN "1011" =>

key_code <= "0110";

WHEN "0111" =>

key_code <= "0111";

WHEN OTHERS =>

NULL;

END CASE;

WHEN "1011" =>

CASE column IS

WHEN "1110" =>

key_code <= "1000";

WHEN "1101" =>

key_code <= "1001";

WHEN "1011" =>

key_code <= "1010";

WHEN "0111" =>

key_code <= "1011";

WHEN OTHERS =>

NULL;

END CASE;

WHEN "0111" =>

CASE column IS

WHEN "1110" =>

key_code <= "1100";

WHEN "1101" =>

key_code <= "1101";

WHEN "1011" =>

key_code <= "1110";

WHEN "0111" =>

key_code <= "1111";

WHEN OTHERS =>

NULL;

END CASE;

WHEN OTHERS =>

key_code <= "1111";

END CASE;

END IF;

END PROCESS;

process (clk)--显示数据

begin

if (clk 'event and clk='0') then--下降沿有效

led_sel_count <= NOT led_sel_count ;--在0和1之间切换

case led_sel_count is

when '0' => led_sel <= "";--点亮第6个数码管

when '1' => led_sel <= "";--点亮第5个数码管

when others => led_sel <= "";

end case;

case data is --显示到对应数码管的数据

when "0000" => if (led_sel_count='0') then --0表示要显示1

led_out <= X"f9"; --数码管6显示1

else led_out <= X"ff"; --数码管5显示空

end if;

led_out <= X"a4"; --数码管6显示2

else led_out <= X"ff"; --数码管5显示空

end if;

when "0010" => if (led_sel_count='0') then --2表示要显示3 led_out <= X"b0"; --数码管6显示3

else led_out <= X"ff"; --数码管5显示空

end if;

when "0011" => if (led_sel_count='0') then --3表示要显示4 led_out <= X"99"; --数码管6显示4

else led_out <= X"ff"; --数码管5显示空

end if;

when "0100" => if (led_sel_count='0') then --4表示要显示5 led_out <= X"92"; --数码管6显示5

else led_out <= X"ff"; --数码管5显示空

end if;

when "0101" => if (led_sel_count='0') then --5表示要显示6 led_out <= X"82"; --数码管6显示6

else led_out <= X"ff"; --数码管5显示空

end if;

when "0110" => if (led_sel_count='0') then --6表示要显示7 led_out <= X"f8"; --数码管6显示7

else led_out <= X"ff"; --数码管5显示空

end if;

when "0111" => if (led_sel_count='0') then --7表示要显示8 led_out <= X"80"; --数码管6显示8

else led_out <= X"ff"; --数码管5显示空

end if;

when "1000" => if (led_sel_count='0') then --8表示要显示9 led_out <= X"90"; --数码管6显示9

else led_out <= X"ff"; --数码管5显示空

end if;

when "1001" => if (led_sel_count='0') then --9表示要显示10 led_out <= X"c0"; --数码管6显示0

else led_out <= X"f9"; --数码管5显示1

end if;

when "1010" => if (led_sel_count='0') then --10表示要显示11 led_out <= X"f9"; --数码管6显示1

else led_out <= X"f9"; --数码管5显示1

end if;

when "1011" => if (led_sel_count='0') then --11表示要显示12 led_out <= X"a4"; --数码管6显示2

else led_out <= X"f9"; --数码管5显示1

end if;

led_out <= X"b0"; --数码管6显示3

else led_out <= X"f9"; --数码管5显示1

end if;

when "1101" => if (led_sel_count='0') then --13表示要显示14

led_out <= X"99"; --数码管6显示4

else led_out <= X"f9"; --数码管5显示1

end if;

when "1110" => if (led_sel_count='0') then --14表示要显示15

led_out <= X"92"; --数码管6显示5

else led_out <= X"f9"; --数码管5显示1

end if;

when "1111" => if (led_sel_count='0') then --15表示要显示16

led_out <= X"82"; --数码管6显示6

else led_out <= X"f9"; --数码管5显示1

end if;

when others => led_out <= X"ff";

end case;

end if;

end process;

end Behavior;

数码管学号滚动显示代码

--测试数码管,控制最右边2个数码管动态显示1~16

--32.768晶振83脚

--数码管a~h 75,76,77,79,80,81,69,70

--6个选择管脚54,55,56,57,58,60

LIBRARY ieee ;

USE ieee.std_logic_1164.all ;

USE ieee.std_logic_unsigned.all ;

--显示模块

ENTITY llb IS

PORT (

clk : IN STD_LOGIC;--接低频时钟32.768KHz,已经进过CD406的5分频

led_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --数码管8段显示,可显示0~9,A~F

led_sel : buffer STD_LOGIC_VECTOR(5 DOWNTO 0);--选择6个数码管,‘1’

表示点亮对应数码管

row : out STD_LOGIC_VECTOR (3 downto 0);--行列式键盘的4行

column : in STD_LOGIC_VECTOR (3 downto 0)--行列式键盘的4列) ;

END llb ;

ARCHITECTURE Behavior OF llb IS

signal clk_temp :std_logic;--用作分频后的电路时钟

signal led_sel_count :std_logic_vector(3 DOWNTO 0);--信号量,6个数码管显示的选择signal div_cnt : std_logic_vector(1 downto 0);--行扫描驱动

signal scan_key : std_logic_vector(3 DOWNTO 0); --扫描码寄存器

signal key_code : std_logic_vector(3 DOWNTO 0); --存储键值

signal shift : std_logic_vector(2 DOWNTO 0):="110";--控制数码管显示的数据右移

begin

row <= scan_key;

PROCESS(clk)--10分频电路

V ARIABLE counter: std_logic_vector(10 downto 0);--计数寄存器,10分频输入时钟为1Hz

BEGIN

IF (clk'EVENT AND clk ='0') THEN --下降沿有效

counter := counter +1 ;

IF (counter = "") THEN

clk_temp <= NOT clk_temp; --分频后的时钟变化

END IF;

END IF;

END PROCESS;

process (clk_temp)--经过分频后以较慢的频率1Hz

V ARIABLE time_count : std_logic_vector(2 DOWNTO 0);

begin

if (clk_temp 'event and clk_temp='0') then--下降沿有效

time_count := time_count + '1' ;

CASE key_code IS

WHEN "0000" =>

shift <=shift - '1'; --数据右移1位

if(shift = "000") then

shift <="110";

end if;

WHEN "0001" =>

if(time_count = "010") then

time_count := "000" ;

shift <=shift - '1'; --数据右移1位

if(shift = "000") then

shift <="110";

end if;

end if;

WHEN "0010" =>

if(time_count = "011") then

time_count := "000" ;

shift <=shift - '1'; --数据右移1位

if(shift = "000") then

shift <="110";

end if;

end if;

WHEN "0011" =>

if(time_count = "100") then

time_count := "000" ;

shift <=shift - '1'; --数据右移1位

if(shift = "000") then

shift <="110";

end if;

end if;

WHEN OTHERS =>

shift <=shift - '1'; --数据右移1位

if(shift = "000") then

shift <="110";

end if;

END CASE;

end if;

end process;

PROCESS(clk)--行扫描驱动,产生行扫描的值

BEGIN

IF(clk'EVENT AND clk = '0')THEN

div_cnt <= div_cnt + 1;

END IF;

END PROCESS;

PROCESS(div_cnt)--产生行扫描的值用于一行一行的轮询4行BEGIN

CASE div_cnt IS

WHEN "00"=> scan_key<="1110";

WHEN "01"=> scan_key<="1101";

WHEN "10"=> scan_key<="1011";

WHEN "11"=> scan_key<="0111";

WHEN OTHERS=>NULL;

END CASE;

END PROCESS;

PROCESS(clk)--读取行列式键盘的键值

BEGIN

IF(clk'EVENT AND clk='1')THEN

CASE scan_key IS --检测何处有键按下

WHEN "1110" =>

CASE column IS

WHEN "1110" =>

key_code <= "0000";

WHEN "1101" =>

key_code <= "0001";

WHEN "1011" =>

key_code <= "0010";

WHEN "0111" =>

key_code <= "0011";

WHEN OTHERS =>

NULL;

END CASE;

WHEN "1101" =>

CASE column IS

WHEN "1110" =>

key_code <= "0100";

WHEN "1101" =>

key_code <= "0101";

WHEN "1011" =>

key_code <= "0110";

WHEN "0111" =>

key_code <= "0111";

WHEN OTHERS =>

NULL;

END CASE;

WHEN "1011" =>

CASE column IS

WHEN "1110" =>

key_code <= "1000";

WHEN "1101" =>

key_code <= "1001";

WHEN "1011" =>

key_code <= "1010";

WHEN "0111" =>

key_code <= "1011";

WHEN OTHERS =>

NULL;

END CASE;

WHEN "0111" =>

CASE column IS

WHEN "1110" =>

key_code <= "1100";

WHEN "1101" =>

key_code <= "1101";

WHEN "1011" =>

key_code <= "1110";

WHEN "0111" =>

key_code <= "1111";

WHEN OTHERS =>

NULL;

END CASE;

WHEN OTHERS =>

key_code <= "1111";

END CASE;

END IF;

END PROCESS;

process (clk)--显示学号

V ARIABLE led_sel_llb :std_logic_vector(3 DOWNTO 0);--信号量,6个数码管显示的选择begin

if (clk 'event and clk='0') then --时钟下降沿有效

if (led_sel_count="0101") then --轮询6个数码管

led_sel_count <="0000";

else

led_sel_count <= led_sel_count+1;

end if;

--0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff

-- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 空

case led_sel_count is --选择要要显示的值

when "0000" => led_out <= X"f9";--位置6,内容1

when "0001" => led_out <= X"c0";--位置5,内容0

when "0010" => led_out <= X"f8";--位置4,内容7

when "0011" => led_out <= X"c0";--位置3,内容0

when "0100" => led_out <= X"f9";--位置2,内容1

when "0101" => led_out <= X"c0";--位置1,内容0

when others => led_out <= X"92";--其他情况下,位置6,内容5

end case;

led_sel_llb := led_sel_count-shift+"0110";--控制左移的程序段

if (led_sel_llb>="0110") then

led_sel_llb :=led_sel_llb - "0110";

end if;

case led_sel_llb is --选择要被点亮的数码管

when "0000" => led_sel <= ""; --位置6,内容1

when "0001" => led_sel <= ""; --位置5,内容0

when "0010" => led_sel <= ""; --位置4,内容7

when "0011" => led_sel <= ""; --位置3,内容0

when "0100" => led_sel <= ""; --位置2,内容1

when "0101" => led_sel <= ""; --位置1,内容0

when others => led_sel <= "";--其他情况下,位置6,内容7

end case;

end if;

end process;

end Behavior;

实验四 数码管显示控制

实验四数码管显示控制 一、实验目的 1、熟悉Keil uVision2软件的使用; 2、掌握LED数码管显示接口技术; 3、理解单片机定时器、中断技术。 二、实验设备及仪器 Keil μVision2软件;单片机开发板;PC机一台 三、实验原理及内容 1、开发板上使用的LED数码管是四位八段共阴数码管(将公共端COM接地GND),其内部结构原理图,如图4.1所示。 图4.1共阴四位八段LED数码管的原理图 图4.1表明共阴四位八段数码管的“位选端”低电平有效,“段选端”高电平有效,即当数码管的位为低电平,且数码管的段为高电平时,相应的段才会被点亮。 实验开发板中LED数码管模块的电路原理图,如图4.2所示。 a~h SP2 SP1 P0.0~P0.3 P0.4~P0.7图4.2 LED数码管模块电路原理图

图中,当P1.0“段控制”有效时,P0.0~P0.7分别对应到数码管的a~h段。当P1.1“位控制”有效时,P0.0~P0.7分别对应到DIG1~DIG8。 训练内容一:轮流点亮数码管来检测数码管是否正常。参考程序: ORG 00H AJMP MAIN MAIN: SETB P1.2;LED流水灯模块锁存器的控制位 MOV P0,#0FFH;关闭LED灯 CLR P1.2 SETB P1.3 ;点阵模块的行控制锁存器 MOV P0,#0 ;关闭点阵行 CLR P1.3 MOV A,#11111110B;数码管“位选信号”初值,低电平有效 LOOP:SETB P1.1;数码管位控制锁存器有效 MOV P0,A CLR P1.1 RL A ;形成新的“位选信号”,为选择下一位数码管做准备 SETB P1.0;数码管段控制锁存器有效 MOV P0,#0FFH ;数码管的所有段点亮,显示“8” CLR P1.0 CALL DELAY SJMP LOOP DELAY:MOV R5,#0;延时子程序 D1: MOV R6,#0 D2:NOP DJNZ R6,D2

4乘4矩阵键盘输入数码管显示四位数

综合课程设计三相步进电机控制器电路的设计 学生姓名__________

指导教师_________ 课程设计任务书 一、设计说明 步进电机是工业过程控制及仪表控制中的主控元件之一,作为执行元件其特点为能够快速起启停、精度高且能直接接收数字量,由于这些特点使其在定位场合得到了广泛的应用。 设计一个三相步进电机控制器,使其能够控制步进电机的工作状态,如步进电机正、反转,步进电机的工作方式等。 用键盘设定步进电机的工作频率,工作方式,并用数码管显示设定值,可以通过按键来更换显示内容。用示波器观测三相的输出波形,并用数码管显示电路的工作状态。 二、技术指标 步进电机的工作频率为:<10kHz 三、设计要求 1.进行方案论证,提出一个合理的设计方案并进行理论设计; 2.对所设计的方案部分进行调试; 3.在选择器件时,应考虑成本。 4.设计测量调试电路。 四、实验要求 1.根据技术指标制定实验方案;验证所设计的电路。 2.进行实验数据处理和分析。 五、推荐参考资料 1?谢自美?电子线路设计?实验?测试.[M]武汉:华中理工大学出版社,2000 年 2. 阎石. 数字电子技术基础. [M] 北京:高等教育出版社,2006年 3. 童诗白、华成英.模拟电子技术基础. [M] 北京:高等教育出版社,2006年 4..付家才. 电子实验与实践. [M] 北京:高等教育出版社,2004年 5.沙占友、李学芝著.中外数字万用表电路原理与维修技术. [M] 北京:人民 邮电出版社,1993年

六、按照要求撰写课程设计报告成绩评定表

一、概述 本次毕设的题目是:三相步进电机控制电路的设计。本次毕设使用80C51单片机作为主控芯片,利用ULN2003A集成电路作为三相步进电机的驱动电路,采用单极性驱动方式,使三相步进电机能在(1)三相单三拍,(2)三相双三拍, (3)三相六拍三种工作方式下正常工作;能实现的功能有:启动/停止控制、方向控制;速度控制;用LED数码管显示工作方式。键盘输入工作频率。本次课程设计采用80C51单片机作为主控芯片,程序采用C语言来编写,驱动电路采用ULN2003A集成电路,显示采用 7SEG-MPX4-CC卩四位共阴数码管,P0接段码,并用8只1K欧左右电阻上拉。P2的4位10 口接位选码。正转,数码管显示1。反转,数码管显示2.不转,数码管显示0.采用Proteus软件进行仿真。在Keil uVsuon3编程环境下编程和编译生成HEX文件,导入到 80C51单片机,实现对各个模块的控制,实现我们所需要的功能。 本次课程是对毕业设计的基础设计,即实现4x4键盘输入,数码管显示输入数字的设计。 二、方案论证 1步进电机驱动方案选择 方案1 :使用功率三极管等电子器件搭建成功率驱动电路来驱动电机的运行。这种方案的驱动电路的优点是使用电子器件联接,电路比较简单,但容易受 干扰,信号不够稳定,缺点是器件较大而不便电路的集成,使用时很不方便,联接时容易出错误。 方案2:使用专门的电机驱动芯片ULN2003A来驱动电机运行。驱动芯片的优点是便于电路的集成,且驱动电路简单,驱动信号很稳定,不易受外界环境的干扰,因而设计的三相步进电机控制系统性能更好。 通过对两种方案的比较,我选择方案2使用ULN2003A S机驱动芯片来作为驱动。 2数码管显示方案选择 方案1:把所需要显示的数据通过专用的七段显示译码器(例如7448)的转换输出给LED显示屏。优点是输出比较简单,可以简化程序,但增加了芯片的费用,电路也比较复杂。 方案2:通过程序把所要的数据转化为七段显示的数据,直接通过单片机接 口来显示,其优点是简化了电路,但增加了软件编写的负担。 通过对两种方案进行比较,我选择通过软件编写来输出显示信号,即单片机直接和显示器相连。 3控制状态的读取 方案1:把按键接到单片机的中断口,若有按键按下,单片机接收到中断信 号,再通过软件编写的中断程序来执行中断,优点是接线简单,简化了电路,但软件编写较为复杂,不易掌握。

用51单片机、8255、138、373等实现数码管显示按键数值的程序

姓名专业

学号 2013年10月28日 随着单片机技术的飞速发展,在其推动下,现代的电子产品几乎渗透到了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高。 单片机具有体积小、功能强、应用面广等优点,目前正以前所未见的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有的领地。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机了解计算机原理与结构的最佳选择。现在,这种单片机的使用领域已十分广泛。彩电、冰箱、空调、录像机、VCD、遥控器、游戏机、电饭煲等无处不见单片机的影子,单片机早已深深地融入我们每个人的生活之中。 单片机能大大地提高这些产品的智能性,易用性及节能性等主要性能指标,给我们的生活带来舒适和方便的同时,在工农业生产上也极大地提高了生产效率和产品质量。单片机按用途大体上可分为两类,一种是通用型单片机,另一种是专用型单片机。

课题要求: 用51单片机、8255、138、373等实现数码管显示按键数值的程序 各芯片资料: 1.8255芯片资料如下 用8255A可编程器件扩展并行接口 8255: 有三个八位的并行口:PA、PB、PC。 有三种工作方式:方式0,方式1,方式2。 逻辑结构图: 包含四个部分:●三个并行数据输入输出端口 ●两个工作方式控制电路

●一个读写逻辑控制电路 ●八位总线缓冲器 ⑴.三个并行数据输入输出端口:A口;B口;C口 一般,A口,B口作为数据输入输出端口, C口作为控制/状态信息口,可以分为两个部分,分别与A口和B口配合使用,作为控制信息输出或状态信息输入。⑵.工作方式控制电路 工作方式控制电路有两个:A组控制和B组控制电路, A组控制用来控制A口和C口的上半部分PC7——PC4; B组控制用来控制B口和C口的下半部分PC3——PC0; 两组控制电路具有一个控制命令寄存器,用来接收来自 CPU的数据(控制字),以决定芯片的工作方式,或对 C口按位进行清“0”或者置“1”。 ⑶.总线缓冲器 三态双向八位缓冲器,作为微处理器数据总线与8255之间的接口,用来传送命令、数据及状态信息。 ⑷.读写逻辑控制电路 读写逻辑控制电路接受CPU来的控制信号:读、写、地址及复位信息,根据控制信号的要求,将数据读出,送往CPU,或者将CPU来的信息写入端口。 引脚说明: CS:片选信号,低电平有效,表示芯片被选中;

数电课程设计-数码管显示控制器的设计与实现

课程设计任务书 学生姓名:专业班级: 指导教师:工作单位: 题目: 数码管显示控制器的设计与实现 初始条件: 555定时器、74LS160计数器、74LS161计数器、74LS153数据选择器、74LS48译码器、74LS04非门与数码管、电阻、电容等相关元件。 要求完成的主要任务: 1、设计任务 根据已知条件,完成对数码管显示控制器的设计、装配与调试。 2、设计要求 (1)、能自动一次显示出数字 0、1、2、3、4、5、6、7、8、9(自然数列),1、 3、5、7、9(奇数列), 0、2、 4、6、8(偶数列),0、1、0、1、2、3、4、 5、6、7(音乐符号序列);然后再从头循环; (2)、打开电源自动复位,从自然数列开始显示。 时间安排: 1、2012 年 6 月 8 日分班集中,布置课程设计任务、选题;讲解课设具体实施计划与课程设计报告格式的要求;课设答疑事项。 2、2012 年 6 月 9 日至 2012 年 7 月 3 日完成资料查阅、设计、制作与调试;完成课程设计报告撰写。 3、2012 年 7 月 4 日提交课程设计报告,进行课程设计验收和答辩。 指导教师签名:年月日 系主任(或责任教师)签名:年月日

目录 摘要 (3) Abstact (4) 引言 (5) 1设计背景 (6) 1.1设计任务 (6) 1.2设计要求 (6) 1.3指导思想 (6) 2方案论证 (7) 2.1方案说明 (7) 2.2方案原理 (7) 3电路的设计与分析 (8) 3.1电路的总体设计 (8) 3.2电路的原理框图 (9) 3.3元电路的设计与分析 (9) 3.3.1多谐振荡电路的设计与分析 (9) 3.3.2计数电路的设计与分析 (11) 3.3.3译码显示电路的设计与分析 (13) 4电路仿真、调试与分析 (16) 4.1脉冲产生电路的仿真 (16) 4.2总电路的仿真 (17) 4.3运行结果分析 (17) 5心得与体会 (18) 附录1元器件清单 (19) 附录2参考文献 (20)

4乘4矩阵键盘输入数码管显示四位数

沈阳航空航天大学 综合课程设计三相步进电机控制器电路的设计 班级 94020101 学号 2009040201023 学生姓名 XXXXXXXXX 指导教师常丽东

课程设计任务书 一、设计说明 步进电机是工业过程控制及仪表控制中的主控元件之一,作为执行元件其特点为能够快速起启停、精度高且能直接接收数字量,由于这些特点使其在定位场合得到了广泛的应用。 设计一个三相步进电机控制器,使其能够控制步进电机的工作状态,如步进电机正、反转,步进电机的工作方式等。 用键盘设定步进电机的工作频率,工作方式,并用数码管显示设定值,可以通过按键来更换显示内容。用示波器观测三相的输出波形,并用数码管显示电路的工作状态。 二、技术指标 步进电机的工作频率为:<10kHz 三、设计要求 1.进行方案论证,提出一个合理的设计方案并进行理论设计; 2.对所设计的方案部分进行调试; 3.在选择器件时,应考虑成本。 4.设计测量调试电路。 四、实验要求 1.根据技术指标制定实验方案;验证所设计的电路。 2.进行实验数据处理和分析。 五、推荐参考资料 1.谢自美. 电子线路设计·实验·测试. [M]武汉:华中理工大学出版社,2000年 2.阎石. 数字电子技术基础. [M]北京:高等教育出版社,2006年 3.童诗白、华成英.模拟电子技术基础. [M]北京:高等教育出版社,2006年 4..付家才. 电子实验与实践. [M]北京:高等教育出版社,2004年 5.沙占友、李学芝著.中外数字万用表电路原理与维修技术. [M]北京:人民邮电出版社,1993年

六、按照要求撰写课程设计报告成绩评定表

4×4矩阵键盘数码管显示 最简便易懂的键盘扫描方法

/////4×4矩阵键盘按键为1-16,按键显示0-9、a-f; ////////////////// #include #define uchar unsigned char uchar key=0; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e,0xc0}; void show(uchar key) { P0=table[key];//显示数值 } void Scan_key()//扫描键盘 { uchar m; P1=0xff;//数码管全亮 P2=0x0f;//P2口赋初值低位1高位0 m=P2; switch (m) { case 0x0e: { P2=0xf0;

m=P2; switch (m) { case 0xe0:{key=0;show(key);break;} case 0xd0:{key=1;show(key);break;} case 0xb0:{key=2;show(key);break;} case 0x70:{key=3;show(key);break;} default:break; } break; } case 0x0d: { P2=0xf0; m=P2; switch (m) { case 0xe0:{key=4;show(key);break;} case 0xd0:{key=5;show(key);break;} case 0xb0:{key=6;show(key);break;} case 0x70:{key=7;show(key);break;} default:break; } break; } case 0x0b: { P2=0xf0; m=P2; switch (m) { case 0xe0:{key=8;show(key);break;} case 0xd0:{key=9;show(key);break;} case 0xb0:{key=10;show(key);break;} case 0x70:{key=11;show(key);break;} default:break; } break; } case 0x07: { P2=0xf0; m=P2; switch (m)

实验四 动态显示与矩阵键盘的编程和综合应用设计(学生版)

实验四综合应用设计——数码管动态显示与矩阵键盘的编程 一、实验目的: 1、掌握单片机I/O技术和程序设计等综合知识。 2、了解矩阵式键盘的内部结构和数码管显示的基本原理,掌握至少一种常用的按键识别方法。 3、熟练掌握数码管动态显示和矩阵键盘识别的综合应用。 二、实验内容: 设计一个矩阵键盘的识别和动态显示综合的系统,控制8个8段数码管动态扫描显示4*4矩阵键盘上按下的按键所对应的值。 三、实验要求: 给定一个4*4的矩阵键盘,16个按键对应显示0123456789ABCDE,第1次按下某按键在第一个8段数码管上显示对应的值,第2次在第二个数码管上显示,以此类推,第9次又在第一个数码管上显示,以此循环下去。其中ABCDE在数码管上无法表达,可以用其它代替,例如:B用8表示,D用0表示,E用H表示等。 四、实验设备及实验耗材: 计算机一台,W A VE6000软件模拟器,完成ISP下载的XLISP软件,XL1000单片机综合仿真实验仪一台(8个8段数码管,4*4矩阵键盘一个,89C51一片,9针对9针的串口线一条,USB电缆一条) 五、实验基本原理与方法: 查阅相关资料掌握矩阵式键盘的内部结构,8段数码管动态显示原理和常用的按键识别方法,建议使用按键识别方法中最常用的“行扫描法”编写程序。结合动态显示技术和矩阵键盘识别技术。 六、实验方案设计: 1、采用哪些I/O口完成通信,采用何种按键识别的方法,如何综合动态显示技术和矩 阵键盘识别技术。 2、说明该程序的功能。 3、硬件连接原理图。 七、实验步骤: 1.弄清实验内容和实验要求。 2.学习相关理论知识,提出实验方案,画出程序流程图。

按键控制数码管显示数字加减

#include #define uchar unsigned char #define uint unsigned int uint num=0,num1=0; sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; sbit key4=P3^3; uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delayms(uint x) { uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void display(uint num) { uint shi,ge; shi=num/10; ge=num%10; P0=table[shi]; P1=0xfd; delayms(5); P0=table[ge]; P1=0xfe; delayms(5); } void keyscan() { if(key1==0) { delayms(10); if(key1==0) {num1++; if(num1==60) num1=0; while(!key1) display(num1); } } if(key2==0) { delayms(10); if(key2==0)

{ if(num1==0) num1=60; num1--; while(!key2) display(num1); } } if(key3==0) { delayms(10); if(key3==0) {num1=0; while(!key3) display(num1);} } if(key4==0) { delayms(10); if(key4==0) {TR0=~TR0; while(!key4) display(num1);} } } void main() { TMOD=0x01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; while(1) { keyscan(); display(num1); } } void T()interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; num++;

51单片机控制4个数码管显示

. //使用AT89c51单片机控制四个数码管动态显示0-9999 ,12MHz #include void jiayi();//加1函数 void chufa();//除法函数 void xianshi();//显示函数 void delay();//延时函数 sbit P2_0=P2^0;//个位位码 sbit P2_1=P2^1;//十位位码 sbit P2_2=P2^2;//百位位码 sbit P2_3=P2^3;//千位位码 unsigned char qianwei,baiwei,shiwei,gewei; unsigned int count=0; unsigned char code dis[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极0-9 void main() { while(1) { jiayi(); chufa(); xianshi(); } } void chufa()//将数字的各个位拆开 { qianwei=count/1000;//千位数 baiwei=count%1000/100; //百位数 shiwei=count%100/10; //十位数 gewei=count%10; //个位数 } void jiayi() { count=count+1; if(count==10000) count=0; } void delay()//延时 { unsigned int i,j; for(i=0;i<10;i++) { for(j=0;j<200;j++); } }

LED数码管显示矩阵键盘按键的设计

任务九设计说明2 一、电路原理及仿真图: 二、程序设计: #include #define uchar unsigned char uchar display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0 x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0 x40}; uchar key; void get(){ uchar a; P1=0x0f; //按下按钮// a=P1^0x0f; switch(a) //确定行// { case 1:key=0;break; case 2:key=4;break; case 4:key=8;break; case 8:key=12;break; case 0:key=16;} P1=0xf0; a=P1^0xf0; switch(a) //确定列//{ case 16:key=key+3;break; case 32:key=key+2;break; case 64:key=key+1;break;

case 128:key=key+0;}} void main(){ P0=display[16]; get(); P0=display[key]; } 程序完成两个功能,首先扫描键盘,检测是否有按键按下并计算键值。 然后如果有按键按下则驱动数码管显示相应键值,否则显示”-“符号。 三、设计说明 如电路原理图所示,图中矩阵键盘和P3端口连接,共阳极数码管的段选端和单片机的P0口连接,位选直接接到高电平,使得数码管始终处于选通状态。系统启动后,单片机逐行扫描键盘,当没有按键按下时,驱动数码管显示“-”符号,当检测到有按键按下时,单片机将相应键值对应的数码编码送至P0端口,驱动数码管以十六进制方式显示被按下的按键的键值。四、遇到的问题 首先遇到的问题是系统启动后数码管没有任何显示,仔细查看仿真现象后发现P0口始终为高阻状态,于是怀疑是数码管极性错误。再检查数码管型号后发现果然使用了共阴极数码管,于是换成共阳极数码管后终于有了显示。其次是希望键值从键盘的左下角起始,即左下角键值为0。但由于对键盘的扫描方向理解的不是很透彻,导致调试了很多次,键值排列顺序都不尽人意。不过最终还是达到了设计要求。

单片机实验报告——矩阵键盘数码管显示

单片机实验报告 信息处理实验 实验二矩阵键盘 专业:电气工程及其自动化 指导老师:高哲 组员:明洪开张鸿伟张谦赵智奇 学号:152703117 \152703115\152703118\152703114室温:18 ℃日期:2017 年10 月25日

矩阵键盘 一、实验内容 1、编写程序,做到在键盘上每按一个键(0-F)用数码管将该建对应的名字显示出来。按其它键没有结果。 二、实验目的 1、学习独立式按键的查询识别方法。 2、非编码矩阵键盘的行反转法识别方法。 3、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。 4、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。 5、掌握利用Keil51软件对程序进行编译。 6、会根据实际功能,正确选择单片机功能接线,编制正确程序。对实验结果 能做出分析和解释,能写出符合规格的实验报告。 三、实验原理 1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。 2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。 3、识别键的闭合,通常采用行扫描法和行反转法。行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然

后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。 行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。 由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。 行反转法识别按键的过程是:首先,将4个行线作为输出,将其全部置0,4个列线作为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键是“4”,则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。

单片机课设数码管显示滚动控制

《单片机设计与实训》 设计报告 题目:数码管滚动显示控制姓名:王伟杰 班级:自动化四班 学号: 2014550430 指导老师:张莹 提交日期: 2016年10月29日

目录 一、设计题目与要求 (4) 1.1设计题目 (4) 1.2设计要求 (4) 二、系统方案设计 (4) 2.1硬件电路设计 (5) 1.单片机最小系统简介 (5) 2.数码管显示电路 (7) 2.3硬件选型及说明 (8) 1. ST89C51单片机 (8) 2. 四位一体七段共阴极显示数码管 (10) 三、系统原理图设计与仿真 (11) 3.1系统仿真图 (11) 3.2系统仿真结果 (12) 四、程序设计 (13) 4.1程序设计 (13) 4.2程序流程图 (15) 五、系统调试 (16) 5.1系统硬件调试 (16) 5.2系统软件调试 (16) 六、总结与体会 (17)

附录一 (19) 附录二 (20) 附录三 (34)

一、设计题目与要求 单片机课程设计是一门实践课程,要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。单片机课程设计内容包括硬件设计、制作及软件编写、调试,学生在熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。单片机课程设计题目包含基本部分及扩展部分,基本部分即单片机最小系统部分,扩展部分是对单片机内部资源及外部IO口的功能扩展,使制作的单片机系统具有一定的功能。 1.1设计题目 数码管滚动显示控制 1.2设计要求 自制一个单片机最小系统,包括串口下载、复位电路,采用两个四位一体数码管作为显示器件,通过按钮选择实现四种滚动显示模式,例如从左至右,从右至左,内缩,外扩等,滚动信息可以是数字或有意义的英文字符。 二、系统方案设计

矩阵键盘数码管显示键值 程序

#include #include #define uchar unsigned char #define uint unsigned int uchar dis_buf; //显示缓存 uchar temp; uchar key; //键顺序吗 void delay0(uchar x); //x*0.14MS #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; // 此表为LED 的字模0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5 E,~0x79,~0x71}; /*************************************************************/ /* */ /* 延时子程序*/ /* */ /*************************************************************/ void delay(uchar x) { uchar j; while((x--)!=0) { for(j=0;j<125;j++) {;} } } /*************************************************************/ /* */ /* 键扫描子程序(4*3 的矩阵) P1.4 P1.5 P1.6 P1.7为行*/ /* P1.1 P1.2 P1.3为列*/ /* */ /*************************************************************/ void keyscan(void)

数码管按键显示

洛 阳 理 工 学 院 仿真文件及keil文件下载单片机原理及接口技术 课程设计报告 题目: 数码管按键显示 系别:电气工程与自动化 班级: B100410 姓名:李奇杰

目录 第一章设计目的及要求 (1) 1.1设计意义 (1) 1.2设计内容 (1) 1.3设计要求 (1) 第二章硬件设计原理与连接 (2) 2.1单片机的选择 (2) 2.2译码器的选择 (3) 2.3数码管的选择 (3) 2.4单片机最小系统 (4) 2.5硬件原理与仿真连接 (4) 第三章汇编程序设计 (5) 3.1程序流程图 (5) 3.2汇编代码 (5) 第四章仿真结果及分析 (6) 4.1仿真结果 (6) 4.2结果分析 (6) 参考文献 (7) 附录 (8)

第一章设计目的及要求 1.1设计意义 在单片机的产品设计中,人机交互是非常重要的分,而且随着系统的日益复杂,以及人们对产品的人机交互能力的要求不断提升,常握单片机系统中的人机界面基础设计能力成为了学习单片机的基础课程,而4X4键盘的操作和LED数码管的动态显示是人机界面设计的基础内容,掌握这些基础设计能力,加深对人机界面的认识,同时提高人机界面系统设计能力。 1.2设计内容 给4×4 键盘的每个键定义一个功能,其中把定义为0~9 的键盘称为数字键,把定义成DEL 的键称为删除键,把定义成ENT 的键成为确认键,其他键称为保留键。 如果是数字键按下,把代表数字显示在数码管上:按键按下时,6 位数码管靠右边显示该键的代表数字;继续按键时,已经显示在数码管上的数字左移一位,按键代表的数字显示在最右边的数码管上。 1.3设计要求 熟练掌握51单片机汇编指令 掌握51单片机I/O接口的用法与注意事项 了解设计步骤与思路 用51单片机驱动4X4矩阵键盘编写相应的扫描式键盘驱动程序 用51单片机驱动数码管静态显示,并自行搭建驱动电路,注意电流 按下按键数码管有相应的显示

矩阵键盘显示电路的设计

二、实验原始数据记录 1.实验现象 当设计文件加载到目标器件后,将数字信号源模块的时钟选择为1KHZ,按下矩阵键盘的某一个键,则在数码管上显示对应的这个键标识的键值,当再按下第二个键的时候前一个键的键值在数码管上左移一位。按下“*”键则在数码管是显示“E”键值。按下“#”键在数码管上显示“F”键值。 2.实验图片记录 湖南科技大学 物理与电子科学学院专业实验报告 实验课程:FPGA 实验原理 实验项目:矩阵键盘显示电路的设计专业:物理与电子科学学院班级:电子信息科学与技术3班姓名:马竞怡学 号: 1308020328 实验日期:年月日

实验报告 一、实验目的内容及步骤 1.实验目的 1)了解普通4×4键盘扫描的原理。2)进一步加深七段码管显示过程的理解。3)了解对输入/输出端口的定义方法。 2..4×4矩阵键盘电路原理图 信号名称 对应FPGA 管脚名 说明 KEY-C0AC18 钜阵键盘的第1列选择KEY-C1AC17钜阵键盘的第2列选择KEY-C2AD17钜阵键盘的第3列选择KEY-C3AC16钜阵键盘的第4列选择KEY-R0AD16钜阵键盘的第1行选择KEY-R1AC15钜阵键盘的第2行选择KEY-R2AD15钜阵键盘的第3行选择KEY-R3 AC14 钜阵键盘的第4行选择 3..实验步骤 1)打开QUARTUSII 软件,新建一个工程。 2)建完工程之后,再新建一个VHDL File,打开VHDL 编辑器对话框。 3)按照实验原理和自己的想法,在VHDL 编辑窗口编写VHDL 程序,用户可参照光 盘中提供的示例程序。 4)编写完VHDL 程序后,保存起来。方法同实验一。 5)对自己编写的VHDL 程序进行编译并仿真,对程序的错误进行修改。 6)编译仿真无误后,依照4X4矩阵键、数码管与FPGA 的管脚连接表(表或参照附 录进行管脚分配。表10-2是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。 7)用下载电缆通过JTAG 口将对应的sof 文件加载到FPGA 中。观察实验结果是否 与自己的编程思想一致。 实验预习报告 一、实验原理及公式 通常在一个键盘中使用了一个瞬时接触开关,并且用如图10-1所示的简单电路,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的I/O 口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的/IO 口的输入将被拉低得到逻辑0。可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。当触点闭合时,其弹起就像一个球。弹起效果将产生如图10-2所示的好几个脉冲。弹起的持续时间通常将维持在5ms ~30ms 之间。如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。 键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。 获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。 (矩阵键盘) 成绩:教师:

按键控制1位LED数码管显示0-9

单片机课程设计 姓名:陈素云 班级:09电力方向2班学号:2

设计题目: 按键控制1位LED数码管显示0-9 设计要求: 通过单片的I/O口与LED数码管所构成的单片机系统的软件编程,使学生掌握简单的单片机系统的设计,同时初步学全用汇编语言和C语言两种方式编程的基本方法。学生必须采用单片机AT89C51为LED显示屏的控制为核心,分别置“1”或“0”,让某些段的LED 发光,其它的熄灭,然后达到显示不同的字符和图符号的目的. 学生根据前期设计的步骤按照设计报告内容的具体要求,选择前期设计的一个典型题目,写出详尽的课程设计报告,重点内容包括方案论证、完整的电路图、软件系统流程图及开发程序、组装调试内容和总结等。

目录 第1节引言 (3) 1.1 LED数码显示器概述 (3) 1.2 设计任务 (5) 1.3设计目的 (6) 第2节AT89C51单片机简介 (6) 2.1 AT89C51单片机 (6) 2.2 单片机管脚图 (7) 2.3管脚说明 (7) 2.4振荡器特性 (9) 第3节设计主程序与硬件电路设计 (9) 3.1设计的主程序 (10) 3.2系统程序所需硬件 (10) 3.2.1所需的硬件 (10) 3.2.2所需硬件的结构图 (11) 3.3 硬件电路总连接图 (12) 第4节程序运行过程 (12) 4.1分析步骤 (12) 4.2 程序执行过程 (13) 第5节程序运行结果 (13) 总结 参考文献

第1节引言 还记得我们小时候玩的“火柴棒游戏”吗,几根火柴棒组合起来,能拼成各种各样的图形,LED数码管显示器实际上也是这么一个东西。在单片机系统中,常常用LED数码数码管显示器来显示各种数字或符号。LED 数码显示器是单片机嵌入式系统中经常使用的显示器件。一个“8”字型的显示模块用“a、b、c、d、e、f、g、h” 8 个发光二极管组合而成。每个发光二极管称为一字段。LED 数码显示器有共阳极和共阴极两种结构形式。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。 1.1 LED数码显示器概述 八段LED数码管显示器由8个发光二极管组成。基中7个长条形的发光管排列成“日”字形,另一个贺点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED数码管显示器有两种不一样的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED数码管显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED 数码管显示器。如下图所示。` 共阴和共阳结构的LED数码管显示器各笔划段名和安排位置是相同的。

4×4矩阵键盘数码管显示 最简便易懂的键盘扫描方法

/////4×4矩阵键盘按键为1-16,按键显示0- 9、a-f; ////////////////// #include #define uchar unsigned char uchar key=0; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0x a1,0x86,0x8e,0xc0}; void show(uchar key){P0=table[key];//显示数值}void Scan_key()//扫描键盘{uchar m; P1=0xff;//数码管全亮 P2=0x0f;//P2口赋初值低位1高位0 m=P2; switch (m){case 0x0e: {P2=0xf0; m=P2; switch (m){case 0xe0:{key=0;show(key);break;} case 0xd0:{key=1;show(key);break;} case 0xb0:{key=2;show(key);break;} case 0x70:{key=3;show(key);break;}

default: break;}break;}case 0x0d: {P2=0xf0; m=P2; switch (m){case 0xe0:{key=4;show(key);break;} case 0xd0:{key=5;show(key);break;} case 0xb0:{key=6;show(key);break;} case 0x70:{key=7;show(key);break;} default: break;}break;}case 0x0b: {P2=0xf0; m=P2; switch (m){case 0xe0:{key=8;show(key);break;} case 0xd0:{key=9;show(key);break;} case 0xb0:{key=10;show(key);break;} case 0x70:{key=11;show(key);break;} default: break;}break;}case 0x07:{P2=0xf0; m=P2; switch (m){case 0xe0:{key=12;show(key);break;} case 0xd0:{key=13;show(key);break;}

数码管显示4×4矩阵键盘的键盘号--万意

数码管显示4X4矩阵键盘的键盘号 学院:物理与电子工程学院 专业:自动化 班级:13级7班 学号: 姓名:万意 指导教师:马世榜 日期:2013年12月31日 目录 1引言 (1) 2设计方案 (2) 3硬件设计 (2) AT89S51 (2) 4*4矩阵式键盘 (5) 矩阵式键盘介绍 (5) 键盘扫描原理 (6) 硬件电路连接 (9)

单片机时钟电路 (9) 单片机复位电路 (9) 矩阵式键盘电路 (9) LED数码管显示电路 (9) 4软件设计 (11) 所用软件简介 (11) Keil (11) Proteus (11) 程序流程图 (13) 源程序 (14) 5电路原理图 (16) 参考文献 (17)

1引言 矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。 4*4矩阵式键盘采用AT89S51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用汇编语言编程。单片机将检测到的按键信号转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

2设计方案 单片机的P1口的~连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。本论文主要研究单片机控制的键盘识别显示系统,分别对按键信息和显示电路以及软、硬件各个部分进行研究。 主要内容如下: ①根据矩阵式键盘的特点,进行键盘控制系统的整体研究与设计; ② LED实时显示按键信息; ③采用软件编程的方法实现按键信息的提取和显示。

相关文档
最新文档