ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:356.58KB ,
资源ID:23466676      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23466676.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(华东师范大学计算机科学技术系上机实践报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

华东师范大学计算机科学技术系上机实践报告.docx

1、华东师范大学计算机科学技术系上机实践报告华东师范大学计算机科学技术系上机实践报告实验目的利用MSP430勺基本结构和外围模块来设计一个较为完整的作品实验设备实验原理通过K1K4个按键,LED3LED两个LED,外接蜂鸣器,这次实验设计了一个带校时和闹钟的时钟系统。 和MSP430来实现整个系统。这个软件一上电就开始从 00: 00: 00记时,可以通过键操作set_alarm ,和set_time ,当time到达和alarm 中的预设值相同时,蜂鸣器响 2s后停止(time还是在不断累加)。1.硬件部分:1)上的DVSS2端口 99接蜂鸣器的GND并插上开(图2)P 1.1作为蜂鸣器的信号来

2、控制其发声。K1K4四个按键和LED3(P1.0),LED4(P5.1)都是开发板上已经连接好的。因为实验板上没有提供蜂 鸣器,所以外接了一个蜂鸣器。参考实验原理图(图 发板上提供的一个 VCC来为蜂鸣器提供电源。然后再用a图1AVSS DVSSI AVCCPI j火/ 火- 亮)O使用WDT勺普通定时器功能,为时钟和蜂鸣器来提供时钟信号。因为时钟需要的频率为 低频率下无法出声。则在 WDT勺中断函数中有如下处理:设置 WDTCTL = WDT_MDLY_0_即 2KHZ 然后设置 static second_cnt = 0 ,当它到达 2000, 局变量time_1s_ok,当主程序读到ti

3、me_1s_ok这个标志,就对时间进行更新(在数码管上增加1HZ,蜂鸣器在即1s,再修改全1s ) O当alarm_ok = 1 (即闹钟设定的时间和当前时间相等时)就按照 2KHZ勺频率来让蜂鸣器发声,并通过alarm cnt = 4000 来控制蜂鸣器只响 2s。#p ragma vector = WDT_VECTOR _interru ptstaticstaticifvoid WDT_lnterrupt( void )int second_cnt = 0; int alarm_cnt = 0;(alarm_ok)P1OUT A= 0x02; alarm_cnt+;if (alarm_cn

4、t=4000) alarm_ok = 0;/ P1.1 out put Togglesecond_cnt+;time_1s_ok = 1; second_cnt = 0; P1OUT A= 0x01;读取键值部分就参照例程 KB12,通过延时来消除抖动。进行实验,了解有中断和轮询两种方式来读取 键值。I* key_Event(),检测键盘是否有键按下,如果有获取键值*I void key_Event( void )unsigned char tmp;P1OUT &= 0x01;tmp = P1IN;II设置P1OU输出值II获取p1INif (key_Pressed =0x00)&(tmp &

5、 0xf0) 0xf0)IIkey_ Pressed = 1; IIdelay(); IIcheck_Key(); II是否有键按下如果有按键按下,设置key_Pressed标识 消除抖动调用check_Key(),获取键值else if (key_Pressed =1)&(tmp & 0xf0) = 0xf0)IIIIIIkey_ Pressed = 0; key_Flag = 1;是否按键已经释放清除key_Pressed标识 设置key_Flag标识在数码管显示部分也参照例程,一个led_Display(),因为while循环的速度很快,所以通过在自己的main函数中只需要修改led_B

6、uf的内容,再在while循环中的末尾加led_Dis play() 可以实现动态刷新。I* LED 显示,该函数可以放到定时器中断中*Ivoid led_Display() unsigned tmp ;tm p = 0x01;P 3OUT = NUM_LEDled_Bufled_Ctrl;P 4OUT |= 0x02;P 4OUT &= 0XFD;P 3OUT = (t mp vvled_Ctrl);P 4OUT |= 0x01;P4OUT &= 0XFE;led_Ctrl= (led_Ctrl +1) % LED_IN_USE;IIIIIIIIIIIIII设置显示值打开数据锁存器关闭数据锁

7、存设置那只LED显示打开控制锁存关闭控制锁存设置下一个要显示的LED四、实验内容在MSP430的资源和外接蜂鸣器的基础上,编写一个带校时和闹钟的时钟系统软件。主要的流程的伪代码是while (1)修改time中数据,并修改Ied8中的数据 判断如果time中的值和alarm中的值数据一样,set alarm_ok 标志位key_Event(); / 读取键值switch (key_value) /处理键值的子模块 在程序中增加一个return_time的变量,设置目的是在设置time或者alarm过程中,如果20s没有按 键事件发生,则返回显示时间状态。状态转换图如下图:配置好硬件环境,外接上

8、蜂鸣器。 设计软件,上机调试运行。1.因为这个实验实际是综合以前的 LED数码管,Keyboard,WDT勺部分,遇到的问题不是特别多,在开始在调试的时候发现无论怎样修改程序,在实验板上跑出的结果都是一样的(不是我修改 的程序的正确结果)。因为以前碰到过类似情况,是通过 P roject clean 清除以前生成的Object代码,再重新生成就可以了。但是这次没有效果。经过很长时间的查错才发现是在项目 的设置里面,选择的是 Simulator,而不是Flash Online Debug 。所以程序一直没有下载到目标板上,目标板上跑的是以前固化在上面的程序。2.在最初Key_board读取键值时

9、没有参考例程采用消除抖动,就自己直接写的一个读取键值。尽管 以前原理课上也讲过需要消除抖动,但是自己没有一个直观印象。通过实验发现得到的结果一 直不对,问题就是出在按下一次键会读出几次键值。这种硬件部分的问题只有通过真正的实践 才会了解,否则光看看原理脱离硬件,自己推测的结果往往是不正确的。然后结合硬件和原理, 了解读键值可以通过中断和轮询两种方法来进行。在这次写的程序里面直接采用例程的 voidkey_Event( void ),通过轮询来读取键值。实际操作时可以对其中通过 delay来消抖进行优化,使用一个Timer来控制Press. Release 之类的状态转换。=/#defineMS

10、P430F449_H 0#include#ifndefLED_IN_USE#include././led/led.c#endif#ifndefKEY_BOARD#includekeyboard12.c#endif#definekey_set_time 1#definekey_set_alarm 2#definekey_change_state 3#definekey_change_value 10unsignedchar time_1_alarm_2;unsignedchar time3,time_set3,alarm_set3;unsignedchar dis_buff6;unsignedc

11、har time_1s_ok,alarm_ok;unsignedchar clock_state = 6,return_time=0;void setWDT( int mode)unsigned int tmp;if (mode=1) /定时器模式WDTCTL = WDT_MDLY_0_5; / 1000ms 中断间隔 IE1 |= WDTIE;P1DIR |= 0x01;P1DIR |= 0x02;P5DIR |= 0x02; _EINT(); else if (mode=0)/使能WDT中断/ P1.0 out put mode / P1.1 out put mode / P5.1 out

12、 put mode/开中断/看门狗模式WDTCTL = WDT_ARST_250; /设置看门狗时间间隔为 ms/在系统加电后,默认子系统时钟频率是 MII延迟/P5.1 out put mode/light LED4/延迟,执行一次tmp-至少要用个指令for (tmp=0x7fff;tmp0;tmp-); P1DIR |= 0x01;P1OUT |= 0x01;for (tmp=0x7fff;tmp0;tmp-);voidtime_to_disbuffer( unsigned char *time) / 时钟显示送显示缓冲区函数unsigned char i,j=0; for(i=0;iv

13、3;i+)led_Buf(5-(j+) = timei%10; led_Buf(5-(j+) = timei/10;/*函数说明:* WDT 中断函数*/#p ragma vector = WDT_VECTOR _interru ptvoid WDT_Interrupt( void )staticstatic if (alarm_ok)int second_cnt = 0; int alarm_cnt = 0;P1OUT A= 0x02; alarm_cnt+;if (alarm_cnt=4000) alarm_ok = 0; - -/ P1.1 out put Togglesecond_cn

14、t+;if (second_cnt=2000)time_1s_ok = 1; second_cnt = 0; P1OUT A= 0x01;/* main()函数*/alarm_ok = 0;time1 = 0;if (+time2=24) time2 = 0;ifif(+return_time = 20) & (clock_state != 6 ) clock_state = 6; (clock_state = 6) time_to_disbuffer(time);/matchif ( (alarm_set0 = time0) & (alarm_set1 = time1) & (alarm_s

15、et2 = time2) alarm_ok = 1;/if(key_stime_ok)-/检测按键事件/检测key_val里是否有键值可以读取key_Event();if (key_Flag = 1)-key_Flag = 0;switch (key_val)/恢复键盘按键标识 casecasekey_set_time:/set time clock_state = 6; time_1_alarm_2 = 1;/ 亮 led4P 50UT |= 0x02;break;key_set_alarm:/set alarm clock_state = 6; time_1_alarm_2 = 2;/ 灭

16、 led4P 5OUT &=(0x02);break;for (i=0;i3;i+)time_seti = 0;time_to_disbuffer(time_set);for (i=0;i3;i+) timei = time_seti; time_to_disbuffer(time); elsefor (i=0;i=60) time_set0 -=60;if (time_set1=60) time_set1 -=60;if (time_set2=24) time_set2 -=10;time_to_disbuffer(time_set);/end if/end case/响应else /tim

17、e_1_alarm_2 = 2 return_time = 0;if (clock_state!=6) if (clock_state%2) alarm_setclock_state/2 +=10; elseif (alarm_setclock_state/2%10)=9) alarm_setclock_state/2 -=9;else alarm_setclock_state/2 +=1; /end ifif (alarm_set0=60) alarm_set0 -=60;if (alarm_set1=60) alarm_set1 -=60;if (alarm_set2=24) alarm_set2 -=10;time_to_disbuffer(alarm_set);/end if default :break; /end switch /end if/使用LED数据 /end ifled_Dis play(); /end while

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1