單片機實習(xí)報告——點陣的動態(tài)顯示
當(dāng)出現(xiàn)靜態(tài)笑臉圖案時,可以操作鍵盤,鍵盤按下時,會聽到蜂鳴提示音。此時按下第一個或第二個鍵,分別顯示向左和向上的“小”“石”“山”“莊”和一個笑臉的滾動字幕的顯示,當(dāng)再次出現(xiàn)靜態(tài)的現(xiàn)笑臉時,按下第三個或第四個鍵,分別降低和提高字幕滾動的速度。然后,可以再次按下第一個或第二個鍵,來檢測改變速度后字幕滾動的效果。
二、硬件原理即實現(xiàn)
有關(guān)部分的電路圖如下:
有關(guān)部分電路說明:
點陣顯示部分:CPU的P0.0~P0.7口接8*8LED點陣的COM1~COM8端,控制點陣行的顯示;P2.0~P2.7口通過74HC573接8*8LED點陣的RED1~RED8,存放點陣每行顯示的數(shù)據(jù)。從程序中獲取數(shù)據(jù)后控制點陣的顯示。COM端為0,表示該行可能亮起;RED端為1,表示某行該列亮。
按鍵實現(xiàn)部分:CPU的P3.2~P3.5口分別接KEY1~KEY4,用于接收從鍵盤輸入的控制信息。KEY等于0,表示該按鍵按下;否則,沒有按下。
蜂鳴器部分:CPU的P3.7接蜂鳴器的BEE口,用于控制蜂鳴器。低電平蜂鳴器蜂鳴,高電平安靜。
一、軟件原理及實現(xiàn)
1.整體思路
主程序用while循環(huán)執(zhí)行顯示和幾個分支語句,實現(xiàn)用鍵盤對滾動方向和滾動速度的控制。
滾動效果原理類似動畫片的原理,逐屏顯示錯位一行或一列的字幕,從而達到橫向或縱向滾動的效果。橫向滾動的實現(xiàn)只需將RED端的數(shù)據(jù)向右和向左移位,并將每次移位后的數(shù)據(jù)存儲于中間變量中,用于顯示輸出。縱向滾動的實現(xiàn)需要循環(huán)控制輸出數(shù)據(jù)的起始位置,每次循環(huán)輸出的起始位置向后移一個元素,從而實現(xiàn)逐行向上滾動的效果。
用一個全局變量來控制滾動速度,該全局變量可以通過鍵盤的操作增加或減小,從而實現(xiàn)鍵盤控制速度。
程序特點:主程序分別調(diào)用子程序,子程序再調(diào)用子程序,最多達到了調(diào)用三層子程序。這樣的子程序嵌套調(diào)用可以提高程序代碼的重用率,同時使主程序看起來簡練、清晰。例如,程序中實現(xiàn)向左滾動的部分調(diào)用了函數(shù)disp_moveleft函數(shù),該函數(shù)又分別調(diào)用了adjust_moveright和adjust_moveleft函數(shù),用于分別實現(xiàn)逐列顯示出完整的字符和字符顯示完全后,逐列左移直到全部移出。
具體的程序部分功能參見程序源代碼中的注釋。
2.程序大體流程圖如下:
3.程序原代碼如下:
#include
#include
uchar code sz[][8]={
uchar code smile[][8]={
uchar temp[8]={0};
uchar time=5;
void delayms(uchar x)
{
}
void delay()
{
}
void disp_dat(uchar x)
{
}
評論