嵌入式課設(shè)報告-LCD-LED數(shù)碼時鐘顯示修改_第1頁
嵌入式課設(shè)報告-LCD-LED數(shù)碼時鐘顯示修改_第2頁
嵌入式課設(shè)報告-LCD-LED數(shù)碼時鐘顯示修改_第3頁
嵌入式課設(shè)報告-LCD-LED數(shù)碼時鐘顯示修改_第4頁
嵌入式課設(shè)報告-LCD-LED數(shù)碼時鐘顯示修改_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

目錄1.設(shè)計(jì)目的32.設(shè)計(jì)要求33.設(shè)計(jì)內(nèi)容33.1.實(shí)驗(yàn)電路及說明33.2.程序流程及分析43.2.1.中斷程序43.2.2.主函數(shù)程序53.3.程序清單63.3.1.頭文件includes.h63.3.2.中斷程序73.3.3.主函數(shù)main.c94.調(diào)試說明124.1.調(diào)試情況124.2.程序結(jié)果及分析134.2.1.調(diào)試過程中遇到的問題及解決方法134.2.2.對程序設(shè)計(jì)技巧的總結(jié)及分析145.設(shè)計(jì)總結(jié)及體會146.參考文獻(xiàn)14設(shè)計(jì)目的〔1〕理解點(diǎn)陣字符型LCD的顯示原理?!?〕了解UART通信根本概念、UART通信根本原理?!?〕理解和掌握KL25的UART模塊的根本編程方法。設(shè)計(jì)要求〔1〕LCD數(shù)字鐘能夠正常的顯示24小時時間的時分秒以及正常跳變?!?〕通過串口可以重新設(shè)置數(shù)字鐘的時間設(shè)計(jì)內(nèi)容實(shí)驗(yàn)電路及說明〔1〕硬件說明:PC機(jī),KL25*1,UART-USB數(shù)據(jù)線。〔2〕電路說明:用數(shù)據(jù)線將PC機(jī)與試驗(yàn)箱連接即可。程序流程及分析中斷程序(1)isr_uart1_re(void)變量:ch:接受字符,length:接受字符的長度,data[]存放字符數(shù)組,g_flag:標(biāo)志位,說明data[]存放字符結(jié)束〔補(bǔ)充說明:‘#’為結(jié)束符〕程序:1.ch接受字符2.判斷data[length]是否為‘#’是g_flag=1;否length+1功能:把接受的字符存到data[]中(2)tpm0_isr(void)變量:TPMCounter:計(jì)時器,LEDindex:位選口聲明,kbv[32]="00:00:00":LCD顯示緩沖區(qū)。程序:設(shè)置TPMCounter計(jì)時器處理LED局部:用if(LEDindex>=4)LEDindex=0實(shí)現(xiàn)對4個led的刷新如果TPMCounter>1000,TPMCounter++〔每1秒循環(huán)一次〕對LEDDataBuffer[6]實(shí)現(xiàn)時鐘現(xiàn)實(shí)的秒+1把LEDDataBuffer[6]賦值給kbv[],顯示LCD主函數(shù)程序程序:1.判斷g_flag是否為1,為1跳到2,為0跳到1,g_flag清零2.switch(data[0])選擇操作3.length清零程序清單頭文件includes.h#ifndefINCLUDES_H_#defineINCLUDES_H_#include"common.h"#include"gpio.h"#include"light.h"#include"uart.h"#include"sysinit.h"#include"lcd.h"#include"kb.h"#include"tpm.h"#include"led.h"http://定義小燈閃爍頻率#defineRUN_COUNTER_MAX1500000ul//定義使用的調(diào)試號#defineUART_TESTUART_1#defineTEST_UART_BAUDRATE9600UL#definebus_clk_khz24000//芯片總線時鐘頻率,Khz//定義全局變量uint_8LEDDataBuffer[6];uint_8ch;uint_8Data[10];uint_16Length;uint_8g_Flag;#endif中斷程序〔1〕isr.h〔注冊中斷〕#ifndefISR_H//防止重復(fù)定義〔ISR_H開頭)#defineISR_H//===============用戶中斷向量表注冊表=====================//1注冊TPM0中斷向量#ifdefVECTOR_033 #undefVECTOR_033 externvoidtpm0_isr(void); #defineVECTOR_033tpm0_isr#endif //2注冊串口1中斷向量 #ifdefVECTOR_029 #undefVECTOR_029 externvoidisr_uart1_re(void); #defineVECTOR_029isr_uart1_re #endif#endif//防止重復(fù)定義〔結(jié)尾)〔2〕isr.c#include"includes.h"voidtpm0_isr(void){staticuint_32TPMCounter=0;//計(jì)時器 //staticuint_8value=0;//鍵盤變量staticuint_8LEDindex=0;//位選口聲明//LED顯示緩沖區(qū) uint_8i; //LED緩沖區(qū)賦值//LCD顯示緩沖區(qū),其中.表示按下的數(shù)字 uint_8kbv[32]="00:00:00";if((TPM_SC_REG(TPM0_BASE_PTR)&TPM_SC_TOF_MASK)==TPM_SC_TOF_MASK){ TPMCounter++;}BSET(TPM_SC_TOF_SHIFT,TPM_SC_REG(TPM0_BASE_PTR));//中斷置標(biāo)志位寫1清0//處理LED局部LEDindex++;//位選位+1 if(LEDindex>=4)LEDindex=0;//大于4位選口置0 i=LEDchangeCode(LEDDataBuffer[LEDindex]-'0');//轉(zhuǎn)碼 LEDshow1(LEDindex,i); //顯示LED if(TPMCounter>1000) { TPMCounter=0; if(LEDDataBuffer[3]=='9'){LEDDataBuffer[3]='0';LEDDataBuffer[2]++;} elseLEDDataBuffer[3]++; if(LEDDataBuffer[2]=='6'&&LEDDataBuffer[1]!='9'){LEDDataBuffer[2]='0';LEDDataBuffer[1]++;}elseif(LEDDataBuffer[2]=='6'&&LEDDataBuffer[1]=='9'){LEDDataBuffer[2]='0';LEDDataBuffer[1]='0';LEDDataBuffer[0]++;} if(LEDDataBuffer[0]=='6'){LEDDataBuffer[0]='0';LEDDataBuffer[4]++;} if(LEDDataBuffer[4]=='4'){LEDDataBuffer[4]='0';LEDDataBuffer[5]++;} if(LEDDataBuffer[5]=='3'){LEDDataBuffer[5]='0';} kbv[0]=LEDDataBuffer[5]; kbv[1]=LEDDataBuffer[4]; kbv[3]=LEDDataBuffer[0]; kbv[4]=LEDDataBuffer[1]; kbv[6]=LEDDataBuffer[2]; kbv[7]=LEDDataBuffer[3]; LCDShow(kbv); }} //串口1接收中斷效勞例程voidisr_uart1_re(void){ uint_8flag=1; enter_critical(); ch=uart_re1(UART_TEST,&flag); uart_send1(UART_1,ch); if(0==flag) { Data[Length]=ch; if(Data[Length]=='#') { g_Flag=1; } Length++; }exit_critical();}主函數(shù)main.c#include"includes.h"http://包涵總頭文件intmain(void){//1.聲明主函數(shù)使用的局部變量 LEDDataBuffer[0]='5'; LEDDataBuffer[1]='8';LEDDataBuffer[2]='1';LEDDataBuffer[3]='1';LEDDataBuffer[4]='3';LEDDataBuffer[5]='2';uint_32run_counter;//運(yùn)行計(jì)數(shù)器Length=0;g_Flag=0;//2.關(guān)總中斷enter_critical();//進(jìn)入臨界區(qū)//3.初始化底層模塊LEDInit();//LED初始化LCDInit();//LCD初始化KBInit();//鍵盤初始化tpm_init(TPM0,TPM_CLKSRC_PLL,1000);//初始化TPM模塊,1ms中斷一次uart_init(UART_TEST,bus_clk_khz,9600);//串口1初始化,總線時鐘24000Khz,波特率9600//4.緩沖區(qū)賦值//5.開中斷tpm_enable_int(0);init_critical();uart_enable_re_int(UART_TEST);uart_send_string(UART_1,"UartInitial\r\n");uart_send_string(UART_1,"SD-FSLLibraryFlashTest!\r\n\r\n");uart_send_string(UART_1,"Press?togethelp\r\n");//===========================================================================for(;;){ run_counter++; if(run_counter>RUN_COUNTER_MAX) { run_counter=0; }//end_if if(g_Flag==1) { g_Flag=0; switch(Data[0]) { case'?'://命令幫助 uart_send_string(UART_1,"寫入格式如下:\r\n"); uart_send_string(UART_1,"寫入W\r\n"); break; case'w'://寫入操作 case'W': LEDDataBuffer[5]=Data[1]; LEDDataBuffer[4]=Data[2]; LEDDataBuffer[0]=Data[3]; LEDDataBuffer[1]=Data[4]; LEDDataBuffer[2]=Data[5]; LEDDataBuffer[3]=Data[6]; break; default: break; } Length=0;}}//=========================================================================== return0;}調(diào)試說明調(diào)試情況〔1〕發(fā)送?#收到幫助命令LCD顯示默認(rèn)的時間23:58:11LED顯示分鐘和秒58:11(2)發(fā)送w+6位時間+#結(jié)束,設(shè)置時間LCD顯示默認(rèn)的時間12:34:56LED顯示分鐘和秒34:56程序結(jié)果及分析調(diào)試過程中遇到的問題及解決方法問題:輸入命令如?#,輸出是幫助命令無限循環(huán),應(yīng)該幫助命令只

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論