版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录1.设计目的32.设计要求33.设计内容33.1.实验电路及说明33.2.程序流程及分析43.2.1.中断程序43.2.2.主函数程序53.3.程序清单63.3.1.头文件includes.h63.3.2.中断程序73.3.3.主函数main.c94.调试说明124.1.调试情况124.2.程序结果及分析134.2.1.调试过程中遇到的问题及解决方法134.2.2.对程序设计技巧的总结及分析145.设计总结及体会146.参考文献14设计目的〔1〕理解点阵字符型LCD的显示原理。〔2〕了解UART通信根本概念、UART通信根本原理。〔3〕理解和掌握KL25的UART模块的根本编程方法。设计要求〔1〕LCD数字钟能够正常的显示24小时时间的时分秒以及正常跳变。〔2〕通过串口可以重新设置数字钟的时间设计内容实验电路及说明〔1〕硬件说明:PC机,KL25*1,UART-USB数据线。〔2〕电路说明:用数据线将PC机与试验箱连接即可。程序流程及分析中断程序(1)isr_uart1_re(void)变量:ch:接受字符,length:接受字符的长度,data[]存放字符数组,g_flag:标志位,说明data[]存放字符结束〔补充说明:‘#’为结束符〕程序:1.ch接受字符2.判断data[length]是否为‘#’是g_flag=1;否length+1功能:把接受的字符存到data[]中(2)tpm0_isr(void)变量:TPMCounter:计时器,LEDindex:位选口声明,kbv[32]="00:00:00":LCD显示缓冲区。程序:设置TPMCounter计时器处理LED局部:用if(LEDindex>=4)LEDindex=0实现对4个led的刷新如果TPMCounter>1000,TPMCounter++〔每1秒循环一次〕对LEDDataBuffer[6]实现时钟现实的秒+1把LEDDataBuffer[6]赋值给kbv[],显示LCD主函数程序程序: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"//定义小灯闪烁频率#defineRUN_COUNTER_MAX1500000ul//定义使用的调试号#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//防止重复定义〔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//防止重复定义〔结尾)〔2〕isr.c#include"includes.h"voidtpm0_isr(void){staticuint_32TPMCounter=0;//计时器 //staticuint_8value=0;//键盘变量staticuint_8LEDindex=0;//位选口声明//LED显示缓冲区 uint_8i; //LED缓冲区赋值//LCD显示缓冲区,其中.表示按下的数字 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));//中断置标志位写1清0//处理LED局部LEDindex++;//位选位+1 if(LEDindex>=4)LEDindex=0;//大于4位选口置0 i=LEDchangeCode(LEDDataBuffer[LEDindex]-'0');//转码 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();}主函数main.c#include"includes.h"//包涵总头文件intmain(void){//1.声明主函数使用的局部变量 LEDDataBuffer[0]='5'; LEDDataBuffer[1]='8';LEDDataBuffer[2]='1';LEDDataBuffer[3]='1';LEDDataBuffer[4]='3';LEDDataBuffer[5]='2';uint_32run_counter;//运行计数器Length=0;g_Flag=0;//2.关总中断enter_critical();//进入临界区//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.缓冲区赋值//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;}调试说明调试情况〔1〕发送?#收到帮助命令LCD显示默认的时间23:58:11LED显示分钟和秒58:11(2)发送w+6位时间+#结束,设置时间LCD显示默认的时间12:34:56LED显示分钟和秒34:56程序结果及分析调试过程中遇到的问题及解决方法问题:输入命令如?#,输出是帮助命令无限循环,应该帮助命令只
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新能源汽车产业企业盈利能力比较分析
- 一级建造师考试(机电工程管理与实务)题库含答案(宁夏回族自治区中卫市2025年)
- 仙桃市公安机关特殊职位公务员(网络安全技术职位)试题及答案解析(2026年)
- 2026年甘肃甘肃公务员考试(面试)在线试题解析+考点知识分析
- 搜狐号-可信AI五层信源体系
- 2026-2031年中国马饲料行业市场调查与发展前景分析报告
- 建筑工程经济证书考试及答案
- 春季考试理论题目与答案解析
- 甘肃农行春季招聘考试题目及答案解析
- 武汉改革知识试题及答案细致讲解
- 煤矿灾害预防及事故应急管理
- 2022年山东省临沂市兰山区小升初数学试卷
- DL∕T 1524-2016 发电机红外检测方法及评定导则
- 2023年12月东北大学招聘工作人员 笔试历年典型考题及考点剖析附答案详解
- 校园保险策划方案
- 干部履历表(中共中央组织部2015年制)
- 中国恶性胸腔积液诊断与治疗专家共识课件
- 网络发展与我国意识形态安全
- 医疗废物管理PPT演示课件
- 过程能力分析报告(图表)
- 混凝土部分多选题1~100附有答案
评论
0/150
提交评论