单片机交流
直播中

蔡鼎瑾

7年用户 1013经验值
私信 关注
[问答]

如何去使用74HC595在LED阵列上显示数字0-9啊?

单片机的快速开发方法有哪几种?
如何去使用74HC595在LED阵列上显示数字0-9啊?怎样去实现一种倒计时器?如何去编写其程序?

回帖(1)

谭丽

2021-7-8 11:18:00
  本系列教程以AVR单片机为对象,介绍单片机的快速开发方法。
  本文介绍使用74HC595在LED阵列上,显示数字“0-9”的方法。
  一、数字字模0-9
  1、0的字模:0x80、0xB6、0x80
  
  2、1的字模0xFF、0x80、0xFF
  
  3、2的字模0x86、0xB6、0xB0
  
  4、3的字模0xB6、0xB6、0x80
  
  5、4的字模0xF0、0xF7、0x80
  
  6、5的字模0xB0、0xB6、0x86
  
  7、6的字模0x80、0xB6、0x86
  
  8、7的字模0xFE、0xFE、0x80
  
  9、8的字模0x80、0xB6、0x80
  
  10、9的字模0xB0、0xB6、0x80
  
  二、编程实现倒计时
  int main(void){ //定义局部变量 //目标板初始化,该函数会自动初始化相应的外设文件 TARGET_Init(); //初始化全局变量 //在上电时,执行的相应操作 //后台主循环 while(1) { /* ********************************** 在这里完成自己的项目逻辑 ********************************** */ HC595_WriteByte(0xB0); //9 HC595_WriteByte(0xB6); HC595_WriteByte(0x80); HC595_SELECT; TARGET_Delayms(1000, 1); HC595_WriteByte(0x80); //8 HC595_WriteByte(0xB6); HC595_WriteByte(0x80); HC595_SELECT; TARGET_Delayms(1000, 1); HC595_WriteByte(0xFE); //7 HC595_WriteByte(0xFE); HC595_WriteByte(0x80); HC595_SELECT; TARGET_Delayms(1000, 1); HC595_WriteByte(0x80); //6 HC595_WriteByte(0xB6); HC595_WriteByte(0x86); HC595_SELECT; TARGET_Delayms(1000, 1); HC595_WriteByte(0xB0); //5 HC595_WriteByte(0xB6); HC595_WriteByte(0x86); HC595_SELECT; TARGET_Delayms(1000, 1); HC595_WriteByte(0xF0); //4 HC595_WriteByte(0xF7); HC595_WriteByte(0x80); HC595_SELECT; TARGET_Delayms(1000, 1); HC595_WriteByte(0xB6); //3 HC595_WriteByte(0xB6); HC595_WriteByte(0x80); HC595_SELECT; TARGET_Delayms(1000, 1); HC595_WriteByte(0x86); //2 HC595_WriteByte(0xB6); HC595_WriteByte(0xB0); HC595_SELECT; TARGET_Delayms(1000, 1); HC595_WriteByte(0xFF); //1 HC595_WriteByte(0x80); HC595_WriteByte(0xFF); HC595_SELECT; TARGET_Delayms(1000, 1); HC595_WriteByte(0x80); //0 HC595_WriteByte(0xBE); HC595_WriteByte(0x80); HC595_SELECT; TARGET_Delayms(1000, 1); /* ********************************** 喂狗语句,大部分工程项目都不应去除 ********************************** */ #if INTERNAL_PERIPHERAL_WDT_MODE != 0 TARGET_WatchDogReset(); #endif } return 0; //永不执行} 三、程序的优化
  #ifndef HAL_H_#define HAL_H_//引脚定义//PortB#define IO_PB_DIR 0b00000000#define IO_PB_OUT 0b00000000 //PortC#define IO_PC_DIR 0b00000000#define IO_PC_OUT 0b00000000 //PortD#define IO_PD_DIR 0b00000000#define IO_PD_OUT 0b00000000 //函数原型声明void ShowNumber(uint8 u8_Number);#endif /* HAL_H_ */ #include “。。/include.h”//以下函数为工程项目中用到的函数void ShowNumber(uint8 u8_Number){ uint8 u8_Line[3]; switch (u8_Number) { case 0: u8_Line[2] = 0x80; u8_Line[1] = 0xBE; u8_Line[0] = 0x80; break; case 1: u8_Line[2] = 0xFF; u8_Line[1] = 0x80; u8_Line[0] = 0xFF; break; case 2: u8_Line[2] = 0x86; u8_Line[1] = 0xB6; u8_Line[0] = 0xB0; break; case 3: u8_Line[2] = 0xB6; u8_Line[1] = 0xB6; u8_Line[0] = 0x80; break; case 4: u8_Line[2] = 0xF0; u8_Line[1] = 0xF7; u8_Line[0] = 0x80; break; case 5: u8_Line[2] = 0xB0; u8_Line[1] = 0xB6; u8_Line[0] = 0x86; break; case 6: u8_Line[2] = 0x80; u8_Line[1] = 0xB6; u8_Line[0] = 0x86; break; case 7: u8_Line[2] = 0xFE; u8_Line[1] = 0xFE; u8_Line[0] = 0x80; break; case 8: u8_Line[2] = 0x80; u8_Line[1] = 0xB6; u8_Line[0] = 0x80; break; case 9: u8_Line[2] = 0xB0; u8_Line[1] = 0xB6; u8_Line[0] = 0x80; break; default: u8_Line[2] = 0xFF; u8_Line[1] = 0xFF; u8_Line[0] = 0xFF; break; } HC595_WriteByte(u8_Line[2]); HC595_WriteByte(u8_Line[1]); HC595_WriteByte(u8_Line[0]); HC595_SELECT;} int main(void){ //定义局部变量 int8 i; //目标板初始化,该函数会自动初始化相应的外设文件 TARGET_Init(); //初始化全局变量 //在上电时,执行的相应操作 //后台主循环 while(1) { /* ********************************** 在这里完成自己的项目逻辑 ********************************** */ for (i = 9; i 》= 0; i--) { ShowNumber(i); TARGET_Delayms(1000, 1); } /* ********************************** 喂狗语句,大部分工程项目都不应去除 ********************************** */ #if INTERNAL_PERIPHERAL_WDT_MODE != 0 TARGET_WatchDogReset(); #endif } return 0; //永不执行}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分