历史上的今天
今天是: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; //永不执行
}
下一篇:任务7:74HC595的使用方法
史海拾趣
|
0 引言 随着社会对能源的需求量越来越大,“能源安全危机”的问题也愈发突显。对此,经济和社会学家舍尔赫尔曼曾提出“阳光型世界经济”的概念,指出利用阳光型能源和阳光型原材料即可再生能源来满足人类对能源和原材料的总体需求,可为世界经济发 ...… 查看全部问答> |
|
==请教USB DEVICE 驱动中,接收CBW错误后的处理方法== 刚接触USb对其中的流程还不熟悉,在调试一驱动程序时,发现如下现象: 24 CDB 2a 00 00 00 28 0c 00 00 80 00 &n ...… 查看全部问答> |
|
请问各位大虾,我知道在asp中关于处理页面失效可以通过设置session的值来实现, 但我目前在做路由器的网页失效的功能,以前没做过网页,请问怎么处理呢?或者 发点http服务器的资料到我邮箱:mftrans@tom.com感激万分… 查看全部问答> |
|
如题,锁相放大器基本功能已经实现,深入的测试需要有时间进一步完善。附件为本设计的说明文档、原理图、PCB、元器件清单等。另外还有MSP430f149 硬SPI模式与AD7190接口程序,通过SPI采集,然后串口发送送至上位机。具体请见附件。 关于本设 ...… 查看全部问答> |




