任务8:在LED阵列上,显示数字“0”
程序员文章站
2022-06-09 10:57:09
...
本系列教程以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; //永不执行
}
任何问题,只需在此文章的评论处留言即可,我将尽力解答,不要试图采用其它的联系方式,我一概不理会。
原创性文章,转载请注明出处CSDN:http://blog.csdn.net/qingwufeiyang12346。
上一篇: 文件上传_PHP
下一篇: 带多种分页方式的php分页类