当前位置:首页 » 编程语言 » 51c语言编程灯亮法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

51c语言编程灯亮法

发布时间: 2022-10-24 15:02:50

❶ 单片机c语言编程点亮LED灯

可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。 具体实现方法可以参考如下程序: #include #include #define uint unsigned int#define uchar unsigned charvoid delay(uint a);void main(){ P1=0xfe; while(1) { // 向左循环点亮LED for(i=0; i<7; i++) { P1=_crol_(P1,1); // 左移一位,点亮下一位LED delay(55); } // 向右循环点亮LED for(i=0; i/ 右移一位,,点亮上一位LED delay(55); } }}// 延时函数,延时a毫秒void delay(uint a){ uint x,y; for(x=a;x>0;x--) for(y=110;y>0;y--);}

❷ 很简的51单片机C语言流水灯程序

1、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变量循环右移一位
}
}
}



2、51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。

❸ 单片机51c语言编程20种不同霓虹灯亮法

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

uint i,j,t;uchar Temp;
void main()
{
while(1)
{
for(j=0;j<8;j++)
{
Temp = (Temp<<1);
Temp_YiWei = Temp;
for(i=0;i<7-j;i++);
{
P1 = Temp_YiWei;
Temp_YiWei = _crol_(Temp_YiWei,1);
for(t=40000;t>0;t--); //延时函数 自己调试调试
P1 = Temp_YiWei;
}
}
P1 = 0x00; //全亮
for(t=5000;t>0;t--); //延时函数 自己调试调试
P1 = 0xFF; //全亮
}
}

❹ 用51单片机c语言让八个led亮度自左向右逐渐变亮(pwm)

#include<iom16.h>
#include<avr_macros.h>

voidInit_IO(void)
{
DDRA=0xFF;
PORTA=0x00;
}
/*以上代码51忽略*/
voidLED1(unsignedcharx,unsignedcharLEDx)
{
unsignedcharCount=0;
Count=LEDx*36;//最小0,最大7*36=252,char型最大不能超过255;
Count=Count+1;//加1的目的是针对LED0不亮

if(x<=Count) //<=是针对LED0不亮
PORTA|=(1<<LEDx);//51怎么改?。P0|=(1<<LEDx);PWM正占空
else
if(x>Count)
PORTA&=~(1<<LEDx);//51怎么改?。P0&=~(1<<LEDx);PWM负占空
}

voidmain(void)
{
unsignedchardelay=0;
unsignedcharLEDx=0;
Init_IO();
while(1)
{
delay++;
if(delay==250)
{
delay=0;
LEDx++;
if(LEDx>7)
LEDx=0;
}
LED1(delay,LEDx);
}
}

❺ 求一个51单片机的C语言程序,8个LED4种亮法,自上而下,自下而上,高低4位交替亮,一个个灭直到全灭。

我给你做个例子吧,把接LED灯的io口赋值0,灯亮;把接LED灯的io口赋值1,灯灭
因为一般接io口的LED灯有个上拉高电平,io这端给他个低电平(0),造成电压差,就有电流通过,灯就亮了;反之,io给高电平(1),没有压差,无电流,灯灭。

下面的你自己应该可以写了,锻炼下手。

void delay(void)
{
int i=10000; //这个值调整亮灯灭等快慢,越小越快越大越慢

while(i--)
return;
}

//从上到下亮灯
void LED_a(void)
{
LED_IO1 = 0;
delay();
LED_IO2 = 0;
delay();
LED_IO3 = 0;
delay();
LED_IO4 = 0;
delay();
LED_IO5 = 0;
delay();
LED_IO6= 0;
delay();
LED_IO7= 0;
delay();
LED_IO8= 0;
delay();

}

//开始灯全灭
void LED_dengmie(void)
{
LED_IO1 = 1;
LED_IO2 = 1;
LED_IO3 = 1;
LED_IO4 = 1;
LED_IO5 = 1;
LED_IO6= 1;
LED_IO7= 1;
LED_IO8= 1;
}

main()
{
LED_dengmie();

LED_a();
}

❻ 用五一单片机c语言编程,p1口控制八个发光二极管,实现每隔一秒,两两点亮,并循环。

一、#include<reg51.h>

void delay(unsigned char Xms)//延时Xms

{

int i,j;

for(X = i; X>0; X--)

for(j=110;j>0;j--);

}

void main()

{

P0 = 0x00; //P0.0~P0.7分别接八个发光二极管,刚开始全灭

while(1)

{

delay(1000);

P0 = 0xc0;//点亮前两个发光二极管P0.0和P0.1;

delay(1000);//延时1秒

P0 = 0x30;//点亮第三个和第四个LED

delay(1000);

P0 = 0x0c;

delay(1000);

P0 = 0x03;

}

}

二、

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar temp, t0, t1;

bit t2;

sbit P10 = P1^0;

void main()

{

P10 = 1;

temp = 0xfe;

P0 = temp;

P2 = 0xff;

TMOD = 0x01;

TH0 = (65536 - 50000) / 256;

TL0 = (65536 - 50000) % 256;

ET0 = 1;

EA = 1;

TR0 = 1;

while(1);

}

void timer0() interrupt 1

{

TH0 = (65536 - 50000) / 256;

TL0 = (65536 - 50000) % 256;

t0++;

if(t0 == 10) {

t0 = 0;

t1++;

if(t1 == 8) {t1 = 0; t2 = ~t2; P10 = t2;}

temp = _crol_(temp, 1);

if(t2) {P0 = temp; P2 = 255;}

else {P2 = temp; P0 = 255;}

}

}

(6)51c语言编程灯亮法扩展阅读:

例如:a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子里面的水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为:c = a; a = b; b = c;执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b =c;则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。

顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算、输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 3.14159*r*r,输出圆的面积s。

❼ 在51单片机中用c语言写程序实现用一个按键控制8个灯的亮和灭(按下按键灯亮,按下按键灯灭)

比如你的8个灯连在 P0口,如果是阴极的

你只要先定义

sbit P0^0=LED0;

.....一定定义下去

然后再定义一个按钮

比如P1.1

sbit P1^1=key;

代码里写

while(true)
{
if(key==1)
{
LED0=0;
LED1=0;
..//把你要亮的灯置0就行了。阳极的话置1
}
}

❽ 51单片机设计跑马灯的程序用(c语言)编写

|P1口接8个发光二极管共阳

#include <AT89X51.H>

unsigned char i;

unsigned char temp;

unsigned char a,b;

void delay(void)

{

unsigned char m,n,s;

for(m=20;m>0;m--)

for(n=20;n>0;n--)

for(s=248;s>0;s--);

}

void main(void)

{

while(1)

{

temp=0xfe;

P1=temp;

delay();

for(i=1;i<8;i++)

{

a=temp<<i;

b=temp>>(8-i);

P1=a|b;

delay();

}

for(i=1;i<8;i++)

{

a=temp>>i;

b=temp<<(8-i);

P1=a|b;

delay();

}

}

}

(8)51c语言编程灯亮法扩展阅读:

Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程/仿真/调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。

❾ 51单片机LED灯亮的C语言程序

/* 程序详细功能介绍:
*利用取表的方法,使端口P0做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。
*在用表格进行程序设计的时候,要用以下的指令来完成
*(1).利用MOV DPTR,#DATA16的指令来使数据指针寄存器指到表的开头。
*(2).利用MOVC A,@A+DPTR的指令,根据累加器的值再加上DPTR的值,就可以使程序计数器PC指到表格内所要取出的数据。
*因此,只要把控制码建成一个表,而利用MOVC 工,@A+DPTR做取码的操作,
*就可方便地处理一些复杂的控制动作.
*/

#include <AT89X51.H>
unsigned char code table[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f,
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f,
0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe,
0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe,
0x00,0xff,0x00,0xff,
0x01};
unsigned char i;

void delay(void)
{
unsigned char m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}

void main(void)
{

while(1)
{
if(table[i]!=0x01)
{
P0=table[i];
i++;
delay();
}
else
{
i=0;
}
}
}