当前位置:首页 > 单片机 > 单片机
[导读] 1、编写C51代码,实现流水灯字变花型:/************************************************************ 实验功能 : LED实现流水灯花型控制******************************************************

1、编写C51代码,实现流水灯字变花型:


/***********************************************************

* 实验功能 : LED实现流水灯花型控制

*************************************************************/

# include


void delay(unsigned int z)

{

unsigned int x,y;

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

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

}


timer0() interrupt 1

{

static unsigned int tt; //tt用来保存当前时间在一秒钟的比例位置

tt++; //每250us增加1

if(tt==10) //2.5ms的时钟周期

tt=0; //使tt=0,开始新的PWM周期


}


void run(int *a,int len)

{

unsigned int k;

for(k=0;k

P0 = a[k];

delay(100*len);

}

}

void main(void)

{

int a[]={0XFF,0XFE,0XFC,0XF8,0XF0,0XE0,0XC0,0X80,0X00};

int b[]={0X01,0X03,0X7,0X0F,0X1F,0X3F,0X7F,0XFF};

int c[]={0X00,0X18,0X3C,0X7E,0XFF};

int d[]={0XE7,0XC3,0X81,0X00};


TMOD=0x02; //T0:工作模式2,8位定时模式

TH0=0x06; //装T0初值,使250us溢出一次(12MHz)

TL0=0x06;

TR0=1; //启动T0

ET0=1; //允许T0中断

EA=1; //允许总中断


while(1){

run(a,9);

run(b,8);

run(c,5);

run(d,4);

}

}


2、实现八个LED的三级亮度变化:


#include"reg51.h" //模拟PWM输出控制灯的10个亮度级

unsigned int scale; //占空比控制变量

void main(void)

{

unsigned int n; //延时循环变量

TMOD=0x02; //T0:工作模式2,8位定时模式

TH0=0x06; //装T0初值,使250us溢出一次(12MHz)

TL0=0x06;

TR0=1; //启动T0

ET0=1; //允许T0中断

EA=1; //允许总中断

while(1)

{

for(n=0;n<50000;n++);/*延时*/

scale+=4; //占空比控制变量加4(0,4,8三种),使得实验现象更清晰

if(scale>=10)

scale=0;

}

}

/*********************************************************

程序名称:T0中断服务程序

程序功能:程序中从tt=0开始到scale为低电平,从scale开始到tt=10为高电平;由于scale是变量,所以改变scale就可以改变占空比。

**********************************************************/

timer0() interrupt 1

{

static unsigned int tt; //tt用来保存当前时间在一秒钟的比例位置

tt++; //每250us增加1


if(tt>=10) //2.5ms的时钟周期

{

tt=0; //使tt=0,开始新的PWM周期

P0=0xFF; //LED灯亮(LED灯为阴极接地)

}


if(scale==tt) //按照当前占空比切换输出为高电平

P0=0x00; //使LED灯灭

}


3、动态驱动八位数码管,显示两人学号:


/***********************************************************

* 实验功能 : 8位数码管动态驱动,显示二人学号

*************************************************************/

#include

#define GPIO_DIG P0 //定义要使用的IO口

void Delay10ms(unsigned int c); //声明延时函数

//unsigned char code DIG_CODE[10]={0x3F,0x06,0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; //共阴数码管0~9的段码


unsigned char code DIG_CODE_KANG[] = {0X3F,0X6D,0X06,0X66,0X7F,0X06,0X4F,0X6F};//学号共阴码

unsigned char code DIG_CODE_ZHANG[] = {0X3F,0X6D,0X06,0X66,0X7F,0X06,0X66,0X3F};//学号共阴码

unsigned char code choose[] = {0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//位选共阳码


void main(void)

{

unsigned char i = 0;

unsigned int n = 0;

while(1){

P0 = 0X00;

Delay10ms(500);

n = i = 0;

while(1)

{

P2 = ~choose[i];/*位选*/

GPIO_DIG = DIG_CODE_KANG[i];/*段选*/

i++;

n++;

Delay10ms(1);

if(i == 8)/*动态控制,循环显示*/

i = 0;

if(n == 300)/*保证学号不是一闪而过,而是动态循环300个周期,两秒左右时间*/

break;

}

/*第一个人的学号显示完之后,变量全部清零并且延时片刻*/

n = i = 0;

P0 = 0X00;

Delay10ms(500);

while(1)

{

P2 = ~choose[i];

GPIO_DIG = DIG_CODE_ZHANG[i];

i++;

n++;

Delay10ms(1);

if(i == 8)

i = 0;

if(n == 300)

break;

}

}


}


void Delay10ms(unsigned int c) //延时函数

{

unsigned char a, b;

for (;c>0;c--) //--函数调用时,c已经被赋值,此处不用再赋初值

for (b=5;b>0;b--)

for (a=130;a>0;a--);


}


4、用四位数码管实现0~9999计数器:


/***********************************************************

* 实验功能 : 4位数码管实现0~9999的计数器

*************************************************************/

#include

void Delay10ms(unsigned int c); //声明延时函数

void show(int choose_bit,int number); //声明段选显示与位选函数


unsigned char code TIMER[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; /*段选共阴码*/

unsigned char code choose[] = {0X01,0X02,0X04,0X08}; /*位选共阳码*/


void main(void)

{

unsigned char i = 0, j = 0, k = 0, m = 0;


while(1)

{

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

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

for(k=0;k<10;k++)

for(m=0;m<10;m++){

show(0,i);

show(1,j);

show(2,k);

show(3,m);

}

}

}

/*延时函数*/

void Delay10ms(unsigned int c)

{

unsigned char a, b;

for (;c>0;c--)

for (b=5;b>0;b--)

for (a=130;a>0;a--);


}

/*段选与位选,动态驱动*/

void show(int choose_bit,int number)

{

P2 = ~choose[choose_bit];

P0 = TIMER[number];

delay(1);

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭