跑马灯控制电路设计
单片机闪烁灯跑马灯控制课程设计
单片机闪烁灯跑马灯控制课程设计单片机闪烁灯跑马灯控制课程设计报告一、引言本课程设计旨在通过学习和实践单片机(MCU)编程,实现闪烁灯和跑马灯的控制。
我们将使用嵌入式C语言编程,通过了解单片机的内部结构、电路设计和编程流程,深入理解单片机的工作原理和应用。
二、系统硬件设计本课程设计选用51单片机作为主控芯片,外接8个LED灯和1个按键。
硬件电路设计如下:1.单片机:采用AT89C51,该芯片具有32K字节的Flash存储器,256字节的RAM,以及两个16位定时器/计数器。
2.LED灯:采用普通LED灯珠,与单片机引脚相连,通过编程控制LED灯的亮灭状态。
3.按键:采用机械按键,与单片机的外部中断0(EX0)相连,用于触发闪烁灯和跑马灯的切换。
三、系统软件设计1.闪烁灯模式:在此模式下,8个LED灯将按照一定的频率交替闪烁。
我们可以通过计时器和GPIO口控制LED灯的亮灭状态。
void blink_LED(void) {int i;while(1) {for(i = 0; i < 8; i++) {P1_0 = ~P1_0; // 翻转LED状态delay(500); // 延时,控制闪烁频率}}}2.跑马灯模式:在此模式下,8个LED灯将按照一定的顺序依次点亮。
我们可以通过计时器和GPIO口控制LED灯的亮灭状态。
void marquee_LED(void) {int i;int led_state[8] = {0, 1, 0, 1, 0, 1, 0, 1}; // LED状态数组,初始为交替亮灭while(1) {for(i = 0; i < 8; i++) {P1_0 = led_state[i]; // 设置LED状态delay(50); // 延时,控制跑马灯速度}}}四、按键处理程序我们通过外部中断0(EX0)接收按键信号,当按键按下时,将切换闪烁灯和跑马灯模式。
按键处理程序如下:void EX0_ISR(void) interrupt 0 { // EX0中断服务程序if (key_flag) { // 如果按键已经被按下过if (key_value == 0) { // 如果按键状态为低电平marquee_LED(); // 切换到跑马灯模式key_flag = 0; // 标记按键状态已经改变} else { // 如果按键状态为高电平blink_LED(); // 切换到闪烁灯模式key_flag = 0; // 标记按键状态已经改变}key_value = ~key_value; // 翻转按键状态值} else { // 如果按键还没有被按下过key_value = ~key_value; // 翻转按键状态值if (key_value == 0) { // 如果按键状态为低电平blink_LED(); // 切换到闪烁灯模式key_flag = 1; // 标记按键状态已经改变} else { // 如果按键状态为高电平marquee_LED(); // 切换到跑马灯模式key_flag = 1; // 标记按键状态已经改变}}}。
跑马灯电路的设计与制作[宝典]
一、明确工作任务(5m)
二、知识链接
(一)555定时器的原理(10 m)
电路符号
VC C
RD
v IC
8 5
4
v I1 6
v I2 2
v
, O
7
555 3 vO
1
VC C 电 源
(8 )
控制电 压
v IC (5) v I1 (6)
阈值输 入
5kΩ
C1
5k Ω
v I2 (2)
2. 十进制计数电路CD4017管脚功能表
时钟 INT 复位
输出状态
L
×
×
H
×
×
↑
L
↓
×
×
↑
H
↓
L
不变
L
不变
H
计数器复位(Q0=H,Q1Q9=L)
L
进到下一级
L
不变
L
不变
L
进到下一级
CD4017它是一片十进制计数/分频器,该器件具有10个译码输出端,每个译 码输出端通常处于低电平,在时钟脉冲由低到高的转换过程中依次进入高电平, 每个输出的高电平维持10个时钟周期中的1个时钟周期,输出10进入低电平后 进位输出由低电平转到高,并能与时钟允许端连成N级。
C2
触发输 入
v
, O
(7 )
放电端
5k Ω
(1 )
RD 复 位
(4 )
R&
& S
T
G
&
1 (3)
vO
电路符号
VC C
RD
v IC
8 5
4
v I1 6
《嵌入式技术应用开发项目教程》项目2 跑马灯控制设计
GPIO_AF_SEL(DIGITAL, PB, 1, 0); //设置PB1引脚是数字通道和GPIO功能
GPIO_AF_SEL(DIGITAL, PB, 2, 0); //设置PB2引脚是数字通道和GPIO功能
GPIO_AF_SEL(DIGITAL, PB, 3, 0); //设置PB3引脚是数字通道和GPIO功能
uint16_t temp, i;
void delay(unsigned int count)
//延时函数
{
unsigned int i;
for(;count!=0;count--)
{
i=5000;
while(i--);
}
}
int main()
{
GPIO_AF_SEL(DIGITAL, PB, 0, 0); //设置PB0引脚是数字通道和GPIO功能
3.LED循环点亮控制设计与实现
实施过程:
1.移植工程模板
复制“任务3 LED闪烁控制” 文件夹,然后然后修改文件夹 名为“任务4 LED循环点亮控 制”,USER文件夹下的M0_ LED.uvprojx工程名不用修改 。
2. LED循环点亮控制程序设计
#include <SC32F5832.h>
#include <GPIO.h>
GPIO_AF_SEL(DIGITAL, PB, 7, 0); //设置PB7引脚是数字通道和GPIO功能
PB->OUTEN|=0x00ff;
//PB0~PB7引脚输出使能,既设置PB0~PB7引脚为输出引脚
PB -> OUT = 0x00ff;
//PB0~PB7输出高电平,LED1~LED8熄灭
跑马灯控制电路设计
HDL数字系统课程设计报告书目录一、设计目的2二、设计思路2三、设计过程23.1、系统方案论证23.2、程序代码设计3四、系统调试与结果5五、主要元器件与设备9六、课程设计体会与建议96.1、设计体会96.2、设计建议9七、参考文献10论文摘要:共16个LED灯,连成一排,实现几种灯的组合显示。
通过这次对跑马灯控制电路的设计与制作,了解了设计电路的程序,也了解了关于跑马灯工作的基本原理与设计理念,首先要将一个程序分成几个模块,分别调试每一个模块,当每个模块均能正常工作时,其次再将其都组合在一起再次调试与仿真,最后将程序下载到Altera公司ACEXTM系列EPEK30QC208-2芯片,观察程序是否能控制硬件的实现。
此外,本实验也可通过EDA软件Quartus6.0和modelSim SE 6.0实现。
关键词: HDL数字系统跑马灯设计一、设计目的1、熟悉Verilog HDL程序编程。
2、掌握Altera公司ACEXTM系列EPEK30QC208-2芯片的使用方法。
3、熟悉Quartus II 6.0和Modesim SE 6.0软件的使用。
4、了解16个数码管的显示原理和方法。
二、设计思路1、编写跑马灯设计程序。
2、定义LED灯引脚分配。
3、设计状态控制。
4、下载到EPEK30QC208-2芯片上显示。
三、设计过程3.1、系统方案论证16位LED跑马灯设计框图如图1所示:图1 LED跑马灯设计框图3.2、程序代码设计module paomadeng(rst,clk,sel,led); //端口定义,参数列表input rst,clk; //rst复位,clk为4Hz的时钟信号input[1:0] sel; //sel 状态选择端口output[15:0] led; //led 跑马灯显示reg[15:0] led;reg[15:0] led_r,led_r1;reg t1,dir; //t1控制状态2 led灯的亮次数reg[3:0] t2; //t2控制状态2 led灯的亮次数reg[2:0] t3; //t3控制状态2 led灯的亮次数always(posedge clk)beginif(rst) begin t1<=0;t2<=0;t3<=0;dir<=0;endelsecase(sel)// LED按奇数,偶数依次显示2'b00:beginled_r=16'b0101010101010101;if(t1==0)led<=led_r;else led<=led_r<<1;t1<=t1+1;end// LED顺序依次显示,顺序依次熄灭2'b01:beginif(!dir)beginif(t2==0) begin led_r=16'b0000000000000001;led<=led_r;end else begin led<=(led<<1)+led_r;endif(t2==15) begin dir<=~dir;endt2<=t2+1;endelsebeginif(t2==0) begin led_r=16'b1111111111111110;led<=led_r;endelse begin led<=led<<1; endif(t2==15) begin dir<=~dir;endt2<=t2+1;endend// LED由两侧向中间依次显示,由中间向两侧依次熄灭2'b11:beginif(!dir)beginif(t3==0) beginled_r=16'b0000000000000001;led_r1=16'b1000000000000000;endelsebegin led_r=(led_r<<1)|led_r;led_r1=(led_r1>>1)|led_r1;endled<=led_r|led_r1;if(t3==7)begin dir<=~dir;endt3<=t3+1;endelsebeginif(t3==0) begin led_r=16'b1111111111111110;led_r1=16'b0111111111111111;endelsebegin led_r=led_r<<1;led_r1=led_r1>>1;endled<=led_r&led_r1;if(t3==7)begin dir<=~dir;endt3<=t3+1;endenddefault: ;endcaseendendmodule引脚分配:to,locationrst, pin_47 //复位引脚clk, pin_79//时钟控制引脚sel[0], pin_45 //状态控制引脚sel[1], pin_46//状态控制引脚led[0], pin_19//0—15个LED灯显示引脚led[1], pin_24led[2], pin_25led[3], pin_26led[4], pin_27led[5], pin_28led[6], pin_29led[7], pin_30led[8], pin_31led[9], pin_36led[10], pin_37led[11], pin_38led[12], pin_39led[13], pin_40led[14], pin_41led[15], pin_44四、系统调试与结果1、LED灯和波形结果显示结果如图2,3,4,5,6,7所示图2、先奇数灯亮,即第1、3、5、7、9、11、13、15灯亮图3、偶数灯亮,即第2、4、6、8、10、12、14、16灯亮图4、按照1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16的顺序依次点亮图5、按照1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16的顺序依次熄灭所有灯图6按照1/16、2/15、3/14、4/13、5/12、6/11、7/10、8/9的顺序依次点亮图7、按照1/16、2/15、3/14、4/13、5/12、6/11、7/10、8/9的顺序依次熄灭灯波形显示:图8、LED灯按先奇数,偶数灯亮图9、LED灯依次按顺次亮,顺次熄灭图10,LED灯依次从两边向中间亮,两边向中间熄灭五、主要元器件与设备EDA技术试验箱,EDA软件QuartusⅡ6.0,ModelSim SE 6.0分频芯片:SN74HC04N—2,SN74LS393N—4片LED灯16个LED灯,电脑一台六、课程设计体会与建议6.1、设计体会通过这次对跑马灯控制电路的设计与制作,让我了解了设计电路的程序,也让我了解了关于跑马灯工作的基本原理与设计理念,首先要将一个程序分成几个模块,分别调试每一个模块,当每个模块均能正常工作时,其次再将其都组合在一起再次调试与仿真,最后将程序下载到Altera公司ACEXTM系列EPEK30QC208-2芯片,观察程序是否能控制硬件的实现。
跑马彩灯控制方案
跑马彩灯控制方案简介跑马彩灯是一种常见的装饰灯具,通过控制跑马灯的亮灭、颜色和亮度变化,可以创造出各种炫目的灯光效果。
在节日庆典、宴会场所、夜市、景区等场合,跑马彩灯常常被用于增添气氛。
本文档将介绍一种基于Arduino控制器的跑马彩灯控制方案。
材料准备要实现跑马彩灯控制方案,需要以下材料: 1. Arduino UNO控制器:用于控制跑马彩灯的亮灭和灯光效果。
2. 杜邦线:用于连接Arduino控制器和彩灯。
3. 跑马彩灯电源:用于给彩灯供电。
4. 跑马彩灯:可以根据需求选择适合的跑马彩灯。
硬件连接首先,将Arduino控制器和彩灯电源通过杜邦线连接起来。
将Arduino的GND引脚连接到彩灯电源的负极,并将Arduino的5V引脚连接到彩灯电源的正极。
接下来,将彩灯的控制引脚(通常为数据引脚)连接到Arduino的数字引脚。
具体连接方式取决于所使用的跑马彩灯。
通常,彩灯的控制引脚通过杜邦线连接到Arduino的数字引脚2。
连接完成后,确保所有线路连接牢固可靠,并避免出现短路情况。
软件编程跑马彩灯控制方案使用Arduino编程语言进行编程。
以下是控制彩灯的示例代码:// 跑马彩灯控制示例代码// 定义彩灯控制引脚int ledPin = 2;void setup() {// 设置彩灯引脚为输出模式pinMode(ledPin, OUTPUT);}void loop() {// 点亮彩灯digitalWrite(ledPin, HIGH);// 延时一段时间delay(500); // 延时时间可根据需要进行调整// 熄灭彩灯digitalWrite(ledPin, LOW);// 延时一段时间delay(500); // 延时时间可根据需要进行调整}在上述代码中,我们首先定义了控制彩灯的引脚为数字引脚2。
在setup()函数中,我们将该引脚设置为输出模式。
然后,在loop()函数中,我们通过digitalWrite()函数控制彩灯的亮灭。
实验6 基于FPGA的跑马灯的设计
基于FPGA的跑马灯的设计1、设计要求设计彩灯控制电路:(1)控制8只LED左移、右移、对移和闪烁(2)自动改变显示样式(3)自动进行周期循环2、设计过程(1)原理框图设计图1 彩灯控制器原理框图彩灯控制电路拟采用移位寄存器为核心控制彩灯,实现左移、右移、对移及闪烁功能,并通过模式译码电路改变移位寄存器的模式控制引脚,实现彩灯显示模式的自动、周期性转换。
在移位寄存器处于各种移位状态时,应在其串行移位数据输入端提供显示数据,此功能通过设计数据选通器实现。
彩灯控制电路按照预设时序循环工作,需提供状态及定时信号,此功能由状态计数器对时钟进行分频来实现。
电路时钟由EDA/SOPC实验开发系统提供,此时钟频率较高(1MHZ),因此设计时钟分频器对其进行分频,得到1Hz时钟信号。
电路中,采用74160完成时钟分频,采用74161生成状态信号,采用译码电路完成模式控制,采用74194完成左移、右移、对移及闪烁功能,采用74151完成左移、右移和对移的数据输入选通控制。
(2)电路真值表分析如表1所示。
表1 电路真值表其中:QC1和QC0为状态计数器输出的控制信号;CLK/8为对时钟进行8分频的状态计数器输出信号,CLK/32为对时钟进行32分频的状态计数器输出信号;LED4为左侧74LS194的高位输出信号,LED5为右侧74LS194的低位输出信号;为简化设计,彩灯控制器的状态计数器输出(右移、左移、闪烁)与数据选通器控制端、移位寄存器工作模式(右移、左移、置数)的控制端采用相同逻辑值编码,状态计数器的对移输出与剩余的逻辑值编码(00)相同。
(3)时钟分频器设计107分频(4)状态计数器设计采用二进制计数器74LS161设计,提供时钟的2分频作为闪烁模式的数据信号,8分频作为移位的数据信号,32分频和64分频作为移位数据信号和模式控制信号。
(5)模式译码器设计根据真值表1,经逻辑化简可得:AS=11QCAS⋅QC=+QC=1QC10QCBS⋅QC==QC+QC111QCBS=0QC(6)数据选通器设计(7)移位寄存器设计使用了两片74LS194的左移、右移和置数模式分别实现了LED灯的左移、右移、对移和闪烁。
跑马灯电路设计
跑马灯分析如下:跑马灯电路采用74LS194为核心控制彩灯左移、右移及闪烁功能,围绕74LS194的S1、S0工作的控制方式,S1、S0需要自动周期性的变化,为了实现自动模式转换,设计一个状态计数器,控制彩灯模式转换,利用74153双四选一电路,将S1、S0的状态置入74194,完成周期性地读取。
本设计方案的关键是S1、S0状态信息如何传送给74194,S1、S0状态信息要与整个彩灯控制电路相匹配,不同的S1、S0状态,送入74LS194数据输入端的数据不同,利用74LS153作为数据选通,连接到74LS194数据输入端,不同的工作状态,选通数据输出不同,这是设计的主要关键点之一。
电路中,利用74161完成状态计数工作,每8个时钟脉冲,状态计数器完成加一操作,完成移位方式控制,利用74194完成左移或右移及闪烁功能功能,利用74153完成左右移数据输入选通控制。
根据任务要求列出自动循环状态和74194移位控制工作方式表2。
表2X/0表示电路设计过程中,尽管状态表中取任意态,但在实际电路连接中,取低电平。
彩灯控制器完成左移、右移、闪烁及同时左右移,只需要4种状态,故状态计数器完成模4计数即可。
移位寄存器的工作状态由方式控制字S1、S0决定,查阅74LS194数据手册,确定S1、S0工作方式。
利用表.2,分析S1、S0的状态。
因为彩灯是八路输出,用两片74LS194,其中高位标号为74194B,低位为74194A,所以高位的74LS194工作方式标称为BS1、BS0,低位为AS1、AS0。
将BS1、BS0、AS1、AS0放在一起,用74153将数据状态选通输出即可从表格中可以看出,状态计数器描述计数状态,移位寄存器完成左移、右移、闪烁、左右同时移动功能,且自动循环进行。
2)74153选通电路及74194移位电路控制设计74194功能表该器件具有四种工作方式:同步并行置入、右移、左移、空操作(禁止时钟)。
汇编课程之跑马灯设计报告
太原工业学院汇编语言与微机原理课程设计报告学生姓名:刘创学号:*********系部: 计算机工程系专业: 计算机科学与技术题目: 利用8255实现花式跑马灯成绩指导教师李丽2016年6月28日1.设计内容1)设计电路;2)实现6种不同的跑马灯样式;3)跑马灯的运行状态可由开关控制4)要有暂停跑马灯按钮控制即跑马灯的状态切换。
2.总体设计1)设计原理本实验通过循环检测A口数据,判断按得是哪个开关,如开关1按下,则向AL送01h,并送至B口,循环左移AL达到灯的流水下移,调用延时子程序控制灯闪亮时间,通过BH的赋值控制循环次数,达到时间定时效果。
每循环一个周期,CPU都会检测A口的值,从而能即时切换跑马灯花式。
2)设计跑马灯方案a)按下开关1,跑法1,AL初值01H,循环左移,控制一个亮灯自上而下跑动。
b)按下开关2,跑法2,AL初值81H,循环右移,控制一个亮灯自下而上跑动。
c)按下开关3,跑法3,AL初值0AAH,循环左移,控制间隔4个灯同时闪亮。
d)按下开关4,跑法4,AL初值0C0H,循环右移,控制两个亮灯自下而上跑动。
e)按下按键5,跑法5,AL初值05H,循环左移,控制亮暗亮3灯自上而下跑动。
f)按下开关6,跑法6,AL初值0AAH,循环左移,控制间隔4个灯同时闪亮,相比按键3,跑动时间更长,以显示定功能。
g)按下开关7按下,跑马灯暂停工作,再次按下跑马灯继续工作。
3.硬件设计1)Proteus元件清单及功能说明2)电路设计图a)8086微处理机与锁存器、译码器连接b)8255A与跑马灯开关控制连接图c)8255A与跑马灯LED显示灯连接图4. 软件设计1)程序设计思路利用查询式不断循环查询控制跑马灯样式的开关状态,进而编写程序来控制跑马灯的输出样式。
同时,检测是否暂停跑马灯工作状态的按钮,以及时处理暂停与继续工作状态。
2)程序流程图3)程序代码MarqueeHorseRaceLamp.ASM/*文件名*/ CODE SEGMENTASSUME CS:CODESTART: MOV AL,90HMOV DX,206HOUT DX,ALNOKEY:CALL SCANJNZ NOKEYSCAN PROCMOV AL,0FFHMOV DX,202HOUT DX,ALMOV DX,200HIN AL,DXTEST AL,01HJZ P1TEST AL,02HJZ P2TEST AL,04HJZ P3TEST AL,08HJZ P4TEST AL,10HJZ P5TEST AL,20H JZ P6RETP1:CALL PA1PA1 PROCMOV BH,0MOV BL,01HA1:MOV AL,BLMOV DX,202HOUT DX,ALMOV CX,50000CALL DELAY ROL BL,1CALL STOPCALL SCANCMP BL,01HJNZ J1INC BHJ1:JMP A1PA1 ENDPP2:CALL PA2PA2 PROCMOV BH,0MOV BL,80HA2:MOV AL,BLMOV DX,202H OUT DX,AL CALL DELAY ROR BL,1CALL STOP CALL SCANCMP BL,80HJNZ J2INC BHJ2:JMP A2RETPA2 ENDPP3:CALL PA3PA3 PROCMOV BH,0MOV BL,0AAH A3:MOV AL,BLMOV DX,202H OUT DX,AL CALL DELAY MOV CL,1ROL BL,CL CALL STOP CALL SCAN CMP BL,0AAHJNZ J3INC BHJ3:JMP A3RETPA3 ENDPP4:CALL PA4PA4 PROCMOV BH,0MOV BL,0C0HA4:MOV AL,BLMOV DX,202HOUT DX,ALCALL DELAYMOV CL,1ROR BL,CLCALL STOPCALL SCANCMP BL,0C0HJNZ J4INC BHJ4:JMP A4RETPA4 ENDPP5:CALL PA5 PA5 PROCMOV BH,0MOV BL,05HA5:MOV AL,BLMOV DX,202HOUT DX,ALCALL DELAYROL BL,1CALL STOPCALL SCANCMP BL,05HJNZ J5INC BHCALL RETURNJ5:JMP A5RETPA5 ENDPP6:CALL PA6 PA6 PROCMOV BH,05HMOV BL,0AAHA6: MOV AL,BLMOV DX,202HOUT DX,ALMOV CX,50000CALL DELAYROL BL,1CALL STOPCALL SCANCMP BL,0AAHJNZ J6INC BHCALL RETURNJ6:JMP A6RETPA6 ENDPDELAY PROCMOV CX,50000LOOP1: LOOP LOOP1RETDELAY ENDPRETURN PROC CMP BH,04HJZ NOKEYRETSTOP PROC L1:MOV AL,00HMOV DX,202HOUT DX,ALMOV DX,200HIN AL,DXTEST AL,40HJNZ DONEJMP L1DONE:RETSTOP ENDPRETURN ENDPSCAN ENDPCODE ENDSEND START5. 仿真调试与分析a)连接好完整电路后,加载已经写好的跑马灯程序b)调试已经加载的代码,直至代码无编译错误为止c)启动Proteus调试d)拨动相关控制开关,进而控制跑马灯的工作风格e)调试结果基本符合实验前的设计,跑马灯以正确的工作风格进行工作,符合逻辑,整个实验分析正确f)跑马灯实验设计成功,结束实验6. 结论由于之前曾学习过组成原理,对Proteus的电路连接颇为了解,所以本次的电路连接没有太大的问题。
跑马灯控制系统
跑马灯控制系统
一、要求:将8(16)只发光管编队,按要求(点亮与熄灭的时间间隔、亮的灯与灭的
数量、循环的方向)。
二、分析(方案):要实现上述要求,8只发光管的“亮”与“灭”必须可控,因此,
可用单片机通过程序来实现。
三、硬件电路设计:
图1-1 跑马灯电路图
74LS245的真值表为:
根据电路图画出PCB图并制板,焊接。
四、控制软件设计
从硬件电路图和 74LS245真值表可知:P3口上为低电平的管脚对应的发光管亮,现设三只“亮”一只“灭”,且从上向下移动,则控制程序如下:
ORG 0
CLR C ;C是单片机中的进位标志位(在PSW中,PSW.7)
MOV A,#11H ;11H对应00010001B
LOOP: MOV P3,A ;控制发光管“亮三灭一”
LCALL DELAY ;延时
RL A ;移动,准备下一个状态
LJMP LOOP ;循环
DELAY: MOV R0,#0 ;延时子程序
D1: MOV R1,#0
DJNZ R1,$
DJNZ R0,D1
RET
END
五、建议修改:
1、实现准确定时
2、用16只LED实现
3、实现方向的改变
4、实现时间(速度)的改变
5、……。
iar编写stm8跑马灯
iar编写stm8跑马灯一、介绍STM8跑马灯的背景和意义STM8是一款高性能、低成本的微控制器,广泛应用于各种嵌入式系统中。
跑马灯是一种常见的显示效果,通过STM8实现跑马灯不仅可以展示微控制器的性能,还能为各种应用场景增添趣味性。
本文将详细介绍如何使用STM8编写跑马灯程序,并分享一些实用技巧。
二、硬件电路设计要点1.选择合适的LED灯珠:根据需求选择合适的LED灯珠,如颜色、亮度、间距等。
2.驱动电路:选用合适的驱动电路,如MOSFET、驱动IC等,以满足LED灯珠的电流需求。
3.连接方式:将LED灯珠正确连接到STM8的GPIO端口。
4.电阻配置:根据LED灯珠的电压和电流要求,合理配置限流电阻。
三、软件编程思路与实现1.初始化GPIO:配置GPIO端口为输出模式,设置初始状态。
2.编写主循环:在主循环中,通过移位或循环移位的方式,切换GPIO端口的输出状态。
3.定时器配置:根据需求设置定时器,实现跑马灯的的速度控制。
4.循环次数与速度调整:根据实际效果调整循环次数和速度,以达到最佳效果。
5.优化:根据实际情况,优化程序,提高运行效率和稳定性。
四、调试与优化1.硬件调试:通过观察LED灯珠的显示效果,检查硬件连接和驱动电路是否正确。
2.软件调试:使用串口或其他调试工具,观察程序运行状态,查找问题。
3.优化:根据实际需求和性能指标,对程序进行优化,提高运行效率和稳定性。
五、总结与展望本文详细介绍了如何使用STM8编写跑马灯程序,通过硬件电路设计和软件编程实现了一款趣味性十足的跑马灯。
在实际应用中,可以根据需求调整LED灯珠、驱动电路和程序,实现更多种跑马灯效果。
跑马灯控制电路设计
跑马灯控制电路设计 The Standardization Office was revised on the afternoon of December 13, 2020HDL数字系统课程设计报告书目录一、设计目的.......................... 错误!未定义书签。
二、设计思路.......................... 错误!未定义书签。
三、设计过程.......................... 错误!未定义书签。
、系统方案论证.................... 错误!未定义书签。
、程序代码设计.................... 错误!未定义书签。
四、系统调试与结果.................... 错误!未定义书签。
五、主要元器件与设备.................. 错误!未定义书签。
六、课程设计体会与建议................ 错误!未定义书签。
、设计体会........................ 错误!未定义书签。
、设计建议........................ 错误!未定义书签。
七、参考文献............................. 错误!未定义书签。
论文摘要:共16个LED灯,连成一排,实现几种灯的组合显示。
通过这次对跑马灯控制电路的设计与制作,了解了设计电路的程序,也了解了关于跑马灯工作的基本原理与设计理念,首先要将一个程序分成几个模块,分别调试每一个模块,当每个模块均能正常工作时,其次再将其都组合在一起再次调试与仿真,最后将程序下载到Altera公司ACEXTM系列EPEK30QC208-2芯片,观察程序是否能控制硬件的实现。
此外,本实验也可通过EDA软件和modelSim SE 实现。
关键词: HDL 数字系统跑马灯设计一、设计目的1、熟悉Verilog HDL程序编程。
2、掌握Altera公司ACEXTM系列EPEK30QC208-2芯片的使用方法。
单片机 跑马灯实验精选全文
可编辑修改精选全文完整版实验一跑马灯实验一、实验内容1、基本的流水灯根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。
每点亮一个LED,采用软件延时一段时间。
2、简单键控的流水灯不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。
松手后,又按正序点亮流水灯。
3、键控的流水灯上电,不点亮LED,按一下K1键,按正序点亮流水灯。
按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。
二、实验方案1、总体方案设计考虑到K4键未被使用,所以将实验内容中的三项合并到一个主函数中:K4键代替实验内容第二项中的K1键;单片机一开机即执行实验内容第一项;K1、K2、K3键实现实验内容第三项。
所用硬件:AT89C52、BUTTON、LED-BLUE、电源输入:P2.0-K1;P2.1-K2;P2.2-K3;P2.3-K4。
低电平有效输出:P0.0~P0.7-D0~D7。
LED组连线采用共阳极,低电平有效软件设计:软件延时采用延时函数delay(t),可调整延迟时间:void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}由于涉及到按键变化所以要设置一个变量oldK保留按键键值,要在延时程序中检测是否按键,当按键后立即设置oldK的值。
按键判断采用在while循环中利用条件语句判断P2的值然后执行该键对应的代码段,达到相应的响应。
为了让K4键的效果优化,即状态变化从当前已亮灯开始顺序点亮或逆序点亮,利用全局变量n来记录灯号,利用算法即可实现。
主要算法:1、全局变量的定义:uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;2、顺序、逆序点亮流水灯:void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}3、实验内容第二项流水灯灯亮顺序变换:void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){out=D[n];n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}4、对应实验内容第一项,开机顺序点亮流水灯:while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}2、实验原理图图2-1 实验原理图3、程序流程图图2-2 程序流程图三、源程序#include"reg51.h"#define uchar unsigned char#define uint unsigned int#define out P0uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;//记录当前亮的灯号void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}void delay10ms(){uint i;for(i=0;i<10000;i++);}void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}int delay4(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK){ //按键变化退出循环return 1;}}return 0;}void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}void main(){oldK=K[0];while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}while(1){out=AllOff;if((P2&0x0f)!=0x0f){//检测有键按下delay10ms();//延时10ms再去检测//P2.0_K1键按下正序点亮流水灯if(P2==K[1]){oldK=K[1];while(1){forward();if(P2!=K[1]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.1_K2键按下逆序点亮流水灯if(P2==K[2]){while(1){backward();if(P2!=K[2]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.2_K3键按下关闭全部LEDif(P2==K[3]){oldK=K[3];out=AllOff;}//P2.3_K4键按下长按逆序点亮流水灯,不按正序点亮流水灯,直到其他键按下停止if(P2==K[4]){hold();}}}}四、实验结果1、基本的流水灯:开机后即重复顺序点亮流水灯,等待其他按键。
跑马灯控制设计与实现
② GPIO_Write()函数是向指定IO口写数据,也就是是向寄存器ODR写数 据
n 例如:向PC8写1的代码是: GPIO_WriteBit(GPIOC, GPIO_Pin_8, 1);
n STM32的IO端口操作
n 输入输出函数
1. GPIO_ReadInputDataBit ()函数
n 是读取指定IO口的对应引脚值,也就是读取IDR寄存器的值 n 例如:读取GPIOA.6(既PA6)引脚值:
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6);
2. GPIO_ReadInputData ()函数
n 常用的IO端口寄存器有6个:CRL、CRH、IDR、ODR、BSRR 和BRR。
STM32
项目二 跑马灯控制设计与实现
STM32的GPIO初始化和输入输出库函数
n STM32的IO端口操作
n 在前面,我们围绕STM32的IO端口寄存器如何使用,进行了详 细的介绍。现介绍一下IO口的操作步骤,步骤如下:
1. 调用RCC_APB2PeriphClockCmd()函数,使能IO口时钟; 2. 调用GPIO_Init()函数,初始化IO口参数; 3. 使用IO口操作方法,对IO口进行各种操作。
STM32
项目二 跑马灯控制设计与实现
STM32的GPIO初始化和输入输出库函数
n STM32的IO端口操作
n 初始化函数
3. GPIO_ReadOutputDataBit ()和GPIO_ReadOutputData ()函数
① GPIO_ReadOutputDataBit ()函数是读取指定IO口某个引脚的输出值 ,也就是读取寄存器ODR相应位的值
倒计时光控跑马灯电路设计
电子线路课程设计报告设计课题:倒计时跑马灯倒计时跑马灯一、设计任务该制作能自行识别工作环境,即白天“跑马灯”自行停止运行,待到傍晚天暗下来,数码管自动显示“0”时,说明“跑马灯”电路得电即可以工作运行。
此后手工按下工作键,电路延时十秒钟,在延时的同时,数码管倒计时显示“0-9-8-7-6-5-4-3-3-2-1-0”。
当其从“1-0”瞬间,“跑马灯”立即分两路工作,工作过程是:1)第一路是绿灯红灯(绿灯在前,红灯在后)在黑暗背景中流动。
当绿灯独自从头到尾流动时,这一路的任何变色管不亮,形成黑暗背景。
而绿灯在尾部消失瞬间,红灯立即出现在头部并开始从头部到尾部独自地沿原来绿灯路线在黑暗背景中流动。
当红灯在尾部消失瞬间,绿灯立即出现在头部并开始从头部到尾部独自地沿原来绿灯路线在黑暗背景中流动·····彼此循环往复。
第一路是绿灯红灯(绿灯在前,红灯在后)在橙色背景中流动。
当绿灯独自从头到尾流动时,这一路的变色管显橙色,形成橙色背景。
而绿灯在尾部消失瞬间,红灯立即出现在头部并开始从头部到尾部独自地沿原来绿灯路线在橙色背景中流动。
当红灯在尾部消失瞬间,绿灯立即出现在头部并开始从头部到尾部独自地沿原来绿灯路线在橙色背景中流动·····彼此循环往复。
直到第二天凌晨天亮后,数码管熄灭····再到傍晚时,作品有重复上述过程。
二、设计要求1)电源稳压管输出电压用绿发光二极管指示2)脉冲信号发生器输出用红发光二极管指示3)二路“跑马灯”各用五只变色发光二极管制作4)数码管得电后显示“0”,倒计时只能从“0”开始,经“0-9-8-7-6-5-4-3-3-2-1-0”再停在“0”状态,此间延时十秒。
5)“跑马灯”严格地按照“手动按下工作键后”,当倒计时至“1-0”瞬间开始运动,在运动过程中,数码管始终保持“0”态。
单片机课程设计跑马灯的控制
单片机课程设计跑马灯的控制摘要:本设计选择对跑马灯的控制,先构思跑马灯实现预想效果,然后进行分析,根据要求编写程序,选择硬件端口,并进行调试致预想效果,最后浅谈课程设计的经历,以及总结。
目录一)课程设计的目的二)课程设计的要求三)流程图四)原理图五)程序语言六)总结七)参考资料设计题目:试设计一个闪烁跑马灯控制器,该控制器可以控制8个灯顺序亮灭。
当单片机上电后,8个灯依次从左向右亮,并且每个灯亮的时间为1秒钟。
这时,如果按钮K1按下,则灯亮的顺序是从右向左,同样,每个灯亮的时间是1秒钟。
这时,如果按下按钮K2,则此时,4个灯亮4个灯灭,延迟4秒钟以后,又开始从左向右点亮。
最后,若按下按钮K3,则全部灯亮。
此时若想再次点亮灯,必须重新上电。
题目分析:该题目要求控制8盏灯的亮灭,可使用单片机的P1.0到P1.8口来控制。
按钮K1用P3.4口,K2用P3.2口,及外部中断0,K3用P3.3口,及外部中断1,分别来实现。
单片机使用AT89C52,电源使用5V标准电源。
顺序亮灭使用外部中断源构成循环控制语句。
一、课程设计的目的课程设计是本专业集中实践环节的主要内容之一。
训练正确地应用单片机,培养解决工业控制、工业检测等领域具体问题的能力。
学生通过所做课题,熟悉单片机应用系统开发研制的过程,软硬件设计的工作方法、内容及步骤,对学生进行基本技能训练。
例如组成系统、编程、调试、绘图等。
使学生理论联系实际,提高动手能力和分析问题、解决问题的能力。
通过本课程设计,主要达到以下目的:1.使学生增进对单片机的感性认识,加深对单片机理论方面的理解。
2.使学生掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口、串行口通讯等。
3.使学生了解和掌握单片机应用系统的软/硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。
二、课程设计的要求1.学生需认真阅读课程设计任务书,熟悉有关设计资料及参考资料,熟悉各种设计规范的有关内容,认真完成任务书规定的设计内容。
基于AT89C51单片机的跑马灯电路课程设计
目录1 实验目的 (1)2 元器件清单及简介 (1)3 设计原理及分析 (1)3.1 主要设计要求 (1)3.2 实验总流程图 (2)3.3 实验总图及说明 (3)4 实验中的问题与改进 (3)5 总结 (4)5.1 四级调速 (4)5.2 跑马灯闪烁方向的改变 (5)5.3 跑马灯循环闪烁灯的个数的改变 (6)6 实验分析与心得 (7)参考文献: (9)附录............................................... 错误!未定义书签。
基于AT89C51单片机的跑马灯电路课程设计1实验目的了解AT89C51管脚的基本功能,学会运用Proteus 7.7设计电路,学会运用汇编语言编写程序,来实现跑马灯的左右转换、0.1ms,0.25ms,0.5ms,1ms的四级变速、灯的闪烁个数为1,2,3,4等功能。
使用KEIL C51设计单片机程序,生成HEX文件,将程序烧录到AT89C51芯片中。
然后在实验电路中运行,调试。
2元器件清单及简介3设计原理及分析3.1主要设计要求1.灯的循环左右移动。
2.灯循环闪烁的个数可由1变到4。
3.灯循环闪烁的速度可变,分别是现0.1ms,0.25ms,0.5ms,和1ms的循环转变。
4.能在仿真图和面包板上进行实物运行并实现以上功能。
并能尽量节省器材。
3.2实验总流程图图1实验流程图3.3实验总图及说明图2 实验总图1.右边与P0口相连的8个灯采用上拉电阻方式,采用此方式是因为P0口驱动能力较大,且内部无上拉电阻,因此采用低电平驱动时,需加上拉电阻;且防止因电流过大而烧毁二极管。
2.左边依次与P1.0-P1.5的开关K0、K1、K2、K3、K4、K5,右边与P2.0-P2.3依次相连开关为K6、K7、K8、K9。
3.K0、K1控制灯的闪烁方向;K2、K3、K4、K5控制跑马灯闪烁的速度;K6、K7、K8、K9控制跑马灯灯闪烁的个数。
4.当有开关按下时相应的P口被置0,定时器中扫描P口程序扫描到相应P口为低电平,从而转到相应子程序执行,从而达到1所说功能。
跑马灯的实训设计报告
一、实训目的1. 熟悉单片机的硬件结构和基本工作原理;2. 掌握单片机编程方法,实现跑马灯功能;3. 提高实际操作能力和问题解决能力。
二、实训内容1. 跑马灯电路设计;2. 单片机编程实现跑马灯功能;3. 跑马灯功能测试与调试。
三、实训原理跑马灯是一种常见的电子玩具,主要由单片机、LED灯、按键等组成。
通过单片机控制LED灯的亮灭,实现跑马灯效果。
本实训采用AT89C51单片机作为核心控制单元,通过编程实现跑马灯功能。
四、实训步骤1. 跑马灯电路设计(1)硬件选型:选用AT89C51单片机作为核心控制单元,8个LED灯作为显示单元,2个按键作为控制单元。
(2)电路连接:将AT89C51单片机的P1口与LED灯的正极相连,LED灯的负极通过限流电阻连接到地。
将两个按键分别连接到单片机的P3.0和P3.1口。
2. 单片机编程实现跑马灯功能(1)初始化:设置P1口为输出端口,P3.0和P3.1口为输入端口。
(2)跑马灯程序编写:```c#include <reg51.h>#define LED P1void delay(unsigned int t) {unsigned int i, j;for (i = 0; i < t; i++)for (j = 0; j < 1275; j++); }void main() {unsigned char i = 0;while (1) {LED = 0x01; // 点亮LED1delay(500);LED = 0x02; // 点亮LED2delay(500);LED = 0x04; // 点亮LED3delay(500);LED = 0x08; // 点亮LED4delay(500);LED = 0x10; // 点亮LED5delay(500);LED = 0x20; // 点亮LED6delay(500);LED = 0x40; // 点亮LED7delay(500);LED = 0x80; // 点亮LED8delay(500);for (i = 0; i < 8; i++) {LED = ~(0x01 << i); // 倒序点亮LEDdelay(500);}}}```3. 跑马灯功能测试与调试(1)测试:将编写好的程序烧录到AT89C51单片机中,观察LED灯的跑马灯效果。
(四)开关控制的跑马灯以及流水灯电路图以及程序
(四)开关控制的跑马灯以及流⽔灯电路图以及程序电路图:⽬的:K1 开始跑马灯左->右K2 停⽌K3 跑马灯右-> 左K4 流⽔灯参考程序:#include<reg52.h>#include<intrins.h>#define uchar8 unsigned char#define uint16 unsigned int#define LED P1sbit key1=P2^0;sbit key2=P2^1;sbit key3=P2^2;sbit key4=P2^3;/*****************************/// 函数名称: DelayMS( )// 函数功能:延时// ⼊⼝函数:延时毫秒// 出⼝函数:⽆/************************* void DelayMs(uint16 val){uint16 i,j;for( i=0;i<val;i++)for(j=0;j<113;j++);}/****************************/// 函数名称: keyscan( )// 函数功能:检测按键// ⼊⼝函数:⽆// 出⼝函数: keyscan_num/*****************************/uchar8 keyscan(){uchar8 keyscan_num,temp;P2=0xff; // 置电平temp=P2; // 读P2⼝电平,送⼊ temp 中(因为这时候可能改变按键了)// if(~(temp&0xff)) 不会⽤,先不看,⽤下⾯的if(temp!=0xff) // 说明有键按下{if(key1==0){keyscan_num=1;}else if(key2==0){keyscan_num=2;}else if(key3==0){keyscan_num=3;}else if(key4==0){keyscan_num=4;}else{keyscan_num=2;}}return keyscan_num;}void main(){uchar8 key_num , temp , i ;while(1){key_num = keyscan(); // 将按键扫描的键值送⼊ key_num 中switch(key_num){case1: goto function0;case2: goto function1;case3: goto function2;case4: goto function3;default: break ;}function0: // 跑马灯从左向右⾛temp=0x01; // 0000 0001for(i=0;i<8;i++){LED= ~temp;DelayMs(1000);temp=temp<<1;}key_num = keyscan(); // 将按键扫描的键值送⼊ key_num 中switch(key_num){case1: goto function0;case2: goto function1;case3: goto function2;case4: goto function3;default: goto function0;break ;}function1: //停⽌LED=0xff;key_num = keyscan(); // 将按键扫描的键值送⼊ key_num 中switch(key_num){case1: goto function0;case2: goto function1;case3: goto function2;case4: goto function3;default: goto function1;break ;}function2: // 从右向左temp=0x80; // 1000 0000for(i=0;i<8;i++){LED= ~temp;DelayMs(1000);temp=temp>>1;}key_num = keyscan(); // 将按键扫描的键值送⼊ key_num 中switch(key_num){case1: goto function0;case2: goto function1;case3: goto function2;case4: goto function3;default: goto function2;break ;}function3: // 流⽔灯LED=0xff ; // 这⾥端⼝全被设置为 1111 1111 ,相当于全灭for(i=0;i<8;i++){LED=LED<<1; // 选择了左移循环DelayMs(1000);}key_num = keyscan(); // 将按键扫描的键值送⼊ key_num 中switch(key_num){case1: goto function0;case2: goto function1;case3: goto function2;case4: goto function3;default: goto function3;break ;}}}分析以及相关疑点:1、按键按下,是遵循实验现象了,但是不太好,按其他键不能⽴即响应,当然我们不要求2、实际⽤弹性开关,⽐较好,具体⾃⼰体会,⼀按下松开对程序没影响,。
单只跑马灯移控制程序设计
单只跑马灯控制程序设计一:电路原理图二:题意分析:根据电路原理图可知,若P2口送出高电平,经74ls240反相后为低电平时,发光二极管亮;反之发光二极管不亮。
若要我们的眼能看清亮或灭的效果,必须保证高低电平各稳定1秒的时间。
为便于功能调试控制,按功能分成主程序和延时子程序两个程序模块设计。
其中主模块实现二极管亮或灭控制信号的输出及调整;延时子程序通过执行一段与端口无关的指令实现耗时1秒钟,来达到延时的目的。
三:程序设计流程图:单只跑马灯效果就是单只发光二极管来回跑的效果。
1.主程序设计步骤:整个运行效果为:由效果示意图可知,先执行左移,当左移到边D7位后,再执行右移,当右移到边D0位后,重复上述操作。
控制字有左移初值和右移初值两个。
1)设定启动时发光二极管的初时状态控制字最右的D0位灯亮(左移初始控制字),其他的为灭,其控制字为00000001B = 01H。
2)P2口送出发光二极管状态控制字。
3)稳定P2口信号。
4)检查左移控制字是否到了最左(到左移边界10000000B=80H),若没有到,则转5)执行,否则顺序执行。
a.设右移初始控制字01000000B=40H,b.右移的控制字输出c.稳定信号d.检查右移是否到最右(到右边界00000001B=80H)若有到了,则无条件转1)执行,否则顺序执行e..计算下一个右移控制字f. 无条件转b执行。
5)计算一下个发光二极管状态(亮)的控制字(即由上一个控制字左移1位产生)。
6)无条件返回到2)重复执行。
将上述设计步骤转换为程序设计流程如下图所示。
2.延时1秒钟设计步骤1)若单片机外接晶振频率为12MHz,则单片机的机器时期T=1us。
延时1s=1000000us相当于消耗机器时期数一百万个(执行指令来消耗时间)。
减1条件转移指令DJNZ每执行一次需2个T时间,则1秒钟就需执行指令DJNZ五十万次。
因51系列是8位的单片机,所以每次只最大能赋255,不能直接将五十万这个值赋给寄存器,故只能采用循环方式实现50万这个数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HDL数字系统课程设计报告书
目录
一、设计目的 (2)
二、设计思路 (2)
三、设计过程 (2)
3.1、系统方案论证 (2)
3.2、程序代码设计 (3)
四、系统调试与结果 (5)
五、主要元器件与设备 (9)
六、课程设计体会与建议 (9)
6.1、设计体会 (9)
6.2、设计建议 (9)
七、参考文献 (10)
论文摘要:
共16个LED灯,连成一排,实现几种灯的组合显示。
通过这次对跑马灯控制电路的设计与制作,了解了设计电路的程序,也了解了关于跑马灯工作的基本原理与设计理念,首先要将一个程序分成几个模块,分别调试每一个模块,当每个模块均能正常工作时,其次再将其都组合在一起再次调试与仿真,最后将程序下载到Altera公司ACEXTM系列EPEK30QC208-2芯片,观察程序是否能控制硬件的实现。
此外,本实验也可通过EDA软件Quartus6.0和modelSim SE 6.0实现。
关键词: HDL 数字系统跑马灯设计
一、设计目的
1、熟悉Verilog HDL程序编程。
2、掌握Altera公司ACEXTM系列EPEK30QC208-2芯片的使用方法。
3、熟悉Quartus II 6.0和Modesim SE 6.0软件的使用。
4、了解16个数码管的显示原理和方法。
二、设计思路
1、编写跑马灯设计程序。
2、定义LED灯引脚分配。
3、设计状态控制。
4、下载到EPEK30QC208-2芯片上显示。
三、设计过程
3.1、系统方案论证
16位LED跑马灯设计框图如图1所示:
图1 LED跑马灯设计框图
3.2、程序代码设计
module paomadeng(rst,clk,sel,led); //端口定义,参数列表
input rst,clk; //rst复位,clk为4Hz的时钟信号input[1:0] sel; //sel 状态选择端口
output[15:0] led; //led 跑马灯显示
reg[15:0] led;
reg[15:0] led_r,led_r1;
regt1,dir; //cnt1控制状态2 led灯的亮次数
reg[3:0]t2; //cnt2控制状态2 led灯的亮次数
reg[2:0]t3; //cnt3控制状态2 led灯的亮次数
always(posedge clk)
begin
if(rst) begint1<=0;cnt2<=0;cnt3<=0;dir<=0;end
else
case(sel)
// LED按奇数,偶数依次显示
2'b00:
begin
led_r=16'b10101;
if(cnt1==0)led<=led_r;
else led<=led_r<<1;
t1<=cnt1+1;
end
// LED顺序依次显示,顺序依次熄灭
2'b01:
begin
if(!dir)
begin
if(cnt2==0) begin led_r=16'b00001;led<=led_r;end
else begin led<=(led<<1)+led_r;end
if(cnt2==15) begin dir<=~dir;end
t2<=cnt2+1;
end
else
begin
if(cnt2==0) begin led_r=16'b11110;led<=led_r;end
else begin led<=led<<1; end
if(cnt2==15) begin dir<=~dir;end
t2<=cnt2+1;
end
end
// LED由两侧向中间依次显示,由中间向两侧依次熄灭
2'b11:
begin
if(!dir)
begin
if(cnt3==0) begin
led_r=16'b00001;
led_r1=16'b00000;end
else
begin led_r=(led_r<<1)|led_r;
led_r1=(led_r1>>1)|led_r1;end
led<=led_r|led_r1;
if(cnt3==7)begin dir<=~dir;end
t3<=cnt3+1;
end
else
begin
if(cnt3==0) begin led_r=16'b11110;
led_r1=16'b11111;end
else
begin led_r=led_r<<1;led_r1=led_r1>>1;end
led<=led_r&led_r1;
if(cnt3==7)begin dir<=~dir;end
t3<=cnt3+1;
end
end
default: ;
endcase
end
endmodule
引脚分配:
to,location
rst, pin_47 //复位引脚
clk, pin_79 //时钟控制引脚
sel[0], pin_45 //状态控制引脚
sel[1], pin_46 //状态控制引脚
led[0], pin_19//0—15个LED灯显示引脚
led[1], pin_24
led[2], pin_25
led[3], pin_26
led[4], pin_27
led[5], pin_28
led[6], pin_29
led[7], pin_30
led[8], pin_31
led[9], pin_36
led[10], pin_37
led[11], pin_38
led[12], pin_39
led[13], pin_40
led[14], pin_41
led[15], pin_44
四、系统调试与结果
1、LED灯和波形结果显示结果如图2,3,4,5,6,7所示
图2、先奇数灯亮,即第1、3、5、7、9、11、13、15灯亮
图3、偶数灯亮,即第2、4、6、8、10、12、14、16灯亮
图4、按照1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16的顺序依次点亮
图5、按照1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16的顺序依次熄灭所有灯
图6按照1/16、2/15、3/14、4/13、5/12、6/11、7/10、8/9的顺序依次点亮
图7、按照1/16、2/15、3/14、4/13、5/12、6/11、7/10、8/9的顺序依次熄
灭灯波形显示:
图8、LED灯按先奇数,偶数灯亮
图9、LED灯依次按顺次亮,顺次熄灭
图10,LED灯依次从两边向中间亮,两边向中间熄灭
五、主要元器件与设备
EDA技术试验箱,EDA软件QuartusⅡ6.0,ModelSim SE 6.0
分频芯片:SN74HC04N—2,SN74LS393N—4片
LED灯16个LED灯,电脑一台
六、课程设计体会与建议
6.1、设计体会
通过这次对跑马灯控制电路的设计与制作,让我了解了设计电路的程序,也让我了解了关于跑马灯工作的基本原理与设计理念,首先要将一个程序分成几个模块,分别调试每一个模块,当每个模块均能正常工作时,其次再将其都组合在一起再次调试与仿真,最后将程序下载到Altera公司ACEXTM系列EPEK30QC208-2芯片,观察程序是否能控制硬件的实现。
但是最后的成品却不一定与仿真时完全一样,因为,电路模拟与仿真是在理想的环境下,在实际中因为芯片本身的特性而能够成功。
所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。
此外,本实验也可通过EDA软件Quartus6.0和modelSim SE 6.0实现。
通过这次学习,让我对各种电路的设计和控制都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。
6.2、设计建议
我希望老师在我们动手制作之前应先告诉我们一些关于所做电路的资料、原理,以及如何检测电路的方法,还有关于检测芯片的方法。
这样会有助于我们进一步的进入状态,完成设计。
七、参考文献
[1][美].Palnitkar.VerilogHDL数字设计与综合.:电子工业,2010年;
[2]袁俊泉.verilog HDL数字系统设计及其应用.:电子科技大学,2003年;
[3]黄继业.EDA技术实验教程.:科学.
[4]夏宇闻.verilog数字系统设计教程.:航空航天大学,2008年;
[5]贺敬凯.基于FPGA的专用CPU的设计.: 信息职业技术学院学报,2008年;
[6]松.EDA技术与VHDL.:清华大学,2007年;
[7] 贺敬凯. verilog HDL数字设计教程.:电子科技大学,2010年;
[8]洪伟.基于QuartusⅡ的FPGA/CPLD设计.:电子工业,2010年.。