完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本系列教程以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; //永不执行} |
|
|
|
只有小组成员才能发言,加入小组>>
2553 浏览 0 评论
1152浏览 2评论
750浏览 1评论
504浏览 0评论
269浏览 0评论
433浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 19:14 , Processed in 1.664072 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号