① 用51单片机P1口驱动8个LED做循环点亮控制,每个LED占空比50%,周期两秒
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar Counter = 0;
uchar P1LEDBUF = 0x01;//P1口的灯如果亮了7个,就改成0xFE;
main()
{
P1=0x00; //如果灯全亮了,则全部改为0xFF
TMOD = 0x01; //T0工作在定时方式1
TH0 = 0x3C; //T0初值50ms
TL0 = 0xB0;
ET0 = 1; //开启定时器0中断
EA = 1; //开总中断
TR0 = 1; //启动定时器0
while(1);
}
/********************************************/
/* 定时器0中断服务程序 */
/********************************************/
void T0_Serve() interrupt 1
{
TH0 = 0x3c; //每次定时50ms
TL0 = 0xb0;
Counter++;
if(Counter == 20) //中断20次后进入函数,时间刚好1秒(误差可以忽略)
{
Counter = 0; //计数清0
P1 = P1LEDBUF ;
P1LEDBUF =_crol_(P1LEDBUF,1); //位移P1口LED,准备下一轮
//如果灯亮和灭的刚好反了(熄了一个灯,亮了7个)就把初值改了
}
if(Counter == 40)
{
Counter = 0;//计数清0,周期2秒
P1 = 0x00 ;//如果灯全亮了,则改为P1=0xFF;
}
}
② 求!! 如何用C51单片机中断系统实现循环五遍流水灯以后再循环10次闪烁
这个程序很简单的,只要掌握了循环表达方式就可以实现。首先,编写流水灯的循环函数,其次使用for语句进行循环。完成后可以修改画质后同样方法实现闪烁。
③ 51单片机C程序怎样把LED灯从左到右点亮然后又从右到左点亮然后循环
#include<reg51.h>
unsigned char ledtab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}
void delay(unsigned char a)
{
unsigned char i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
unsigned char i;
while(1)
{
for(i=0;i<8;i++){P0=ledtab[i];delay(100);}
for(i=0;i<8;i++){P0=ledtab[7-i];delay(100);}
}
}
④ 51单片机C语言如何实现8个流水灯左移三次,后右移三次;如此循环
51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:
#include<reg51.h>//51单片机头文件
#include<intrins.h>//包含有左右循环移位子函数的库
#defineuintunsignedint//宏定义
#defineucharunsignedchar//宏定义
sbitbeep=P2^3;
voiddelay(uintz)//延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{//delay(500);大约延时500ms.
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()//主函数
{
uchara,i,j;
while(1)//大循环
{
a=0xfe;//赋初值
for(j=0;j<3;j++)for(i=0;i<8;i++)//左移三次
{
P1=a;//点亮小灯
beep=0;//开启蜂鸣器
delay(50);//延时50毫秒
beep=1;//关闭蜂鸣器
delay(50);//再延时50毫秒
a=_crol_(a,1);//将a变量循环左移一位
}
a=0x7f;
for(j=0;j<3;j++)for(i=0;i<8;i++)//右移三次
{
P1=a;//点亮小灯
beep=0;//开启蜂鸣器
delay(50);//延时50毫秒
beep=1;//关闭蜂鸣器
delay(50);//再延时50毫秒
a=_cror_(a,1);//将a变量循环右移一位
}
}
}
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
⑤ 51单片机按键控制按下K1四个led灯循环亮,再按一下全灭,c程序怎么写
在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。
#include<reg51.h>
#include<intrins.h>
仿真图效果。
⑥ 51单片机从中间到两边逐个点亮再从两边到中间逐个点亮程序
这个流水灯程序最好用数组定义8个状态的灯,这样用for循环就可以实现了。简洁明了,易读性强,也容易理解。
#include<reg51.h>
#define uchar unsigned char
code uchar ledtab[10]=
{
0xff,0xe7,0xc3,0x81,0x00, //中间开始逐渐点亮
0xff,0x7e,0x3c,0x18,0x00 //两边开始逐渐点亮
}
void delay(int ms)
{
uchar i;
while(ms--)for(i=0;i<120;i++);
}
main()
{
uchar i;
while(1)
{
for(i=0;i<10;i++)P1=ledtab[i];
delay(1000);
}
}