1、完整word版msp430单片机实验报告 实 验 报 告 课程名称: 单片机原理及应用 实验题目: 实用多功能定时器 学生姓名: 谢照 学 号: 2014110144 专业班级: 自动化 二零一六 年 五 月 七 日一、课程实验目的 . 1二、实验要求. 1三、课程实验硬件电路. 23.1、硬件电路结构. 23.2、电路原理. 23.2.1、显示电路. 23.2.2、按键检测电路. 3四、实验步骤. 6五、软件设计. 65.1、倒计时主程序. 65.2、中断程序设计. 7六、调试与结论. 7七、附录. 8一、目的(1)熟练运用CCS开发环境和Proteus仿真软件,巩固和加深单片机原理课程知识
2、的理解和运用。(2)综合本学期所学的按键检测以及液晶的动态显示原理,设计出以MSP430G2553为核心的以LCD1602为显示的倒计时系统。(3)熟悉各元器件的性能和设置元件参数,进一步提高学生单片机应用系统的设计能力。 (4) 培养学生综合分析问题、发现问题和解决问题的能力。二、实验要求(1)设计一个倒计时器,定时范围99分60秒,用液晶作为显示器。4个按键控制,分别是分钟加一、秒钟加一、清零和开始停止键。按分钟加一键时,分钟显示值加1,最大99 ;按秒钟加一键时,秒钟显示值加1,最大60;按清零键时,分钟、秒钟显示值都清零;按开始键,则开始倒计时。显示值为零时停止倒计时,且报警器报警,直
3、到按停止键报警器停止报警。按开始键后,分钟加一、秒钟加一、清零键不起作用。按停止键可以暂停。倒计时为零后,按停止键,显示值恢复设定值,按开始键又可以工作。(2)总体要求如下:1、方案论证,确定总体电路原理图。 2、画硬件仿真电路图。3、绘制程序流程图,编写C语言源程序。4、安装调试,实现倒计时器的基本功能。三、硬件电路3.1、电路结构图:多功能定时器主要由三个最基本模块组成,一是以LCD1602液晶为基础的显示电路,二是以四个按键为核心的控制电路,三是以MSP430G2553为核心的信号发生电路。3.2、电路原理:3.2.1显示电路(1)LCD显示器是通过给不同的液晶单元供电,控制其光线的通过
4、与否,从而达到显示的目的。因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过) (2)由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。驱动模块具有八位数据总线,外加一些电源接口和控制信号。而且还自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。 LCD1602采用标准的14引脚(无背光)或16引脚(带背光)接口,各引脚接口
5、说明如表:(3)LCD1602共有11条控制指令如表:3.2.2按键检测电路按键检测电路(1)单片机IO口独立按键检测原理:由电路原理图可以看出,按键的一端与电源地相连,另一端与单片机的P1口相连,这也就意味着当按键按下的时候与按键相连单片机IO口将被拉低,换句话说,当单片机检测到与按键相连的IO口被拉低就证明此按键被按下,那门我们将此功能上一个层次来说呢,按键就是一个人机接口。那么按键的操作并没有我们想象的“按下松开”那么简单,在实际应用中,手动操作需要消抖。(2)按键的消抖:通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号小型如下图。由于机械触点的弹性作用,一个按键开关在
6、闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图。抖动时间的长短由按键的机械特性决定,一般为5ms10ms。这是一个很重要的时间参数,在很多场合都要用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。按键的抖动,可用硬件或软件两种方法。(3)按键按下产生的波形图(3)硬件与非消抖图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0
7、。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),只要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。这一点通过分析RS触发器的工作过程很容易得到验证。(4)软件延时消抖如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms20ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms20ms的延时,待后沿抖动消失后才能转入该键的处理程序。本实验中采用软件延时消抖。四、实
8、验步骤: 1. 用Proteus设计1602液晶显示接口电路; 2. 在CCS中编写液晶显示控制语言程序,编译通过后,与Proteus联合调试; 3. 在Proteus中仿真模拟。 实验电路图:五、软件设计 5.1 倒时计器主程序 程序的的开始时先设定延时时间,检测按键是否按下,如果有按键按下,进入相应的按键处理函数。每当进入定时中断一次变量秒钟自动减一,当秒钟等于0时即为计时一分,此时分钟减一,秒钟重新赋初值,并且之前设定的倒计时初值自动减一,同时进行相关的显示5.2中断程序设计本程序以中断加查询的方法来检测按键是否按下,中断大约每秒钟查询一次,当有按键按下时,程序进入中断服务函数,清零中断
9、标志位,并进入按键查询函数,判断按键功能,然后执行相应的操作,达到设定时间和清零的效果。六、调试与结论调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序错误,同时也能发现硬件故障。程序的调试应一个模块一个模块地进行,首先单独调试各功能子程序,检验程序是否能够实现预期的功能,接口电路的控制是否正常等.最后逐步将各子程序连接起来进行联调。本系统的程序的编写就是在CCS软件中用C语言完成的。在程序中用到了一个中断,为了使倒计时的时间准确,必须计算延时时间,当程序完成之后,生成HEX文件。再利用Proteus软件进行仿真。 经过仿真和测试,程序在运行时完全没有闪烁。在程序中,每一秒钟检测中断一次
10、,变量 秒自减。电路中的四个个按键可以分别用来设定倒计时的计数范围,经过测试与分析,此系统稳定可用,满足设计要求。附录:程序#include #include string.h#define uchar unsigned char#define uint unsigned intvoid P24_Onclick();void P25_Onclick();void P26_Onclick();void P27_Onclick();void display();void write_dat(uchar dat);void write_com(uchar com); /写命令函数#define CP
11、U_F (double)1100000)#define delay_us(x) _delay_cycles(long)(CPU_F*(double)x/1000000.0)#define delayms(x) _delay_cycles(long)(CPU_F*(double)x/1000.0)const uchar table1= TIME: ;const uchar table2=00:00;const uchar table3=0123456789;#define SET_RS P2OUT |= BIT0#define RST_RS P2OUT &= BIT0#define SET_RW
12、 P2OUT |= BIT1#define RST_RW P2OUT &= BIT1#define SET_E P2OUT |= BIT2#define RST_E P2OUT &= BIT2uchar const led_tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar key,flag=0;unsigned char disp_buf4;int fen =0,miao=0;void write_com(uchar com) /写命令函数 RST_RS; RST
13、_RW; P1OUT= com; SET_E; delay_us(1); RST_E;void write_dat(uchar dat) SET_RS; RST_RW; P1OUT=dat; SET_E; delay_us(1); RST_E;void system_Initial(void) P1DIR = 0xFF; P1SEL = 0x00; P1OUT = 0x00; P2IE |= (BIT4+BIT5+BIT6+BIT7); P2IES |= (BIT4+BIT5+BIT6+BIT7); P2IFG &=(BIT4+BIT5+BIT6+BIT7); /液晶初始化 P2DIR = B
14、IT0 + BIT1+ BIT2; RST_E; write_com(0x38); /设置16*2显示 ,5*7点阵,8位数据接口 delay_us(5); write_com(0x01); /显示清屏 delay_us(5); write_com(0x0C); /显示开关,光标设置 delay_us(5); write_com(0x06);/显示开关,光标设置 delay_us(5); _EINT();void P2_IODect() unsigned int Push_Key=0; Push_Key=P2IFG&(P2DIR); _delay_cycles(10000); if(P2IN&
15、Push_Key)=0) switch(Push_Key)/ case BIT0: P10_Onclick(); break;/ case BIT1: P11_Onclick(); break;/ case BIT2: P12_Onclick(); break;/ case BIT3: P13_Onclick(); break; case BIT4: P24_Onclick(); break; case BIT5: P25_Onclick(); break; case BIT6: P26_Onclick(); break; case BIT7: P27_Onclick(); break; de
16、fault: break; void P24_Onclick() if(flag = 1) flag=0; else flag = 1;void P25_Onclick() fen=0; miao=0; display();void P26_Onclick() fen+; display();void P27_Onclick() miao+; display();void display() unsigned char i; disp_buf3 = fen / 10; disp_buf2 = fen % 10; disp_buf1 = miao/ 10; disp_buf0 = miao% 10; write_com(0x80);/ 数据指针设置,第一行显示 delay_us(5); for(i=0;i 0) miao-; else do P4OUT = BIT0; delayms(1); while(flag=1); else if(miao 0) miao-; else miao = 59; fen -; display(); else display(); P4OUT &= BIT0; delayms(1000);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1