历史上的今天
返回首页

历史上的今天

今天是:2024年12月03日(星期二)

正在发生

2020年12月03日 | 51单片机8*8LED点阵翻页 闪烁 静止 平移显示

2020-12-03 来源:51hei

基于单片机的LED点阵设计

基本要求:利用单片机AT89C51设计LED点阵,显示器能显示不同的字符、图形,能够用独立键控制不同字符的切换效果。

创新:显示效果可以是闪烁;静止;平移等。

任务区分:A——每隔1s闪烁1次

B——循环平移,速度自定

.


单片机源程序如下:

#include


sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit KEY   = P3^5;


unsigned int cnt,m,stage,sec=1000;


unsigned char code image[][8] = {  

                {0xFF,0xE7,0xDB,0xDB,0xDB,0xDB,0xE7,0xFF},     //0

                {0xFF,0xE7,0xEF,0xEF,0xEF,0xEF,0xC3,0xFF},     //1

    {0xFF,0xE3,0xDF,0xDF,0xE7,0xFB,0xC3,0xFF},     //2

                {0xE3,0xDF,0xDF,0xE7,0xDF,0xDF,0xE3,0xFF},     //3

                {0xFF,0xEF,0xE7,0xEB,0xC3,0xEF,0xEF,0xFF},          //4

                {0xFB,0xC3,0xFB,0xE3,0xDF,0xDF,0xE3,0xFF},                //5

                {0xE7,0xFB,0xFB,0xE3,0xDB,0xDB,0xE7,0xFF},    //6

                {0xFF,0xC3,0xDF,0xDF,0xDF,0xDF,0xDF,0xFF},    //7

                {0xE7,0xDB,0xDB,0xE7,0xDB,0xDB,0xE7,0xFF},    //8

                {0xE7,0xDB,0xDB,0xC7,0xDF,0xDF,0xE7,0xFF}     //9

};

unsigned char code image1[][8] = {              //心跳

                {0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7},  //大心

                {0xFF,0xFF,0xDB,0x81,0x81,0xC3,0xE7,0xFF},  //中心

                {0xFF,0xFF,0xFF,0xDB,0xC3,0xE7,0xFF,0xFF},         //小心

};


unsigned char code image3[][8] = {              //小坦克

        {0xFE,0xFF,0xE3,0xE3,0xF7,0xFF,0xFF,0xFF},

{0xFE,0xFF,0xFF,0xE3,0xE3,0xF7,0xFF,0xFF},

{0xFE,0xFF,0xFF,0xFF,0xE3,0xE3,0xF7,0xFF},

{0xFE,0xFF,0xFF,0xFF,0xF3,0xE3,0xF3,0xFF},

{0xFE,0xFF,0xFF,0xFF,0xE7,0xC7,0xE7,0xFF},

{0xFE,0xFF,0xFF,0xFF,0xCF,0x8F,0xCF,0xFF},

{0xFE,0xFF,0xFF,0xFF,0xDF,0x8F,0x8F,0xFF},

{0xFE,0xFF,0xFF,0xDF,0x8F,0x8F,0xFF,0xFF},

{0xFE,0xFF,0xDF,0x8F,0x8F,0xFF,0xFF,0xFF},

{0xFE,0xDF,0x8F,0x8F,0xFF,0xFF,0xFF,0xFF},

};


unsigned char code image2[] = {                  //0-->9平移

                0xFF,0xE7,0xDB,0x5A,0x5A,0xDB,0xE7,0xFF,0xFF,0xE7,0xEF,0x6E,0x6E,0xEF,0xC3,0xFF,

                0xFF,0xE3,0xDF,0x5E,0x66,0xFB,0xC3,0xFF,0xE3,0xDF,0xDF,0x66,0x5E,0xDF,0xE3,0xFF,

                0xFF,0xEF,0xE7,0x6A,0x42,0xEF,0xEF,0xFF,0xFB,0xC3,0xFB,0x62,0x5E,0xDF,0xE3,0xFF,

                0xE7,0xFB,0xFB,0x62,0x5A,0xDB,0xE7,0xFF,0xFF,0xC3,0xDF,0x5E,0x5E,0xDF,0xDF,0xFF,

                0xE7,0xDB,0xDB,0x66,0x5A,0xDB,0xE7,0xFF,0xE7,0xDB,0xDB,0x46,0x5E,0xDF,0xE7,0xFF,

};




void Delay10ms()               

{

        unsigned char i, j;


        i = 20;

        j = 113;

        do

        {

                while (--j);

        } while (--i);

}



void main()

{

    EA = 1;       //使能总中断

    ADDR3 = 0;

    TMOD = 0x01;  //设置T0为模式1

    TH0  = 0xFC;  //为T0赋初值0xFC67,定时1ms

    TL0  = 0x67;

    ET0  = 1;     //使能T0中断

    TR0  = 1;     //启动T0

    while (1)

                {

                        if(stage>3)stage=0;

                        if(KEY==0)  

                {

                        Delay10ms();

                        if(KEY==1)stage++;

                        

                }

                        if(cnt >= sec)

                        {

                                cnt = 0;

                                m++;

                                

                        }

                }

}

/* 定时器0中断服务函数 */

void InterruptTimer0() interrupt 1

{

    static unsigned char i = 0;  //动态扫描的索引

          static unsigned char tmr = 0;  //250ms软件定时器

    static unsigned char index = 0;  //图片刷新索引


    TH0 = 0xFC;  //重新加载初值

    TL0 = 0x67;

    P0 = 0xFF;   //显示消隐

                cnt++;

        /***********************模式一:数字闪出***********************************/

                if(stage==0)                    

                {

                        sec = 1000;

                        if(m>=10)m=0;

                        switch (i)

                        {

                                        case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[m][0]; break;

                                        case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[m][1]; break;

                                        case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image[m][2]; break;

                                        case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image[m][3]; break;

                                        case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image[m][4]; break;

                                        case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image[m][5]; break;

                                        case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=image[m][6]; break;

                                        case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=image[m][7]; break;

                                        default: break;

                        }

                }

        /**********************模式二:动态爱心************************************/

                else if(stage==1)

                {

                        sec = 150;

                        if(m>=3)m=0;

                        switch (i)

                        {

                                        case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image1[m][0]; break;

                                        case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image1[m][1]; break;

                                        case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image1[m][2]; break;

                                        case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image1[m][3]; break;

                                        case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image1[m][4]; break;

                                        case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image1[m][5]; break;

推荐阅读

史海拾趣

Fischer Elektronik公司的发展小趣事

在追求业务增长的同时,Fischer Elektronik也始终关注可持续发展和环保问题。公司积极采用环保材料和生产工艺,努力减少对环境的影响。此外,Fischer Elektronik还致力于推动绿色能源的应用,通过研发高效节能的产品,帮助客户降低能耗和减少碳排放。这种负责任的企业形象,不仅提升了公司的社会声誉,也为其在未来的发展中赢得了更多的支持和机遇。

Fillfactory Nv公司的发展小趣事

FIDELIX公司成立于1990年,是一家专注于存储芯片研发与销售的韩国企业。在公司成立初期,FIDELIX凭借对技术的深入研究和对市场的敏锐洞察,成功推出了多款性能优越的NAND FLASH(闪存)和SDR/DDR(单/双数率同步动态存储器)等存储芯片产品。这些产品不仅在韩国市场上获得了良好的口碑,同时也开始逐步进入国际市场。

随着技术的不断进步和市场的不断扩大,FIDELIX逐渐在韩国存储芯片领域崭露头角。公司不断投入研发资金,加强技术创新,努力提升产品的性能和品质。同时,FIDELIX也积极拓展销售渠道,与多家国内外知名厂商建立了合作关系,为公司的持续发展奠定了坚实的基础。

Coiltronics公司的发展小趣事

在电子行业中,产品质量是企业生存的关键。Coiltronics公司深知这一点,因此在生产过程中始终坚持严格的质量管理。公司引进先进的生产设备和技术,建立完善的质量检测体系,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求,使得Coiltronics的产品在市场上赢得了良好的口碑,吸引了大量忠实客户。

BOSER公司的发展小趣事

BOSER公司成立于XXXX年,初期专注于研发和生产电子元器件。面对市场竞争的激烈,BOSER凭借其卓越的技术实力和对市场需求的敏锐洞察,成功开发出一款性能卓越的电子元器件,迅速赢得了市场的认可。这一突破为BOSER公司后续的发展奠定了坚实的基础。

Eastman Kodak Company公司的发展小趣事

经过破产保护和重组的洗礼后,伊士曼柯达公司更加注重创新和可持续发展。公司加强了与新兴科技公司的合作,积极探索新的业务模式和市场机会。同时,柯达还致力于研发更加环保、高效的影像产品和技术,以满足客户对高品质影像的需求。未来,伊士曼柯达公司将继续秉承创新、品质、服务的理念,不断推动影像行业的发展和进步。

Automatic Connector公司的发展小趣事

为了保持技术创新的活力,Automatic Connector公司积极与高校和研究机构开展产学研合作。通过与这些机构的深度合作,公司能够及时了解最新的科研成果和技术趋势,为产品的研发和创新提供有力的支持。同时,公司还为合作机构提供实践平台和技术支持,实现了资源共享和互利共赢。这种产学研合作的模式为Automatic Connector公司的创新发展注入了强大的动力。

这五个故事虽然是以虚构的Automatic Connector公司为背景,但它们所反映的电子连接器制造企业的发展规律和市场环境是真实存在的。希望这些故事能够为您了解电子行业中的企业发展提供一些启示。

问答坊 | AI 解惑

基于AVR的电阻测量电路设计

求助关于基于AVR或者51的电阻测量电路设计方案,十分感谢…

查看全部问答>

stm资料五STM8S和STM32技术资料

一个光盘的资料快传完了,这个是重量级资料,呵呵     …

查看全部问答>

UCF时钟约束例子

module design_top(clk, A, B, C, D, E); endmodule NET \"clk\" TNM_NET = clk; TIMESPEC TS_clk = PERIOD \"clk\" 20 ns HIGH 45% INPUT_JITTER 1 ns;  周期20ns,占空比45%,时钟抖动1ns NET \"A\" OFFSET = IN 10 ns VALID 20 ns BEFOR ...…

查看全部问答>

secWall在手机研发中的作用

通讯行业研发源代码如何保密   手机通信行业的研发部门,广泛使用各种编译器,如keil,、ADS/RealView、MPLAB、Windows Mobile…,版本不统一。相当多公司内部通过网络协作开发,各种软件生成的文件需要交叉引用,应用环境十分复杂。通常采用 ...…

查看全部问答>

CE批处理时的时间变量问题

%DATE%的格式为 2010-03-29 星期一 我不想要这个星期的显示,只要想yyyy-mm-dd这种格式 如何修改这个格式? …

查看全部问答>

GTM900数据通信问题,关于at%ipsend传输数据

前面gprs网络连接等都没问题,就是在at%ipsend发送数据,不能直接发送字符,好像要经过转换,这个方面我不太清楚,求高手解答。 at%ipsend=\"ffffffff\"是可以发送的,这是什么数据格式?有么有直接发送字符的方法?…

查看全部问答>

关于延时的疑问

各位大侠,我是个超级无敌的新手,有个关于延时的问题,理解不了,请各位大侠赐教   第一个: a=50; if (--a<=0); b++;   第二个: a=50; while (a--); b++;   同样是执行50次自减,但是延时的效果要差特别特别多,这 ...…

查看全部问答>

【EEWORLD大学堂TI教室】FAQ

新平台上线总会有这样那样的问题,我们在尽量改进,努力为大家提供更好的用户体验,还请大家多包涵啦 现将一些常见问题放上,请大家参考。   1、新用户注册信息 这个请大家一定认真填写,因为我们会有LaunchPad开发板、抽奖奖品乃至iPad2 ...…

查看全部问答>

一个简单很容易实现火炬样式LED手电筒

一个简单很容易实现火炬样式LED手电筒,从一个国外网站上看到的。下面的介绍是用gg翻译的,不通顺,,哈哈,,大家凑合着看,也不知道老外是用什么软件画出来的,,     真正的光明和持久的LED机型是相当昂贵和沉重的,廉价的传统似乎总 ...…

查看全部问答>

求高手推荐入门级开发板

各位大侠,本人想学习FPGA,哪位帮忙推荐入门级开发板。最好是Altera的,低端的就行。。。。…

查看全部问答>