历史上的今天
返回首页

历史上的今天

今天是:2025年03月12日(星期三)

正在发生

2020年03月12日 | 任务8:在LED阵列上,显示数字“0”

2020-03-12 来源:eefocus

本系列教程以AVR单片机为对象,介绍单片机的快速开发方法。


参考教材:《单片机技术及应用项目教程》 栾秋平 电子工业出版社 2019.6 第1版


本文介绍使用74HC595在LED阵列上,显示数字“0”的方法。


一、灯光阵列

二、config.h文件的使用

#ifndef MAIN_H_

#define MAIN_H_

 

/*

********************************************************************************

调试

********************************************************************************

*/

#define DEBUG 0

 

/*

********************************************************************************

MSP430器件选择

********************************************************************************

*/

#define MCU_MODULE 0 //0: 支持的芯片:ATmega48_88_168_328

/*

********************************************************************************

内部外设配置

********************************************************************************

*/

#define INTERNAL_PERIPHERAL_WDT_MODE 7 //0: 不支持看门狗

//1: 15ms

//2: 30ms

//3: 60ms

//4: 120ms

//5: 250ms

//6: 500ms

//7: 1s

//8: 2s

//9: 4s

//10: 8s

#define INTERNAL_PERIPHERAL_UART0_MODE 0x00 //0x00: 不初始化异步串行口0

/*----------无效验------偶效验------奇效验------*/

//110bps 0x01 0x11 0x21

//300bps 0x02 0x12 0x22

//600bps 0x03 0x13 0x23

//1200bps 0x04 0x14 0x24

//2400bps 0x05 0x15 0x25

//4800bps 0x06 0x16 0x26

//9600bps 0x07 0x17 0x27

//14400bps 0x08 0x18 0x28

//19200bps 0x09 0x19 0x29

//38400bps 0x0A 0x1A 0x2A

//56000bps 0x0B 0x1B 0x2B

//115200bps 0x0C 0x1C 0x2C

 

#define INTERNAL_PERIPHERAL_TIMER0_MODE 0 //0: 不初始化TIMER0

//1: 定时1ms

//2: 将TIEMR0初始化为快速PWM模式,由引脚PD6进行输出

 

#define INTERNAL_PERIPHERAL_TIMER1_MODE 0 //0: 不初始化TIMER0

//1: 定时10ms

//2: 定时1ms

 

#define INTERNAL_PERIPHERAL_ADC_MODE 0 //0: 不使用ADC

//1: 使用ADC

 

#define INTERNAL_PERIPHERAL_INT0_MODE 0 //0: 不使用外部中断0

//1: 使用外部中断0

#define INTERNAL_PERIPHERAL_INT1_MODE 0 //0: 不使用外部中断1

//1: 使用外部中断1

 

/*

********************************************************************************

外部模块使用定义

1、部分外围模块定义了使用情况,具体设置内容,应在该外围芯片相应的config文件中进行配置

2、部分外围模块定义了模块使用的个数

********************************************************************************

*/

#define EXTERNAL_MODULE_HC595_MODE 1 //0: 没有使用HC595芯片

//1: 使用HC595芯片,其引脚配置在相应的config文件中进行设置

//2: 使用HC595芯片,其引脚配置在相应的config文件中进行设置,三个引脚可以使用不同的端口

 

#define EXTERNAL_MODULE_HC165_MODE 0 //0: 没有使用HC165芯片

//1: 使用HC165芯片,其引脚配置在相应的config文件中进行设置

//2:   用不同的引脚,操纵两组74HC165

 

#define EXTERNAL_MODULE_NIXIETUBE_MODE 0 //0: 没有使用数码管及其相关电路

//1: 适用于使用1个74HC138芯片和1个74HC595芯片驱动2个LG3641BH的电路

//2: 适用于使用14个74HC164驱动14个LGB012BH的电路

 

#define EXTERNAL_MODULE_SD2405_MODE 0 //0: 没有使用SD2405芯片

//1: 使用了SD2405芯片,系统会自动调用IIC总线,使用时应在IIC_config.h中,对IIC进行配置

 

#define EXTERNAL_MODULE_DS18B20_MODE 0 //0: 没有使用DS18B20芯片

//1: 使用了DS18B20芯片

 

#define EXTERNAL_MODULE_TLC5620_MODE 0 //0: 没有使用TLC5620芯片

//1: 使用了TLC5620芯片

#define EXTERNAL_MODULE_CH432T_MODE 0 //0: 没有使用CH432T芯片

//1: 使用了CH432T芯片,还应使能相应的外部中断

 

#define EXTERNAL_MODULE_FM24C64_MODE 0 //0: 没有使用FM24C64芯片

//1: 使用了FM24C64芯片,系统会自动调用IIC总线,使用时应在IIC_config.h中,对IIC进行配置

// 64Kb 8KB

// 可接8个器件,靠地址区分 0-7 高字节为A

// 共8192个单元

// 0-8191

#define EXTERNAL_MODULE_AT45DB161D_MODE 0 //0: 没有使用AT45DB161D芯片

//1: 使用了AT45DB161D芯片,其引脚配置在相应的config文件中进行设置

/*

********************************************************************************

协议层使用配置

********************************************************************************

*/

#define PROTOCOL_MINIUART_UART0_MODE 0 //0: 不针对UART0加载MiniUart

//1: 针对UART0加载MiniUart

#define PROTOCOL_MINIUART_CH432T_UART0_MODE 0 //0: 不针对CH432T_UART0加载MininUart

//1: 针对CH432T_UART0加载MiniUart

#define PROTOCOL_MINIUART_CH432T_UART1_MODE 0 //0: 不针对CH432T_UART1加载MininUart

//1: 针对CH432T_UART1加载MiniUart

 

#endif /* MAIN_H_ */


三、74HC595配置文件的使用

#ifndef HC595_01_CONFIG_H_

#define HC595_01_CONFIG_H_

 

#define HC595_PORT PORTC

#define HC595_DDR DDRC

#define HC595_CLOCK BIT1

#define HC595_CS BIT0

#define HC595_MOSI BIT2

 

#endif /* HC595_01_CONFIG_H_ */


四、认知74HC595的操作函数和功能宏

#ifndef HC595_H_

#define HC595_H_

 

//宏定义

#if EXTERNAL_MODULE_HC595_MODE == 1

#define HC595_SELECT CLRBIT(HC595_PORT,HC595_CS);SETBIT(HC595_PORT,HC595_CS);CLRBIT(HC595_PORT,HC595_CS)

#define HC595_UNSELECT CLRBIT(HC595_PORT,HC595_CS)

#define HC595_SET_CLOCK SETBIT(HC595_PORT,HC595_CLOCK)

#define HC595_CLR_CLOCK CLRBIT(HC595_PORT,HC595_CLOCK)

#define HC595_SET_MOSI SETBIT(HC595_PORT,HC595_MOSI)

#define HC595_CLR_MOSI CLRBIT(HC595_PORT,HC595_MOSI)

#elif EXTERNAL_MODULE_HC595_MODE == 2

#define HC595_SELECT CLRBIT(HC595_PORT_CS,HC595_CS);SETBIT(HC595_PORT_CS,HC595_CS);CLRBIT(HC595_PORT_CS,HC595_CS)

#define HC595_UNSELECT CLRBIT(HC595_PORT_CS,HC595_CS)

#define HC595_SET_CLOCK SETBIT(HC595_PORT_CLOCK,HC595_CLOCK)

#define HC595_CLR_CLOCK CLRBIT(HC595_PORT_CLOCK,HC595_CLOCK)

#define HC595_SET_MOSI SETBIT(HC595_PORT_MOSI,HC595_MOSI)

#define HC595_CLR_MOSI CLRBIT(HC595_PORT_MOSI,HC595_MOSI)

#endif

 

//函数原型声明

void HC595_Init(void);

void HC595_WriteByte(uint8 u8_Byte);

 

#endif /* HC595_H_ */


五、“0”的字模

六、显示程序

//加入包含文件

#include "../include.h"

 

//定义系统常量

 

//定义全局变量

 

//主程序

int main(void)

{

//定义局部变量

//目标板初始化,该函数会自动初始化相应的外设文件

TARGET_Init();

//初始化全局变量

//在上电时,执行的相应操作

//后台主循环

while(1)

{

/*

**********************************

在这里完成自己的项目逻辑

**********************************

*/

HC595_WriteByte(0x80);

HC595_WriteByte(0xBE);

HC595_WriteByte(0x80);

HC595_SELECT;

/*

**********************************

喂狗语句,大部分工程项目都不应去除

**********************************

*/

#if INTERNAL_PERIPHERAL_WDT_MODE != 0

TARGET_WatchDogReset();

#endif

}

return 0; //永不执行

}

推荐阅读

史海拾趣

问答坊 | AI 解惑

太阳电池热斑现象的研究

0 引言 随着社会对能源的需求量越来越大,“能源安全危机”的问题也愈发突显。对此,经济和社会学家舍尔赫尔曼曾提出“阳光型世界经济”的概念,指出利用阳光型能源和阳光型原材料即可再生能源来满足人类对能源和原材料的总体需求,可为世界经济发 ...…

查看全部问答>

TMS320C6205数据手册

TMS320C6205的数据手册,不要钱,哈哈!…

查看全部问答>

求助 运放

各位大侠,能否帮在下分析下这个电路? 小弟能力有限,实在是搞不清楚他的功能。 谢谢啦。[qq]20436023[/qq] 文件在附件中。…

查看全部问答>

==请教USB DEVICE 驱动中,接收CBW错误后的处理方法==

刚接触USb对其中的流程还不熟悉,在调试一驱动程序时,发现如下现象:   24    CDB    2a 00 00 00  28 0c 00 00  80 00               &n ...…

查看全部问答>

求救各位大虾:http服务器关于页面失效的处理方法

请问各位大虾,我知道在asp中关于处理页面失效可以通过设置session的值来实现, 但我目前在做路由器的网页失效的功能,以前没做过网页,请问怎么处理呢?或者 发点http服务器的资料到我邮箱:mftrans@tom.com感激万分…

查看全部问答>

关于事件管理器B

指向事件管理器B时,是不是用ldp #0EA就行呢? 为什么我向EVB中的T3CNT和T3PR都写不进数呢? 用了splk #1000 T3CNT,然后查看一下,寄存器的值没有变化阿。 .TEXT _c_int0     SETC    INTM        &nb ...…

查看全部问答>

提取微弱小信号的锁相放大器提交文档

如题,锁相放大器基本功能已经实现,深入的测试需要有时间进一步完善。附件为本设计的说明文档、原理图、PCB、元器件清单等。另外还有MSP430f149  硬SPI模式与AD7190接口程序,通过SPI采集,然后串口发送送至上位机。具体请见附件。 关于本设 ...…

查看全部问答>

使用Altium Designer进行多通道设计

上传了两份技术文档,讲述了如何使用AD经行多通道设计,以及分层设计的结构和方法。…

查看全部问答>

串口实验波特率

sopc builder中设置波特率是9600,串口工具设置9600,发送36时,接收是FB,串口调试工具设置19200,则收到的是36,这是什么问题啊 QQ截图20120323203513.png (28.18 K) 2012-3-23 20:36:10#include \"system.h\"#include \"unistd.h\"#includ ...…

查看全部问答>