❶ 单片机三种亮灯方式,时间间隔1秒,用到中断
非精确延时控制
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit led P1^0;
void delay(uint x)
{
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void main()
{
P1=0xff;
while(1)
{
led=0;
delay(1000);
led=1;
delay(1000);
}
}
定时器控制
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint num;
sbit led=P1^0;
void main()
{
uchar counter;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(1)
{
if(TF0==1)
{
TR0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
counter++;
}
if(counter==20)
{
counter=0;
led=~led;
}
中断控制,来一个中断就跳转到中断里的程序
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void init()
{
IT0=1;
EX0=1;
EA=1;
}
void main()
{
uchar i,temp;
temp=0xfe;
init();
while(1)
{
for(i=0;i<8;i++)
{
P1=temp;
delay(500);
temp=_crol_(temp,1);
}
}
}
void timer1() interrupt 0
{
uchar i;
for(i=0;i<6;i++)
{
P1=0x00;
delay(1000);
P1=0xff;
delay(1000);
}
}
没有用keil运行了,纯手打,看了看,应该是没有问题的
❷ 51单片机亮灯问题
#include<reg51.h>
#include<stdio.h>
#include<intrins.h>
void delay(void)
{
unsigned char a,b,c;
for(c=50;c>0;c--)
for(b=140;b>0;b--)
for(a=16;a>0;a--);
_nop_();
}
void main(void)
{
int i,j;
P1=0x00;
for(i=0;i<10;i++)//奇偶闪烁,间隔1s
{
P1=0xAA;
delay();
P1=0x55;
delay();
}
P1=0x00;
P1=0x01;
for(j=0;j<10;j++)//10次从左到右流水灯
for(i=0;i<8;i++)
{
delay();
P1=_crol_(P1,1);
}
P1=0XFF;
while(1);
}
❸ 关于51单片机的一个亮灯程序
不知道你说的是啥板子,但是就现象而言,如果P0=0xff全灭而P0=0x01时只有数码管亮,那么很可能你送P0=0xfe就只有灯亮了,因当P0=0x01=0000 0001时恰好是前7位得电点亮一个8字。
❹ 单片机c语言按键亮灯
这个应该不用加按键消抖吧,而且你的意思是按下P5^0后变为P5=0x4f吗?是的话,改成这样:
void main ()
{
Init_Device();
do
{
P5=0x3f;
while (P5^0==0)
P5=0x4f;
} while(1);
不过这加入死循环了,不过应该可以实现上述功能。
❺ 单片机c语言LED灯奇数亮灯。
//LED低电平点亮
//LED1-LED8分别接P2.0-P2.7
#include <REGX51.H>
#define uchar unsigned char
#define uint unsigned int
void delay(unsigned char a) //延时
{
unsigned char i;
while(a--)
for(i=100;i>0;i--);
}
void main(void)
{
uchar i;
P2=0XFF;
while(1)
{
for(i=0;i<8;i=i+2)
{
P2=~(1<<i);
}
}
}
❻ 单片机亮灯系统
这里给你给个单片机控制P1口的8个LED分别亮的程序。如果你需要点亮的不是LED,那就加一个ULN2003A,然后加一个继电器,然后驱动220V的电灯工作。
#include<reg52.h>
unsignedchardis_num[4]={0x05,0x0a,0x50,0xa0};
unsignedcharled_flag=0,led_on;
unsignedchartime_1s=0;
voidmain()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
TR0=1;
P1=0x00;
while(1)
{
if(led_flag==1)
{
led_flag=0;
P1=dis_num[led_on];
}
}
}
voidtimer0_isr(void)interrupt1using1
{
time_1s++;
if(time_1s==20)
{
time_1s=0;
led_flag=1;
led_on++;
if(led_on==4)led_on=0;
}
}
///图片是这个程序中proteus下仿真运行的截图,希望对你有用
❼ 单片机工作状态LED指示灯
我最近做了个测温电路,通过串口传到上位机
led不亮表示温度过低,
长灭短亮表示偏低
常亮表示正常
长亮短灭表示偏高
用定时器计数实现闪烁。一般不用延时,尽量用定时中断。
❽ 怎么用一个LED指示灯用来显示单片机是否正常工作
仿照看门狗的处理方法,零点几秒,能够喂狗一次,这就说明单片机在正常工作。
喂狗的操作,如果没有出来,就说明单片机没有正常工作。
那么,喂狗同时,令 LED 取反,于是,就可以显示出,喂狗在正常进行。
LED 闪动,也就可以说明单片机在正常工作。
LED 静止发光,说明不了单片机正常工作。
只能说明电源,没有掉而已。
❾ 单片机亮灯程序怎么让8盏灯亮10次然后不亮
用51单片机来简单说明一下:
用8只LED代表8盏灯(D1~D8),限流电阻用一个9脚排阻RP1,原理图如下:
以上仅供参考。