128单片机点亮一个led,新手,求程序

128单片机点亮一个led,新手,求程序,第1张

比如发光二极管的负级接到PA端口的PA0上,正极接电源正极。串一个限流电阻,程序这样写。

#include<iom128vh>

void main(void)

{

DDRA |= (1<<0); //设置方向为输出

PORTA &=~ (1<<0); //PA0输出低电平点亮

while(1);

}

位申明LED,再用for语句写个延时函数,主函数如下

while(1)

{

led1=1;

delay(10);

led1=0;

delay(10)

led2=1;

delay(10);

led2=0;

delay(10);

led3=1;

delay(10);

led3=0;

delay(10);

}

C语言实现LED灯闪烁控制配套51单片机开发板。

#include    //包含单片机寄存器的头文件

/

函数功能:延时一段时间

/

void delay(void)        //两个void意思分别为无需返回值,没有参数传递。

{

unsigned int i;       //定义无符号整数,最大取值范围65535。

for(i=0;i<20000;i++)  //做20000次空循环。

;               //什么也不做,等待一个机器周期。

}

/

函数功能:主函数 (C语言规定必须有也只能有1个主函数)。

/

void main(void)

{

while(1)      //无限循环。

{

P0=0xfe;   //P1=1111 1110B, P00输出低电平。

delay();   //延时一段时间。

P0=0xff;   //P1=1111 1111B, P00输出高电平。

delay();  //延时一段时间。

}

}

单片机驱动LED灯的源程序:

#include<reg52h> //头文件。

#define uint unsigned int

#define uchar unsigned char

sbit LED1=P1^7; //位定义。

void delay_ms(uint);//mS级带参数延时函数。

void main()

{

while(1)

{

LED1=0;

delay_ms(1000);

LED1=1;

delay_ms(1000);

}

}

void delay_ms(uint z) //延时子程序

{

uint x,y;

for(x=z;x>0;x--)

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

}

扩展资料:

单片机应用分类:

通用型:

这是按单片机(Microcontrollers)适用范围来区分的。例如,80C51式通用型单片机,它不是为某种专门用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。

总线型:

这是按单片机(Microcontrollers)是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接。

另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。

控制型:

这是按照单片机(Microcontrollers)大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型。

通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。

参考资料来源:百度百科-单片机

#include<reg52h>

//#include<stdioh>

sbit LED = P2^0;

 

unsigned char ReceiveData;

void main()

{

    TMOD = 0x20;

    SCON = 0x50;

    TH1  = 0xfd;//baud 9600bit/s

    //TI   = 1;

    TR1  = 1;

    ES  = 1;

    EA  = 1;

    while(1)

    {

      

    }

}

void UART1_Routine()interrupt 4

{

    if(RI)

    {

        RI = 0;

        ReceiveData = SBUF;

        //此处视上位机发过来的指令而定(将0x01改成对应字节命令即可),只适用于单字节命令,数据包格式需另改代码

        if(ReceiveData==0x01)

        {

            LED =~LED;//实现按一下灯亮,再次按下灯灭

        }

    }

}

 

///如有问题,可再咨询

我给你写个参考程序,看看程序符不符合你的要求,程序如下:

#include "REG52H"

// LED灯端口定义

sbit GPIO_Exio1 = P0^0;

sbit GPIO_Exio2 = P0^1;

sbit GPIO_Exio3 = P0^2;

sbit GPIO_Exio4 = P0^3;

// 按键输入端口

sbit KEY1_Exitm = P1^0;

sbit KEY2_Exitm = P1^1;

sbit KEY3_Exitm = P1^2;

sbit KEY4_Exitm = P1^3;

/

延时1ms

/

void Delay_1ms(unsigned int Cnt)

{

unsigned int x, y;

for(x = Cnt; x > 0; x--)

for(y = 120; y > 0; y--);

}

/

按键扫描子函数

/

void KEY_ScanExtio(void)

{

// 判断K1 、K2其中一个按键按下

if((KEY1_Exitm == 0) || (KEY2_Exitm == 0))

{

Delay_1ms(5);

if((KEY1_Exitm == 0) || (KEY2_Exitm == 0))

{

// 按键按下点亮LED

GPIO_Exio1 = 0;

GPIO_Exio2 = 0;

GPIO_Exio3 = 0;

GPIO_Exio4 = 0;

}

while((KEY1_Exitm == 0) || (KEY2_Exitm == 0)); // 按键松手检测

// 按键松手后LED灭

GPIO_Exio1 = 1;

GPIO_Exio2 = 1;

GPIO_Exio3 = 1;

GPIO_Exio4 = 1;

}

// 判断K3 、K4其中一个按键按下

if((KEY3_Exitm == 0) || (KEY4_Exitm == 0))

{

Delay_1ms(5);

if((KEY3_Exitm == 0) || (KEY4_Exitm == 0))

{

}

while((KEY3_Exitm == 0) || (KEY4_Exitm == 0)); // 按键松手检测

// 按键松手后取反LED

GPIO_Exio1 = ~GPIO_Exio1;

GPIO_Exio2 = ~GPIO_Exio2;

GPIO_Exio3 = ~GPIO_Exio3;

GPIO_Exio4 = ~GPIO_Exio4;

}

}

/

主函数

/

int main(void)

{

// 初始化IO

P0 = 0xFF;

P1 = 0xFF;

P2 = 0xFF;

P3 = 0xFF;

while(1)

{

KEY_ScanExtio();

}

}

MAIN: MOV P1,#11111110B;点亮P10所接的灯

ACALL YS ;调用延时子程序,让P10所接的灯亮一小段时间

MOV P1,#11111101B;点亮P11所接的灯

ACALL YS ;调用延时子程序,让P11所接的灯亮一小段时间

MOV P1,#11111011B;点亮P12所接的灯

ACALL YS ;调用延时子程序,让P12所接的灯亮一小段时间

MOV P1,#11110111B;点亮P13所接的灯

ACALL YS ;调用延时子程序,让P13所接的灯亮一小段时间

MOV P1,#11101111B;点亮P14所接的灯

ACALL YS ;调用延时子程序,让P14所接的灯亮一小段时间

MOV P1,#11011111B;点亮P15所接的灯

ACALL YS ;调用延时子程序,让P15所接的灯亮一小段时间

MOV P1,#10111111B;点亮P16所接的灯

ACALL YS ;调用延时子程序,让P16所接的灯亮一小段时间

MOV P1,#01111111B;点亮P17所接的灯 ACALL YS ;调用延时子程序,让P17所接的灯亮一小段时间

LJMP MAIN ;循环这回用长调用指令LJMP,当程序比较长的时候就用

LJMP YS: ;延时子程序YS,功能是能让LED亮起来或者灭掉一小段时间

MOV R1,#200 ;让灯亮灭时间的长短也就是延时的长短跟#号后面的数据有关

D: MOV R2,#200 ;延时长点#号后面的数据就大点,延时短点#号后面的数据

T: MOV R3,#200 ;就小点,但#号后面最大的数据是255

DJNZ R3,$

DJNZ R2,T

DJNZ R1,D

RET ;子程序返回指令,子程序的设计一般都是因为主程序要调用它, ;调用完是要返回到主程序继续运行下一个语句的

END

以上就是关于128单片机点亮一个led,新手,求程序全部的内容,包括:128单片机点亮一个led,新手,求程序、单片机3个led灯循环点亮程序、用C语言编写一个单片机控制LED灯闪烁变化的编程 急用!!!!!!!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9570507.html

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

发表评论

登录后才能评论

评论列表(0条)

保存