历史上的今天
返回首页

历史上的今天

今天是: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);

}


推荐阅读

史海拾趣

Ercona Corp公司的发展小趣事

Ercona Corp在电子行业中的发展故事之一:技术突破与市场布局

Ercona Corp是一家在电子行业中迅速崛起的公司,其发展历程中不乏技术突破与市场布局的故事。在成立初期,Ercona就致力于半导体技术的研发,成功开发出一种高性能、低功耗的芯片,这一技术突破为公司在市场上赢得了良好的声誉。随后,Ercona利用这一技术优势,积极拓展市场,与多家知名电子产品制造商建立了合作关系,其芯片产品被广泛应用于智能手机、平板电脑等消费电子产品中。

Ercona Corp在电子行业中的发展故事之二:国际合作与品牌提升

在全球化的大背景下,Ercona积极寻求国际合作,与国际知名半导体公司达成战略合作,共同研发新产品。这一举措不仅提升了Ercona的技术实力,也扩大了其品牌影响力。通过与合作伙伴的共同努力,Ercona成功推出了一系列具有国际竞争力的电子产品,进一步巩固了其在市场中的地位。

Ercona Corp在电子行业中的发展故事之三:创新驱动与产品多元化

创新是Ercona持续发展的核心动力。公司不断投入研发资金,推动产品创新,逐步实现产品多元化。除了传统的半导体芯片外,Ercona还涉足了物联网、智能家居等新兴领域,推出了一系列具有创新性的电子产品。这些新产品的推出不仅丰富了公司的产品线,也为公司带来了新的增长点。

Ercona Corp在电子行业中的发展故事之四:人才战略与团队建设

人才是企业发展的重要保障。Ercona深知这一点,因此在发展过程中始终重视人才战略和团队建设。公司积极引进优秀人才,建立了一支高素质的研发团队。同时,Ercona还注重员工的培养和发展,为员工提供广阔的成长空间和发展机会。这些措施为公司的持续发展提供了坚实的人才保障。

Ercona Corp在电子行业中的发展故事之五:社会责任与可持续发展

作为一家有社会责任感的企业,Ercona在发展过程中始终关注环境保护和社会公益。公司积极推行绿色生产,采用环保材料和节能技术,减少生产过程中的污染排放。同时,Ercona还积极参与社会公益活动,关注弱势群体,为构建和谐社会贡献自己的力量。这些举措展现了公司的良好形象和社会责任感,也为公司的可持续发展奠定了基础。

旌芯半导体(GN)公司的发展小趣事

机顶盒,全称数字视频变换盒(Set Top Box,简称STB),是连接电视机与外部信号源的关键设备。它不仅能接收来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,还能将这些信号转换成适合电视机播放的格式,极大地丰富了电视节目的选择,提升了观看体验。

从技术层面看,机顶盒具备强大的媒体处理能力和交互功能。它能接收高清乃至4K的超高清电视节目,并通过内置的解码器将数字信号转换为电视可识别的视频和音频流,实现细腻的画面和震撼的音效。此外,机顶盒还支持数据广播、电子节目指南(EPG)、因特网接入、视频点播等多种增值服务,使电视机成为了一个互动的智能终端。

随着技术的不断进步,机顶盒正朝着高清化、智能化方向发展。智能化技术如人工智能(AI)的集成,使机顶盒具备了语音助手、智能推荐等功能,为用户提供了更为便捷、智能的使用体验。同时,云计算和边缘计算技术的应用,也进一步提升了内容分发和管理的效率。

综上所述,机顶盒作为连接电视与外部世界的桥梁,不仅是现代家庭娱乐不可或缺的一部分,也是推动数字电视技术发展的重要力量。随着技术的持续进步和市场需求的不断增长,机顶盒的未来将更加丰富多彩,为用户提供更加优质、便捷的观影体验。

冠图电子(GTL-POWER)公司的发展小趣事

冠图电子(GTL-POWER)发展故事之一:初创与技术积累

冠图电子(GTL-POWER)的故事始于2009年,当时它作为一家专注于中小功率模块电源、定制电源的新兴企业在广州成立。创始人凭借对电力电子技术的深刻理解和敏锐的市场洞察力,组建了一支专业的研发团队,致力于高品质模块电源的研发与生产。在公司成立初期,团队就明确了技术创新和质量为先的发展策略,逐步建立了微功率模块电源样品生产线,为后续的发展奠定了坚实基础。

冠图电子(GTL-POWER)发展故事之二:市场拓展与战略布局

随着技术实力的不断增强,冠图电子开始积极拓展市场。2010年至2012年间,公司先后在北京、上海、深圳等城市设立了办事处,构建了遍布全国的销售网络。这一战略布局不仅拓宽了销售渠道,还加强了与当地客户的紧密联系,进一步提升了品牌知名度。同时,公司还根据市场需求,不断优化产品结构,推出了多款具备自主知识产权的特色产品,如宽压DC-DC模块电源、光伏电源等,深受市场欢迎。

冠图电子(GTL-POWER)发展故事之三:技术突破与行业标准

冠图电子在技术创新方面不断取得突破,陆续开发了多款具有行业领先水平的电源产品。例如,公司成功开发出小型全功能单列直插DC-DC模块电源,解决了传统电源体积大、效率低的问题。此外,冠图电子还积极参与行业标准的制定工作,通过技术创新推动整个电源行业的发展。这些努力不仅提升了公司的行业地位,还为客户提供了更加可靠、高效的电源解决方案。

冠图电子(GTL-POWER)发展故事之四:品质管理与国际认证

为了确保产品质量,冠图电子建立了严格的质量管理体系,并通过了ISO9001权威认证。公司注重生产过程的每一个环节,从原材料采购到成品出厂都实行严格的质量控制。这种对品质的执着追求使得冠图电子的产品在市场上赢得了良好的口碑,吸引了来自全球30多个国家的600多家客户。国际市场的认可不仅提升了公司的品牌形象,还为公司带来了更多的业务机会。

冠图电子(GTL-POWER)发展故事之五:客户服务与持续发展

冠图电子始终坚持以客户为中心的服务理念,为客户提供从项目咨询、系统设计到技术支持的一站式服务。公司拥有一支专业的客服团队,能够迅速响应客户需求并提供专业的解决方案。此外,冠图电子还注重与客户的长期合作,通过持续改进产品和服务来满足客户的不断变化的需求。这种以客户为导向的发展策略使得冠图电子在激烈的市场竞争中保持了稳步发展,并逐渐成长为一流的微功率模块电源、定制电源供应商。

EVER-WAY公司的发展小趣事

EVER-WAY公司成立于XX世纪初,当时电子行业正处于蓬勃发展的阶段。创始人李明看准了市场机遇,决定创立一家专注于电子元器件制造的公司。他带领一支由几名工程师组成的小团队,开始了艰苦的创业之路。初期,公司面临着资金短缺、技术落后和市场竞争激烈等多重挑战。然而,李明和他的团队凭借坚定的信念和不懈的努力,逐渐在市场中站稳脚跟。他们不断优化产品性能,提高生产效率,同时积极拓展国内外市场,逐步扩大了公司的知名度和影响力。

GTE Microcircuits公司的发展小趣事
复合放大器相比单放大器具有更高的增益稳定性、更低的噪声、更宽的带宽以及更强的驱动能力等优势。这些优势使得复合放大器在需要高性能放大的场合更具竞争力。
启英泰伦(Chiplntelli)公司的发展小趣事

随着市场竞争的加剧和消费者需求的多样化,启英泰伦不断调整和创新其市场策略。为了解决“装得起”这一问题,公司选择了将智能语音识别技术集成到智能插座上的新路径。这一策略不仅降低了功耗的严格约束,还对方案的尺寸和成本进行了优化。此外,启英泰伦还针对不同应用场景进行细分,如照明、风扇等产品交互比较简单的领域,开发了相应的芯片和解决方案。这些创新策略使启英泰伦能够更好地满足市场需求,保持了在行业内的领先地位。

问答坊 | AI 解惑

巧妙利用数字锁相环测量汽车转速

 前言锁相环路诞生于20世纪30年代。近年来,锁相技术在通信、航天、测量、电视、原子能、电机控制等领域,能够高性能地完成信号的提取、信号的跟踪与同步,模拟和数字通信的调制与解调、频率合成、滤波等功能,已经成为电子设备中常用的基本部 ...…

查看全部问答>

XP空间 挖掘“任务计划”的另类功能

     WindowsXP的自带了“任务计划”,它可帮助我们在指定的时间内运行某个程序或执行某些操作,这极大的方便了众多患有“健忘症”的朋友。如果能够将“任务计划”中的潜藏功能和特殊设置发挥出来,那么它的“功效”还将会成倍增长。      ...…

查看全部问答>

正弦脉宽调制(SPWM)波的基本要素

                         项目简介                           &n ...…

查看全部问答>

STM32通过USB向上位机发送数据 上位机无法接收到

我的STM32 是利用ST官方的Mass_Storage修改的端点1是IN  端点2是OUT  这两个端点都是批量传输端点 安装驱动后  我用Bus Hound 5向其发送数据 STM32能顺利接收void EP2_OUT_Callback(void){  PMAToUserBufferCopy(Bulk_Data_ ...…

查看全部问答>

pic单片机怎么用51的bdata

那位高手帮个忙,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在OMAPL138上的移植

Ucos-2是一个精巧且可剪裁的适合嵌入式系统的操作系统,这个操作系统已移植到很多嵌入式芯片中。TI作为全球领先的微控器生产厂商,ucos-2在6211,6414,6711,6713上得到移植。因为项目开发,开始接触OMAPL138这款芯片,上网搜索发现没有针对该款芯 ...…

查看全部问答>

关于DS18B20串联问题

将多个DS18B20串联在一起,该如何按地址读取对应的温度呢?…

查看全部问答>