历史上的今天
今天是:2025年05月07日(星期三)
2018年05月07日 | 51单片机的LED与数码管的驱动
2018-05-07 来源:eefocus
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); }
上一篇:51单片机数码管详解
下一篇:单片机C语言实现数码管控制
史海拾趣
|
前言锁相环路诞生于20世纪30年代。近年来,锁相技术在通信、航天、测量、电视、原子能、电机控制等领域,能够高性能地完成信号的提取、信号的跟踪与同步,模拟和数字通信的调制与解调、频率合成、滤波等功能,已经成为电子设备中常用的基本部 ...… 查看全部问答> |
|
WindowsXP的自带了“任务计划”,它可帮助我们在指定的时间内运行某个程序或执行某些操作,这极大的方便了众多患有“健忘症”的朋友。如果能够将“任务计划”中的潜藏功能和特殊设置发挥出来,那么它的“功效”还将会成倍增长。 ...… 查看全部问答> |
|
我的STM32 是利用ST官方的Mass_Storage修改的端点1是IN 端点2是OUT 这两个端点都是批量传输端点 安装驱动后 我用Bus Hound 5向其发送数据 STM32能顺利接收void EP2_OUT_Callback(void){ PMAToUserBufferCopy(Bulk_Data_ ...… 查看全部问答> |
|
那位高手帮个忙,char bdata LT_REG48H = 0;sbit LT_CRC_ERROR = LT_REG48H^7;sbit LT_FEC23_ERROR = LT_REG48H^6;sbit LT_FRAMER_ST_5 = LT_REG48H^5;sbit LT_FRAMER_ST_4 = LT_REG48H^4;sbit LT_FRAMER_ST_3 = LT_REG48H^3;sbit LT_FRAMER_ST_2 = ...… 查看全部问答> |
|
Ucos-2是一个精巧且可剪裁的适合嵌入式系统的操作系统,这个操作系统已移植到很多嵌入式芯片中。TI作为全球领先的微控器生产厂商,ucos-2在6211,6414,6711,6713上得到移植。因为项目开发,开始接触OMAPL138这款芯片,上网搜索发现没有针对该款芯 ...… 查看全部问答> |




