8x8LED点阵+单片机+普中+江科大自化协

发布者:心灵之舞最新更新时间:2024-08-08 来源: cnblogs关键字:8x8LED点阵  单片机  普中 手机看文章 扫描二维码
随时随地手机看文章

1 功能:

(1)静态显示:显示一个笑脸;

(2)动态显示:a,移动显示“HELLO!”,b,显示笑脸哭脸的变化;

2 原理

3 框图

4 硬件原理图

5 软件设计


5.1 静态显示源程序


(1)主函数


#include

#include 'delay100ms.h'


sbit SER = P3^4;    //74HC595的串行数据输入DS

sbit RCK = P3^5;    //74HC595的移位寄存器SH_CP

sbit SCK = P3^6;    //74HC595的锁存寄存器ST_CP


#define matrixled_col P0


//笑脸的数据,列向取模

unsigned char code disp[]={0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C};


/**

    * @brief:74HC595写入一个字节

    * @param:需要写入的字节

    * @retval:无

*/

void hc74595_wrbyte(unsigned char byte)

{

    unsigned char i;

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

    {

        SER = byte & (0x80>>i);

        SCK = 1;

        SCK = 0;

    }

    RCK = 1;

    RCK = 0;

}


/**

    * @brief:LED点阵显示屏显示1列数据

    * @param: column 选择要显示的列,范围0-7,0在最左边

    * @param: dat 选择列显示的数据,高位在上,1为亮,0为灭

    * @retval:无

*/

void matrixled_showcol(unsigned char column,dat)

{

    hc74595_wrbyte(dat);

    matrixled_col = ~(0x80>>column);

    delay100ms(1);

    matrixled_col = 0xff;

}


void main()

{

    unsigned char     i;

    SCK = 0;

    RCK = 0;

    while(1)

    {

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

        {    

            matrixled_showcol(i,disp[i]);        

        }

    }

}


(2)延时函数及头文件


#include

#include


void delay100ms(unsigned int x)        //@11.0592MHz

{

    unsigned char i;

    while(x--)

    {

        _nop_();

        i = 43;

        while (--i);

    }

}


#ifndef _delay100ms_h_

#define _delay100ms_h_

void delay100ms(unsigned int x);

#endif


5.2 动态显示 


5.2.1 移动显示HELLO!!


(1)主函数


#include

#include 'matrix_8x8led.h'


unsigned char code disp[]={

    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,            //0-7,空白区域

    0x00,0x7F,0x08,0x08,0x7F,0x00,0x7F,0x49,            //8-39,HELLO!!

    0x49,0x49,0x00,0x7F,0x49,0x49,0x49,0x00,

    0x7F,0x01,0x01,0x01,0x00,0x7F,0x41,0x41,

    0x7F,0x00,0x00,0x7B,0x7B,0x00,0x00,0x00,

    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00                //40-47,空白区域

};


void main()

{

    unsigned char     i;

    unsigned char     offset=0;    //偏移量

    unsigned char     count=0;    //延时计数

    

    matrix_8x8led_init();     //LED点阵初始化

    

    while(1)

    {

        for(i=0;i<8;i++)    //循环8次,显示8列数据,即一帧数据

        {    

            matrix_8x8led_showcol(i,disp[i+offset]);    

            count++;        //计数延时,影响数据移动快慢

            if(count>20)

            {

                count = 0;

                offset++;

                if(offset>40)

                    offset=0;                    

            }                

        }    

    }

}


(2)LED点阵驱动函数


#include

#include 'delay100ms.h'


#define matrixled_col P0


sbit SER = P3^4;    //74HC595的串行数据输入DS

sbit RCK = P3^5;    //74HC595的移位寄存器SH_CP

sbit SCK = P3^6;    //74HC595的锁存寄存器ST_CP


/**

    * @brief:74HC595写入一个字节

    * @param:需要写入的字节

    * @retval:无

*/

void hc74595_wrbyte(unsigned char byte)

{

    unsigned char i;

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

    {

        SER = byte & (0x80>>i);

        SCK = 1;

        SCK = 0;

    }

    RCK = 1;

    RCK = 0;

}


/**

    * @brief: LED点阵显示屏初始化

    * @param: 无

    * @retval:无

*/

void matrix_8x8led_init()

{

    SCK = 0;

    RCK = 0;

}


/**

    * @brief:LED点阵显示屏显示1列数据

    * @param: column 选择要显示的列,范围0-7,0在最左边

    * @param: dat 选择列显示的数据,高位在上,1为亮,0为灭

    * @retval:无

*/

void matrix_8x8led_showcol(unsigned char column,dat)

{

    hc74595_wrbyte(dat);

    matrixled_col = ~(0x80>>column);

    delay100ms(10);

    matrixled_col = 0xff;

}


#ifndef _matrix_8x8led_h_

#define _matrix_8x8led_h_

    void matrix_8x8led_init();

    void matrix_8x8led_showcol(unsigned char column,dat);

#endif

(3)延时函数:略


5.2.2 笑脸哭脸变化


(1)主函数


#include

#include 'matrix_8x8led.h'


unsigned char code disp[]={

    0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C,    //笑脸

    0x3C,0x42,0xA1,0x85,0x85,0xA1,0x42,0x3C,    //一般

    0x3C,0x42,0xA5,0x89,0x89,0xA5,0x42,0x3C        //哭脸

};


void main()

{

    unsigned char     i;

    unsigned char     offset=0;    //偏移量

    unsigned char     count=0;    //延时计数

    

    matrix_8x8led_init();     //LED点阵初始化

    

    while(1)

    {

        for(i=0;i<8;i++)    //循环8次,显示8列数据,即一帧数据

        {    

            matrix_8x8led_showcol(i,disp[i+offset]);    

            count++;        //计数延时,影响数据移动快慢

            if(count>20)

            {

                count = 0;

                offset+=8;    //偏移+8,切换下一帧画面

                if(offset>16)

                    offset=0;                    

            }                

        }    

    }

}


关键字:8x8LED点阵  单片机  普中 引用地址:8x8LED点阵+单片机+普中+江科大自化协

上一篇:LCD1602+单片机+普中+江科大自化协
下一篇:intrins.h 简介

推荐阅读最新更新时间:2024-11-01 22:09

51单片机之232串口实现
任务要求 Fosc为6MHz,定时器T1为工作模式2,串口工作模式1,波特率为4800。 1、通过波特率计算定时器T1时间常数初值。 2、编写甲机发送程序,工作于查询或者中断方式,传送30H——3FH中的十六个字节。 3、编写乙机接收程序,接受十六字节数据放在40H——4FH中。 发送机(甲机) /***************************************************** *任务要求 *Fosc为6MHz,定时器T1为工作模式2,串口工作模式1,波特率为4800。 *1、通过波特率计算定时器T1时间常数初值。 *2、编写甲机发送程序,工作于查询或者中断方式,传送30H——3FH中的十六个字节。
[单片机]
电源芯片超低静态电流延长MCU系统电池寿命
2013 年 7 月 19 日,北京讯     日前,德州仪器 (TI) 宣布推出一款支持低至 100nA 超低总体系统静态电流的多模式电源管理单元 (PMU),其可最大限度降低基于微控制器的且由电池供电的水表、气表以及其它工业应用的功耗。该 TPS65290 PMU 可管理系统的所有电源需求,包括 100nA 至 500mA 的负载状况。     TPS65290 PMU 整合三个支持微控制器 (MCU) 睡眠模式的厂家可配置“常开”电源以及一个可从输入电压或升降压转换器选择电源的自动功能。此外,TPS65290 还能够与 TI 超低功率 MSP430F5328 等 MSP430 MCU 无缝工作。 TPS65290 的主
[电源管理]
电源芯片超低静态电流延长<font color='red'>MCU</font>系统<font color='red'>中</font>电池寿命
AVR单片机isp下载时的常见问题解决方案
isp进行了简单总结,通过在线编程的方式(高压变换的同时不断复位芯片来实现对芯片的编程),可以对MCU的flash、eeprom、熔丝位、加密位等进行修改;该下载线支持时钟在8kHz以上,电压在2.7-5.5v之间的AVR单片机; isp下载出现问题一般是下面几个方面: 对于atmega64、atmega128,除了以上注意的以外,需要注意这两种芯片有专门的isp下载管脚(串口0),而不是复用MISO和MOSI,而且要彼此对应对了(这次自己就对应错了,如RXD0其实应对应MOSI): 最后贴一下isp简易连接图,以供以后参考:
[单片机]
AVR<font color='red'>单片机</font>isp下载时的常见问题解决方案
AVR单片机外部中断0、1、2 详解
中断基本包含: 1.中断源 2.中断向量(中断入口地址) 3.中断优先级 4.中断函数 除此之外,在单片机中,中断的执行或者中断的触发必须符合以下的规则:中断触发|执行= 全局中断使能位AND 中断源使能位AND 中断源标志位 单片机内部中断的触发必须完成,全局中断使能,中断源使能,中断源标志位置一等条件。除此之外,如果是外部中断0,1,2(INT0,1,2),必须设置引脚触发的规则。最后呢,就是需要在程序里建立处理中断的中断函数。 在编程的时候的步骤大致如下:(无视INT2) 1. 初始化PD2,PD3 为输入状态。DDRD|=BIT(2)|BIT(3); 2. 设置INT0,1 引脚触发的规则,实验中为低电平
[单片机]
单片机音乐程序设计(含源程序)
随便找一个仿真机或者什么单片机实验板,只要能工作的就行,将程序输入,运行,然后找个音箱(你计算机旁边应当就有一对吧)拨出插头,插头的前端接在P1。0上,后面部分找根线接单片机的地,就应当有声了,然后怎么改进硬件连接就是你的事了。。。。 音乐程序汇编代码代码1 -------------Voice.asm-------------------------- ORG 0000H LJMP START ORG 000BH INC 20H ;中断服务,中断计数器加1 MOV TH0,#0D8H MOV TL0,#0EFH ;12M晶振,形成10毫秒中断 RETI START: MOV SP,#50H MOV TH0,#0D8H MO
[工业控制]
一种基于低功耗单片机SN8P2711A的移动电源设计
随着3G移动互联网和智能终端的日益普及,随身可携带移动式电子产品越来越多、越来越普及。大屏幕智能手机、平板电脑、笔记本电脑、数码相机等便携式电子产品一般都使用可充电的锂离子供电,但是当电池没电时,就无法使用了。目前数码产品功能日益多样化,使用也更加频繁,如何延长移动电子产品使用时间,发挥其最大功用的问题就尤为重要了。为了保证外出时能让电子产品随时拥有充足的电能,一些用户开始选择移动电源给电子产品充电川。移动电源可以看成一种集储电、供电和充电功能于一体的便携电池充电器,可以给手机、平板电脑、相机等数码产品随时随地充电或待机供电,对移动电源的研究和开发也越来越多。移动电源技术可以说是固定电源技术的一种延伸和发展,本文结合充电器及单片机设
[单片机]
一种基于低功耗<font color='red'>单片机</font>SN8P2711A的移动电源设计
PIC单片机A/D转换过程
PIC单片机A/D转换过程 1、设定ADCON1和TRISx寄存器,配置引脚的工作模式; 2、若需要转换完毕中断响应,需设定相关的中断控制寄存器; 3、设置ADCON0寄存器,选择A/D转换的时钟,选择模拟信号输入通道,打开A/D模块,注意此时GO/DONE位不要置1; 4、等待足够长的采样延时; 5、将ADCON0中的GO/DONE控制位置1,启动一次A/D转换过程; 6、查询A/D转换结束标志:GO/DONE位在A/D转换结束时会自动清0,ADIF标志位在A/D转换结束后会自动置1,这两个位都可以作为软件查询A/D转换是否结束的标志,使用ADIF标志时记得要用软件将其清除; 7、若用中断来响应A/D转换的结束,则上一
[单片机]
基于MC9S08DZ60的CAN总线振动传感器设计
1 引言   随着人们安全意识的不断提高设备的安全监测显得越发重要。各种在线监测设备层出不穷,但大多都受到传统总线速率较低,传输精度不高的限制。CAN总线以其在汽车行业内实时、可靠、灵活的应用而备受瞩目,进而不断有其他领域的CAN总线应用产品出现,基于CAN 总线的振动传感器正是其中一种,组网后的传感器能够很好地实现大型装置的在线监测,为企业的安全生产奠定了基础。 2 器件简介    2.1 MC9S08DZ60单片机   飞思卡尔公司的MC9S08DZ系列单机片内嵌 CAN的微控制器,并将内嵌的CAN、EPROM和片上仿真/调试模块组合在一起,集成了所有的功能,设计人员可以便捷地转向其设计流程。 MC9S08DZ60型单
[汽车电子]
基于MC9S08DZ60的CAN总线振动传感器设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved