单片机led灯亮灭程序1s(单片机led灯亮灭程序灭一秒亮一秒)
51单片机led灯亮一秒停五秒程式怎么写
void delay_s(unsigned char t);
void main()
{
while(1)
{
led = 1;//led 亮
delay_s(1);//延时1s
led = 0;//led 暗
delay_s(5);//延时5s
}
}
这是主循环,你要把delay_s()这个延时函数补充进去,另外,led亮和暗的电平你得根据你得具体电路看是1亮还是0亮。
单片机编程。试编写程序,使LED灯逐个点亮,时间为一秒。先谢谢。
晶振认为是12MHz定时器中断时间为50ms,累计20次中断的时间为1s
这个程序是精确定时的,不像楼上的delay函数定时不精确
#include
#include
unsigned
char
i=0;
void
init();
void
main()
{
init();
while
(1)
{
if(i==20)
{
i=0;
P1=_crol_(P1,1);//循环移位函数
在intrins函数中定义
}
}
}
void
init()
{
TH0=0x3c;
//定时器赋初值定时时间50ms
TL0=0xB0;
TMOD=0x01;
//设置定时器工作方式为方式1
EA=1;
//开总中断
ET0=1;
//开中断允许位
TR0=1;
//定时器计数
P1=0xfe;
//这里假设led灯与P1口相连并且
//低电平有效
}
void
timer0()
interrupt
1
{
TH0=0x3c;
TL0=0xB0;
//溢出后重新赋初值
i++;
//定时器中断时间为50ms
//20次中断时间为1s
}
用五一单片机控制led灯亮两秒灭一秒程序编写
#includereg51.h
void delay1s()
{
unsigned chari,j,k;
for(i=10;i0;i--)
for(k=200;k0;k--)
for(j=250;j0;j--);
}
void delay2s()
{
unsigned chari,j,k;
for(i=20;i0;i--)
for(k=200;k0;k--)
for(j=250;j0;j--);
}
void main()
{
while(1)
{
P1=0x00;
delay2s();
P1=0xff;
delay1s();
}
}
求实现51单片机按下按钮LED灯亮1秒后熄灭?
要实现51单片机按下按钮LED灯亮1秒后熄灭,这很简单,检测到按下按钮后点亮LED灯并开始计时,1秒到就灭灯。用定时器定时并用中断方式,计中断次数,定时×次数=1秒即可。
单片机编程,控制LED延时亮灭的程序,
#includereg51.h
#includeINTRINS.h
#define u16 unsigned int
#define u8 unsigned char
#define Pin0 0x01
#define Pin1 0x02
#define Pin2 0x04
#define Pin3 0x08
#define Pin4 0x10
#define Pin5 0x20
#define Pin6 0x40
#define Pin7 0x80
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
sbit led4=P1^4;
sbit led5=P1^5;
sbit kg1=P3^1;
sbit key2=P3^2;
sbit key3=P3^3;
/****************************************/
void init() //初始化函数
{ TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
}
/////////////////////////
u8 s(){//扫描按键
static u8 ms;
u8 t=0;
// if(key1==0)t|=Pin1;
if(key2==0)t|=Pin2;
if(key3==0)t|=Pin3;
if(t!=0x00){
if(ms100)ms++;
if(ms==5){
return t;
}
}else ms=0;
return 0x00;
}
///////////////////////
typedef struct{
u16 time;//n毫秒后
u8 l; //亮的灯
u8 m; //灭的灯
}ledcmd;
#define LED_CMD_SIZE 10
code ledcmd lcmd[]={
{0,Pin2,0},//0s后 led2亮
{500,Pin4,0,},//0.5s后 led4亮
{1000,0,Pin4},//1s后 led4灭
{300,Pin3,0,},
{300,Pin4,0,},
{1000,0,Pin4,},
{300,0,Pin2,},
{200,Pin5,0,},
{40,0,Pin5|Pin3},
{500,0,Pin1},
};
void led_l(u8 v){//亮灯程序
P1=P1(~v);
}
void led_m(u8 v){//灭灯程序
P1=P1|(v);
}
u8 ledzt=0xff;//led任务zt 为0xff表示待机
u16 ledjs;//倒计时
void led_start(){ //启动程序
ledzt=0;
ledjs=lcmd[ledzt].time;
}
void ledcx(){ //led流程程序
if(ledztLED_CMD_SIZE){
if((ledjs==0)(ledztLED_CMD_SIZE)){//计时到0
ledzt++;
if(ledzt!=LED_CMD_SIZE){
ledjs=lcmd[ledzt].time;
}
}
if(ledzt1){//
led_l(lcmd[ledzt-1].l);
led_m(lcmd[ledzt-1].m);
}
}
}
/***********************************/
void main()//主函数
{
u8 k;
init();//系统初始化
TR0=1; //定时器开始计时
while(1){
if(ledzt==0xff){led1=(kg1!=0);};//led不在运行状态时根据开关改变led1
k=s();//读取按键值
if((kPin2)!=0){//key2
if(led1==0ledzt==0xff){
led_start();
}
}
if((kPin3)!=0){//key3
ledzt=0xff;
led_m(Pin2|Pin4);
}
ledcx();
}
}
/****************************/
void timer0() interrupt 1//1ms定时器
{
TH0=(65536-1000)/256;//重载初值
TL0=(65536-1000)%256;
if(ledjs0)ledjs--;
}
关于单片机led灯亮灭程序1s和单片机led灯亮灭程序灭一秒亮一秒的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。微信号:ymsc_2016
相关文章
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~