单片机—LED灯(二)
程序员文章站
2022-06-09 08:42:59
...
各种灯
间隔灯
#include<reg52.h>
#define uint unsigned int
void delayms(xms);
void main()
{
while(1)
{
P2=0xff;
delayms(500);
P2=0x00;
delayms(500);
}
}
void delayms(xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
左右跑马灯
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delayms(xms);
void main()
{
int i;
uchar aa,bb;
while(1)
{
aa=0x80;
bb=0x01;
for(i=1;i<=8;i++)
{
P2=aa;
aa=_crol_(aa,-1);
delayms(500);
}
for(i=1;i<=8;i++)
{
P2=bb;
bb=_crol_(bb,1);
delayms(500);
}
}
}
void delayms(xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
一些比较好的代码
LED闪烁的简单试验
/**************************************************************************************
* LED闪烁的简单试验 *
*
* 连接方法: JP11(P2)和J12用8PIN排线连接起来 *
* *
***************************************************************************************/
#include <reg51.h> //此文件中定义了51的一些特殊功能寄存器
void delay(unsigned int i); //声明延时函数
main()
{
while(1){
P2 = 0x00; //置P0口为低电平
delay(600); //调用延时程序
P2 = 0xff; //置P0口为高电平
delay(600); // 调用延时程序
}
}
/*******延时函数*************/
void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--) //循环 600*255 次
for(j = 255; j > 0; j--);
}
二进制加法试验
/********************************************************************************
; 二进制加法试验 *
; p2口八个灯作二进制加法。理解二进值的计算 *
; 硬件连接:p2口8路指示灯 *
; *
;* 描述: *
; p2口八个灯作二进制加法。理解二进值的计算 *
;* 连接方法: JP11(P2)和J12(LED灯) 用8PIN排线连接起来 *
*********************************************************************************/
#include <reg52.h>
void delay(unsigned int i); //声明延时函数
main()
{
unsigned char Num = 0xff;
while (1)
{P2 = Num;
delay(1000); //延时函数
Num--;
}
}
/*******延时函数*************/
void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 255; j > 0; j--);
}
LED闪烁的简单试验
/**************************************************************************************
* LED闪烁的简单试验 *
* 延时实现p2口LED流水灯效果 (用循环移位指令) *
* 连接方法: JP11(P2)和J12(LED灯) 用8PIN排线连接起来 *
* *
***************************************************************************************/
#include <reg51.h> //此文件中定义了51的一些特殊功能寄存器
#include <intrins.h>
void delayms(unsigned char ms)
// 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
main()
{
unsigned char LED;
LED = 0xfe; //0xfe = 1111 1110
while(1)
{
P2 = LED;
delayms(250);
LED = LED << 1; //循环右移1位,点亮下一个LED "<<"为左移位
if(P2 == 0x00 ) {LED = 0xfe; } // 0xfe = 1111 1110
}
}
跑马灯程序
/*******************************************************************************
* 描述: 跑马灯程序 *
* 连接方法: JP11(P2)和J12(LED灯) 用8PIN排线连接起来 *
* *
*******************************************************************************/
#include<reg51.h>
#include <intrins.h>
/*****************************************************************************
* 延时子程序 *
* *
******************************************************************************/
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
/*****************************************************************************
* 主程序 *
* *
******************************************************************************/
main()
{
unsigned char LED;
LED = 0xfe;
P2 = LED;
while(1)
{
delayms(250);
LED = _crol_(LED,1); //循环右移1位,点亮下一个LED 此函数位库函数
P2 = LED;
}
}
LED闪烁的简单试验
/**************************************************************************************
* LED闪烁的简单试验 *
*
* 连接方法: JP11(P2)和J12用8PIN排线连接起来 *
* *
***************************************************************************************/
#include <reg51.h> //此文件中定义了51的一些特殊功能寄存器
void delay(unsigned int i); //声明延时函数
int num;
sbit P2_0= P2^0;
main()
{
TMOD= 0X10; //定时器1的工作方式1
EA= 1; //开启总中断
ET1= 1; //开启定时器中断1
TH1= 0x3c; //高位赋初值
TL1= 0xb0; //低位赋初值 3cb0是15535,则计时为(65535-15535=50000)us,即50ms
TR1= 1; //启动定时器 T1
num= 0;
while(1)
{
P2_0= num;
}
}
/*******延时函数*************/
void int_1()interrupt 3
{
unsigned char n;
TH1= 0x3c;
TL1= 0xb0; //3cb0是15535,则计时为(65535-15535=50000)us,即50ms
TR1= 1;
n++;
if(n==10) //0.5s num加1
{
num=~num;
n= 0;
}
}
左右跑马灯实验
/********************************************************************************
;* 跑马灯实验 *
; *
; 延时实现LED流水灯效果 p2口八个灯作跑马灯。采用了寄存器存中间数 *
; 连接方法: JP11(P2)和J12(LED灯) 用8PIN排线连接起来 *
;********************************************************************************/
#include <reg52.h>
void delay(unsigned int i); //声明延时函数
char LED;
main()
{
unsigned char i;
while (1)
{ LED = 0xfe;
for (i = 0 ;i < 8 ; i++)
{
P2 = LED;
delay(500);
LED = LED << 1; // 左移
LED = LED | 0x01; // 移位后,后面的位为高电平
if (LED == 0x7f) break; //提前退出 FOR 循环
}
for (i = 0 ;i < 8 ; i++)
{
P2 = LED;
delay(500);
LED = LED >> 1; // 右移
LED = LED | 0x80; // 移位后,后面的位为高电平
}
}
}
/*******延时函数*************/
void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 255; j > 0; j--);
}
LED灯实验就到这里,接下来进一步学习……
推荐阅读
-
堆料并不是唯一!索泰GeForce RTX 3070 PGF OC评测:独一无二的ARGB-LED灯效
-
小米LED随身灯增强版开箱、拆解和评测:升级不加价
-
Linux嵌入式学习第二节:C语言版本点亮LED灯
-
据报道 LED通知灯缺席三星S10系列
-
世界十大led灯品牌排名:雷士第三,第八由清华大学控股
-
纯白PCB+LED灯!影驰HOF II DDR4内存开箱图赏
-
技嘉首款内存正式亮相:RGB LED信仰灯
-
STM32LED灯闪烁、流水灯、驱动蜂鸣器(使用寄存器操作,对GPIO引脚进行初始化)
-
长虹发布86英寸真8K巨幕电视:20736颗Mini LED灯珠 分区创纪录
-
C语言实现定时器控制LED灯闪烁