可以用外部中断计数,来实现流水灯的正转、暂停、以及反转和爆闪。。这是我前几天写的一个这样的程序,楼主可以结合protues 画图仿真,注意程序中所用到的IO端口就行了。
#include<reg52h>
#include<intrinsh>
#define uchar unsigned char
uchar a,b;
void delay(uchar z)
{
uchar i,j,k;
for(i=z;i>0;i--)
for(k=20;k>0;k--)
for(j=110;j>0;j--);
}
void begain()
{
EA=1;
EX0=1;
IT0=1;
}
void main()
{ a=b=0;
P0=0xfe;
begain();
while(1)
{
if(a==1)
{
P0=_crol_ (P0,1);
delay(50);
}
if(a==3)
{
P0=_cror_(P0,1);
delay(50);
}
if(a==4)
{
P0=0x00;
delay(50);
P0=0xff;
delay(50);
P0=0xfc;
}
if(a==5)
{
a=1;
}
}
}
void int0() interrupt 0
{
a++;
if(a==5)
{
a=1;
}
}
ORG000H\x0d\LJMPMAIN\x0d\ORG000BH;定时器0中断入口\x0d\LJMPLOOP1\x0d\ORG0100H\x0d\MAIN:\x0d\MOVTMOD,#01H;设置定时器工作模式\x0d\MOVTL0,#0EFH;设置定时器初值\x0d\MOVTH0,#0D8H\x0d\SETBEA;打开总中断\x0d\SETBET0;打开定时器0中断\x0d\SETBTR0;启动定时器0\x0d\MOVP0,#0FFH\x0d\MOVR0,#200;延时参数\x0d\LOOP:\x0d\CJNER0,#0,LOOP;延时\x0d\MOVA,#0EFH\x0d\NEXT:\x0d\MOVP0,A;送值\x0d\MOVR0,#50;延时参数\x0d\EXIT:\x0d\CJNER0,#00H,EXIT;延时一会儿\x0d\RLA;A循环左移根据程序分许,该程序完成流水灯功能\x0d\LJMPNEXT\x0d\\x0d\LOOP1:;定时器0中断函数\x0d\MOVTL0,#0EFH;定时器初值\x0d\MOVTH0,#0D8H;定时器初值\x0d\DECR0;\x0d\RETI;中断返回\x0d\END\x0d\有疑问可以追问。
module run_led(clk,rst,led); //module port
input clk;//system clock
input rst;//system reset
output [7:0] led; // 8bits led
reg [7:0] led;
reg [25:0] count;
always @ (posedge clk ) begin
if(rst || count[25]==1) begin
count<=26'b0;
end
else
count<=count+1;
end
always @ (posedge clk) begin
if(rst)
led<=8'b0000_0001;
else begin
if(count[25]==1) begin
led<=((led<<1)+1);
end
end
end
endmodule
这是我自己写的,实验正确符合楼主要求!嘿嘿。。。
用计数器计时即可
LIBRARY IEEE;
USE IEEE。STD-LOGIC-1164。ALL;
ENTITY NAME IS
PORT(---------);
END NAME;
ARCHITECTURE ARC OF NAME IS
SIGANL SIG:---------;
BEGIN
IF ---- THEN 判断条件1为真
------;1灯亮其余不亮
ELSIF ---- THEN 判断条件2为真
------;2灯亮其余不亮
---------;
END ARC;
#include
#defineucharunsignedchar
#defineuintunsignedint
voidDelayms(uintx)
{
uinti,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
voidmain(){
uchari,j;
while(1)
{
j=0x01;//8个流水灯逐个闪动
for(i=0;i
{
P0=~j;
Delayms(300);
j
}
j=0x80;//8个流水灯反向逐个闪动
for(i=0;i
{
P0=~j;
Delayms(300);
j>>=1;
}
}
}
以上就是关于VHDL语言编程,让led3灯以1HZ的频率闪烁,直接在我的上面修改即可全部的内容,包括:VHDL语言编程,让led3灯以1HZ的频率闪烁,直接在我的上面修改即可、单片机流水灯汇编程序是怎样的、用Verilog HDL语言设计流水灯实验程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)