本系列教程以AVR單片機(jī)為對(duì)象,介紹單片機(jī)的快速開發(fā)方法。
參考教材:《單片機(jī)技術(shù)及應(yīng)用項(xiàng)目教程》 欒秋平 電子工業(yè)出版社 2019.6 第1版
本文介紹使用74HC595在LED陣列上,顯示數(shù)字“0-9”的方法。
一、數(shù)字字模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
二、編程實(shí)現(xiàn)倒計(jì)時(shí)
int main(void)
{
//定義局部變量
//目標(biāo)板初始化,該函數(shù)會(huì)自動(dòng)初始化相應(yīng)的外設(shè)文件
TARGET_Init();
//初始化全局變量
//在上電時(shí),執(zhí)行的相應(yīng)操作
//后臺(tái)主循環(huán)
while(1)
{
/*
**********************************
在這里完成自己的項(xiàng)目邏輯
**********************************
*/
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);
/*
**********************************
喂狗語句,大部分工程項(xiàng)目都不應(yīng)去除
**********************************
*/
#if INTERNAL_PERIPHERAL_WDT_MODE != 0
TARGET_WatchDogReset();
#endif
}
return 0; //永不執(zhí)行
}
三、程序的優(yōu)化
#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
////////////////////////////////////////////////////////////////////////////////////
//函數(shù)原型聲明
void ShowNumber(uint8 u8_Number);
#endif /* HAL_H_ */
#include "../include.h"
//以下函數(shù)為工程項(xiàng)目中用到的函數(shù)
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;
//目標(biāo)板初始化,該函數(shù)會(huì)自動(dòng)初始化相應(yīng)的外設(shè)文件
TARGET_Init();
//初始化全局變量
//在上電時(shí),執(zhí)行的相應(yīng)操作
//后臺(tái)主循環(huán)
while(1)
{
/*
**********************************
在這里完成自己的項(xiàng)目邏輯
**********************************
*/
for (i = 9; i >= 0; i--)
{
ShowNumber(i);
TARGET_Delayms(1000, 1);
}
/*
**********************************
喂狗語句,大部分工程項(xiàng)目都不應(yīng)去除
**********************************
*/
#if INTERNAL_PERIPHERAL_WDT_MODE != 0
TARGET_WatchDogReset();
#endif
}
return 0; //永不執(zhí)行
}
上一篇:任務(wù)10:認(rèn)知“數(shù)碼管”的顯示原理
下一篇:任務(wù)8:在LED陣列上,顯示數(shù)字“0”
推薦閱讀
史海拾趣
定時(shí)器M0M1=0x11,在用TR1,TR0是有什么區(qū)別嗎?在做定時(shí)器用時(shí)對(duì)同一個(gè)中斷去進(jìn)行不同定時(shí),會(huì)不會(huì)相互影響?… 查看全部問答∨ |
|
傳統(tǒng)的教科書,無一例外都是采用delay的方法檢測(cè)按鍵,但是這種方法有很多缺陷,今天發(fā)一貼說說,各位大俠不要見笑,初級(jí)菜鳥可以借鑒。 傳統(tǒng)的處理方法:在第一次檢測(cè)到有鍵按下時(shí),執(zhí)行一段延時(shí) 10ms 的子程序以后再確認(rèn)該按鍵電平是否能保持閉合 ...… 查看全部問答∨ |
如何利用C與匯編混合編程 實(shí)現(xiàn)將C程序加載到固定的內(nèi)存單元 通常情況下,C程序在編譯的過程中都是隨機(jī)的加載到內(nèi)存空間中 請(qǐng)高手知道一下如何利用C與匯編混合編程 實(shí)現(xiàn)將C程序加載到固定的內(nèi)存單元。 謝謝!… 查看全部問答∨ |
安裝BSP包后,打開時(shí)出現(xiàn) Errors loading SDK(S): E:E:\\WINCE600\\OSDesigns\\S3C6410_DEMO\\S3C6410_DEMO\\SDKs\\SDK1\\SDK1.sdkcfg does not exist 請(qǐng)問這個(gè)怎么解決。 弄了好幾遍,都是這樣,急盼!謝謝啊!… 查看全部問答∨ |
PC工具:簡(jiǎn)單調(diào)試硬件 通訊設(shè)置:波特率115200,8,N,1 功能顯示電壓,電流,溫度:LM3S811主動(dòng)發(fā)送6字節(jié)數(shù)據(jù):UL+UH+IL+IH+TL+TH (直接ADC采集過來未處理的數(shù)據(jù)) 設(shè)置電壓: & ...… 查看全部問答∨ |
上傳一份完整的SPWM code in C,旨在提高國人的設(shè)計(jì)水平 各位朋友,我以前在交友\\同僚轉(zhuǎn)帖過一個(gè)網(wǎng)友講的故事,希望在這里再次提起,希望能給我們啟發(fā)。 在以前的北美洲,送牛奶的把灌滿牛奶的奶瓶放到到每家訂牛奶的 ...… 查看全部問答∨ |
|
DIY強(qiáng)光LED手電筒驅(qū)動(dòng)電路原理圖介紹 強(qiáng)光LED手電筒,這種手電前端為5~8個(gè)高亮度發(fā)光管,使用1~2節(jié)電池。使用超高亮度發(fā)光管的原因,發(fā)光效率很高,工作電流比較小,實(shí)測(cè)使用一節(jié)五號(hào)電池5頭電筒, 電流只有100 mA左右。非常省電。使用大容量充電電池,可以連續(xù)使用十幾個(gè)小時(shí),筆者 ...… 查看全部問答∨ |
CAN發(fā)送接收過程中收到到的數(shù)據(jù)過大怎么辦?? 本人在做CAN庫函數(shù)。現(xiàn)在遇到一個(gè)問題:要是接收的數(shù)據(jù)包過大,接收緩沖區(qū)放不下,怎么辦?同樣在發(fā)送過程中也是這樣的問題,要是發(fā)送過程中數(shù)據(jù)過大,發(fā)送緩沖區(qū)只能放三個(gè)報(bào)文,那剩下的怎么辦?… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 人形機(jī)器人馬拉松背后的思考,兆易創(chuàng)新如何賦能機(jī)器人產(chǎn)業(yè)
- 一種基于STM32的智能柜控制器設(shè)計(jì)
- 小型傾轉(zhuǎn)旋翼機(jī)的無刷直流電機(jī)驅(qū)動(dòng)器設(shè)計(jì)
- 超高速攝影機(jī)電控系統(tǒng)設(shè)計(jì)
- 基于GPS自動(dòng)授時(shí)的無線智能控制器的設(shè)計(jì)
- 基于PTR2000的無線氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- 通用汽車轉(zhuǎn)向LFP電池,LG新能源和三星SDI擬在美建廠
- 蓋世汽車研究院:政策助推疊加技術(shù)迭代 全固態(tài)電池蓄勢(shì)待發(fā)
- 小鵬汽車董事長預(yù)測(cè):2027年激光雷達(dá)非智能駕駛必備
- 解碼大眾汽車中國戰(zhàn)略 - 決戰(zhàn)智能化電氣化的三板斧
- 2025從具身智能大腦展望人形機(jī)器人發(fā)展
- “荊楚”人形機(jī)器人即將量產(chǎn),智能時(shí)代的新篇章!
- 小鵬純視覺方案:技術(shù)突圍與市場(chǎng)下沉的雙重博弈
- 為什么無人出租車能“零”事故,而智能駕駛輔助卻事故頻發(fā)?
- 重磅!一顆要顛覆全球智駕的芯片點(diǎn)亮了!
- 3D視覺技術(shù)為工業(yè)自動(dòng)化帶來新“視界”
- Hercules :安全MCU 初體驗(yàn)
- 學(xué)知識(shí),贏好禮|泰克半導(dǎo)體材料與器件測(cè)試技術(shù)電源特性篇!
- 深入東芝參考設(shè)計(jì)庫:夯實(shí)您的設(shè)計(jì)庫,讓您的設(shè)計(jì)更出彩
- 1月22日下午14:00Mouser攜手Maxim邀您觀看有獎(jiǎng)直播:深入淺出可穿戴健康監(jiān)測(cè)
- 有獎(jiǎng)直播|羅徹斯特電子半導(dǎo)體全周期解決方案 助您應(yīng)對(duì)供應(yīng)鏈中斷和元器件停產(chǎn)的挑戰(zhàn)
- 答題抽獎(jiǎng):Mentor Tessent Automotive相關(guān)測(cè)試解決方案(獎(jiǎng)品池還剩不少獎(jiǎng)品喲)
- 國產(chǎn)芯4月:開啟ADC和DAC之旅,曬一曬你用過哪個(gè)段位的ADC/DAC~
- 2021 Digi‑Key KOL 視頻系列:新型智能曝光算法在人臉識(shí)別中的應(yīng)用
- TI單芯片毫米波傳感器產(chǎn)品組合新品發(fā)布會(huì),誠邀參與,預(yù)注冊(cè)贏好禮
- EEWORLD2018開年送禮,答題贏紅包
- 中國四大品牌表現(xiàn)突出,Q1智能手機(jī)生產(chǎn)總量同比增長5.3%
- 依靠工業(yè)和汽車市場(chǎng),構(gòu)建更強(qiáng)大的德州儀器
- 鏈接物流的未來 細(xì)數(shù)2018全球智慧物流峰會(huì)上的黑科技
- STC12C5A60S2_PWM
- 51模擬PWM
- 三星Galaxy SmartTag上手:三星生態(tài)匹配良好 功能一般
- 蘋果新專利:能將Touch ID與Face ID整合到屏幕下方
- Fitbit新款兒童智能手環(huán)渲染圖曝光:或3月15日發(fā)布
- 不僅有獨(dú)顯芯片,官方揭iQOO Neo5擁有旗艦級(jí)顯示的秘密
- 松下將用64.5億美元收購美國軟件公司Blue Yonder