点亮一个led灯程序

点亮一个led灯程序,第1张

单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

左侧的一栏是各种类型的组建,其中我们主要需要用到的有组件选项(componentmode)和终端选项(Terminalsmode)。

以下是一个单片机间隔点亮一LED灯的C语言程序,以8051单片机为例:

c

Copy code

#include

//包含了AT89C51的寄存器定义

void delay(unsigned int xms) //延时函数,xms为要延时的毫秒数

{

unsigned int i,j;

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

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

}

void main()

{

P1=0x00; //将P1口全部置为0,防止其它引脚影响

while(1)

{

P1=0xff; //点亮P1口第0个引脚上的LED灯,0xff为二进制的11111111

delay(1000); //延时1秒

P1=0x00; //将P1口全部置为0,熄灭LED灯

delay(1000); //延时1秒

}

}

上述程序的作用是在单片机的P1口上间隔点亮一盏LED灯,每隔1秒钟灯的状态会发生一次变化,即由点亮状态变为熄灭状态,再由熄灭状态变为点亮状态。

C语言写LED数码管显示程序与汇编是一致的,将显示的基本内容定义在一个数组中就可以了,比如:

#include<reg51h>

#define uchar unsigned char

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};

sbit rstkey=P2^2;

sbit speaker=P2^0;

void delay()//延时约400毫秒

{

uchar i,j;

for(i=0;i<200;i++)

for(j=0;j<250;j++);

}

main()

{

uchar i,key;

P2=0xff;

while(1)

{

i=0;

P1=table[i];

while(1)

{

key=P3;

if(key!=0)break;

}

switch(key)

{

case 0x01:i=1;break;

case 0x02:i=2;break;

case 0x04:i=3;break;

case 0x08:i=4;break;

case 0x10:i=5;break;

case 0x20:i=6;break;

case 0x40:i=7;break;

case 0x80:i=8;break;

default:break;

}

P1=table[i];//显示按下抢答器的号

P0=key;//显示按下键号的LED

while(1)

{

if(rstkey==0)break;//主持人按下复位键则重新开始

speaker=~speaker;//否则蜂鸣器报警

delay();

}

}

}

#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灯的亮灭

}

}

//

这个问题可大可小,

用三种红绿蓝可以混合色各种颜色,这个程序是吧,每个颜色分成200级(实际是201级),所以值就是0到200,然后用PWM输出控制各色的亮度,混合出七彩,如R=200、G=200、B=200就是白色,但不是纯正的白。(纯白色时RGB的值是不相等的)

户外的超大LED广告屏就是这样的,每个像素点就是一个全色LED灯。

# include <reg52h>

unsigned int i = 0;

sbit led = P1^0;

void main(void)

{

    TMOD = 0x10;

    TH1 = 0x0FC;  //@12MHz  1ms

    TL1 = 0x18;

    EA = 1;

    ET1 = 1;

    TR1 = 1;

while(1)

{

}

}

void Timer1Interrupt(void) interrupt 3

{

    TH1 = 0x0FC;

    TL1 = 0x18;

    

i++;

if (i >= 50)

{

i = 0;

led = ~led;

}

}

//请依照你的硬件输入相对值#defineKEY_ACTIVE_LEVEL(请输入)#defineKEY1_PIN(请输入)#defineKEY2_PIN(请输入)#defineLED_ON_LEVEL(请输入)#defineLED_LOW_LEVEL(请输入)#defineLED_PIN(请输入)unsignedcharis_key1_press(void){reutrn(KEY1_PIN==KEY_ACTIVE_LEVEL)l}unsignedcharis_key2_press(void){reutrn(KEY2_PIN==KEY_ACTIVE_LEVEL)l}voidset_led_to(unsignedcharvalue){LED_PIN=value;}voidmain(void){while(1){if(is_key1_press()&&is_key2_press()){set_led_to(LED_ON_LEVEL);}else{set_led_to(LED_OFF_LEVEL);}}}

以上就是关于点亮一个led灯程序全部的内容,包括:点亮一个led灯程序、单片机间隔点亮一led灯的C语言程序、用C语言怎么编写7段LED的显示程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9316397.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存