可以用外部中断计数,来实现流水灯的正转、暂停、以及反转和爆闪。。这是我前几天写的一个这样的程序,楼主可以结合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;
}
}
module ceshi2(clk,rst,led); //记得改变模块名,跟你的工程名相同
input rst,clk;
output [20:0]led;
//////////////////////基于verilog编写
reg[20:0]led;
reg[25:0]i;
always@(posedge clk or negedge rst)//50m的时钟,20ns的周期,要制造05s间隔
begin
if(!rst)
i<=25'd0;
else if(i==25'd24999999) //05s间隔变换,记数25000000个周期
i<=25'd0;
else
i<=i+1'b1;
end
always@(posedge clk or negedge rst) //控制灯的闪烁
begin
if(!rst)
led<=20'b1111_1111_1111_1111_1111;
else if(i==25'd24999999)
led<=~led;
else
led<=led;
end
endmodule
#include <reg52h> //包括一个52标准内核的头文件
#define uchar unsigned char
/主函数/
void timer0();
void main() // 主程序
{
TMOD=0x01; //定时器0工作方式1
EA=1;
ET0=1; //定时器0中断
TR0=1; //启动定时器0
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while(1); //程序循环
}
/定时器0中断/
void timer0() interrupt 1
{
uchar t;//定义变量
TF0=0;//定时器清0
t++; //中断一次累加1
if(t==20) //预置值,溢出20次就是1秒钟,晶振12MHZ
{
t=0;
P3=~P3; //反转LED灯的亮灭
}
}
//
以上就是关于谁有单片机中3个led灯闪烁控制的流程图与汇编语言,c语言程序全部的内容,包括:谁有单片机中3个led灯闪烁控制的流程图与汇编语言,c语言程序、在fpga上怎么写一个20个led灯闪烁的程序、求51单片机定时LED闪烁程序代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)