单片机中断,定时计数器实验

单片机中断,定时计数器实验,第1张

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

名称:流水灯

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

#include<reg52h> //包含头文件

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

延时子程序

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

void delay(unsigned int cnt)

{

while(--cnt);

}

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

主函数

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

main()

{

P1=0xfe; //给初始化值 换算成二进制是1111 1110

while(1)

{

delay(25000);//延时程序

P1<<=1; //左移一位 该语句等效于 P1=P1<<1

P1|=0x01; //最后一位补1,该语句等效于 P1=P1|0x01 符号"|"表示"或"

if(P1==0x7f) //检测是否移到最左端?"=="表示检测符号2端的值是否相等

{

delay(25000);

P1=0xfe; //重新赋值

}

}

} /-----------------------------------------------

定时器0

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

#include<reg52h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit LED=P1^2; //定义LED端口void delay(unsigned int cnt)

{

while(--cnt);

}/------------------------------------------------

定时器初始化子程序

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

void Init_Timer0(void)

{

TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出

TL0=0x00;

EA=1; //总中断打开

ET0=1; //定时器中断打开

TR0=1; //定时器开关打开

}

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

主程序

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

main()

{

Init_Timer0();

int i=0x00;

while(1){

P1=i;

}

}/------------------------------------------------

定时器中断子程序

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

void Timer0_isr(void) interrupt 1 using 1

{

TH0=0x00; //重新赋值

TL0=0x00;

i<<=1;

i|=0x01;

if(i==0x7f)

{

delay(25000);

i=0xfe;

}

} /-----------------------------------------------

外部中断0电平触发------------------------------------------------/

#include<reg52h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

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

延时子程序

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

void delay(unsigned int cnt)

{

while(--cnt);

}

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

主程序

------------------------------------------------/main()

{

P1=0x00; //P1口初始值

EA=1; //全局中断开

EX0=1; //外部中断0开

IT0=0; //电平触发

while(1)

}

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

外部中断程序

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

void ISR_Key(void) interrupt 0 using 1

{

P1++;

}

实验四 七段数码管显示电路一、实验目的实现十六进制计数显示。二、硬件需求EDA/SOPC实验箱一台。三、实验原理七段数码管分共阳极与共阴极两种。共阳极数码管其工作特点是,当笔段电极接低电平,公共阳极接高电平时,相应笔段可以发光。共阴极数码管则与之相反,它是将发光二极管的阴极短接后作为公共阴极,当驱动信号为高电平、公共阴极接低电平时,才能发光。图2-13为共阳极数码管和共阴极数码管的内部结构图。图2-13 共阳极数码管和共阴极数码管的内部结构图用七段数码管除了可以显示0~9的阿拉伯数字外,还可以显示一些英语字母。下表是常见的字母与7段显示关系(共阴极数码管)。

段字母 a b c d e f g

A 0 0 0 1 0 0 0

B 1 1 0 0 0 0 0

C 0 1 1 0 0 0 1

D 1 0 0 0 0 1 0

E 0 1 1 0 0 0 0

F 1 0 0 0 1 1 1

H 0 1 1 0 1 1 1

四、实验内容编写一个0~F轮换显示的电路(注意:选用实验箱中的共阳数码管DP1A,FPGA上P25引脚连接50MHz时钟。实验时为了便于观察,要将50MHz时钟经过分频得到1Hz时钟)。五、实验步骤(1)实验程序LIBRARY IEEE;USE IEEEstd_logic_1164all;USE IEEEstd_logic_unsignedall;ENTITY exp2 ISGENERIC(n:INTEGER :=6);port(clk: IN std_logic;led: OUT std_logic_vector(6 DOWNTO 0));END exp2;ARCHITECTURE example OF exp2 ISSIGNAL sel:INTEGER RANGE 0 TO n-1 :=0;SIGNAL f_out:std_logic;SIGNAL count:INTEGER RANGE 0 TO 15 :=0;

BEGINPROCESS(clk)BEGINIF clk'event and clk='1' THENIF sel>n-2 THEN sel<=0;ELSEIF sel>=n/2 THENf_out<='1';ELSEf_out<='0';END IF;sel<=sel+1;END IF;END IF;END PROCESS;PROCESS(f_out)BEGINIF f_out'event and f_out='1' THENIF count<=15 THENcount<=count+1;ELSEcount<=0;END IF;END IF;END PROCESS;PROCESS(count)BEGINCASE count ISWHEN 0 => led <="0000001";WHEN 1 => led <="1001111";WHEN 2 => led <="0010010";WHEN 3 => led <="0000110";WHEN 4 => led <="1001100";WHEN 5 => led <="0100100";WHEN 6 => led <="0100000";WHEN 7 => led <="0001111";WHEN 8 => led <="0000000";WHEN 9 => led <="0000100";WHEN 10 => led <="1110111";WHEN 11 => led <="0011111";WHEN 12 => led <="1001110";WHEN 13 => led <="0111101";WHEN 14 => led <="1001111";WHEN 15 => led <="0111000";

59

百度文库VIP限时优惠现在开通,立享6亿+VIP内容

立即获取

可编程逻辑器件实验EDA-七段数码管显示电路

实验四 七段数码管显示电路

一、实验目的

实现十六进制计数显示。

二、硬件需求

EDA/SOPC实验箱一台。

三、实验原理

七段数码管分共阳极与共阴极两种。共阳极数码管其工作特点是,当笔段电极接低电平,公共阳极接高电平时,相应笔段可以发光。共阴极数码管则与之相反,它是将发光二极管的阴极短接后作为公共阴极,当驱动信号为高电平、公共阴极接低电平时,才能发光。图2-13为共阳极数码管和共阴极数码管的内部结构图

1实验目的与要求

通过实验, 掌握74163的工作原理和其应用。

2实验设备

硬件:PC机 一台

数字电路实验教学平台 一台

软件:Quartus II集成开发环境

3实验内容

(1) 运用74163实现加法计数,并通过LED灯显示结果;

(2) 运用8count和74138实现跑马灯;

(3) 运用74163实现序列产生器。

4实验预习要求

(1) 仔细阅读课本第三章的计数器,理解计数器原理和功能。

5实验原理

(1) 74163原理图如图1所示。CLRN是低电平有效的同步清0信号,在所有优先信号中优先权最高。LDN是低电平有效的同步置数信号。DCBA是需要置入的并行数据输入端。QA、QB、QC、QD是数据输出。ENT、ENP为计数控制信号,只有当ENT、TNP同时为1时,计数才能计数。RCO是进位输出。通过设置时钟信号和控制信号就可以实现4位加法计数器,在QA~QD数据端接上

LED灯的信号脚就可看到加法结果的输出效果。例如采用74163实现分频计数

的实现电路如图52所示。

(2) 利用8位计数器(8count)实现流水灯的参考逻辑图如图3所示。一个8count可以实现256分频,利用3个8count级联分频,并把末级分频得到的频率接到74138的3个输入端,译码输出端接到8个LED灯上,8个LED灯依次被点亮,这样便实现流水灯的效果。

在数字电路实验教学平台各个LED管对应的FPGA控制管脚如表11所示:

表11 各LED管对应的FPGA控制管脚

拨码开关对应的FPGA控制管脚表12所示:

表12 拨码开关对应控制管脚

按键和蜂鸣器对应的FPGA控制管脚表13所示:

表13 按键和蜂鸣器对应控制管脚

基础实验

1给出 74163实现加法计数电路并分析其原理。

答:逻辑电路设计如图。

2给出利用8count和74138实现流水灯的电路并分析其原理。

答:逻辑电路设计如图。

原理:通过8count对实验板进行分频,并将74138译码器的ABC三端接不同分频,使AB相差两倍,BC相差两倍,模拟CBA从000到111的累加,而74138输出端选中相应的LED灯,实现流水灯效果。

3给出74163实现序列产生器的电路并分析其原理。

答:逻辑电路设计如图。

原理:74151对接入的信号进行选择,并从Y输出端输出。由于74163是一个加法计数器,故74151的ABC端会以一定的频率从000到111,并对D0-D7上的数据进行选择输出。由图所接电路,D0-D7的序列为10101010,若在Y端接一个LED灯,则可以看到LED灯闪烁的现象。

高级实验

以上就是关于单片机中断,定时/计数器实验全部的内容,包括:单片机中断,定时/计数器实验、eda实验如何实现60进制计数器七段数码管的显示、实验五 时序逻辑实验——计数器功能测试及应用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存