单片机试验报告_实时时钟_第1页
单片机试验报告_实时时钟_第2页
单片机试验报告_实时时钟_第3页
单片机试验报告_实时时钟_第4页
单片机试验报告_实时时钟_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机实验报口姓名:学号:姓名:学号:一、实验要求:1 .设计一个实时时钟,四个八段数码管显示格式为:XX.XX(小时/分钟,24小时计时法);使用一个LED用来显示秒的状态,显示规则为:以1Hz频率闪烁,既亮灭一次为一秒钟,500毫秒亮、500毫秒灭。2 .实时时钟可以通过3x4键盘设置初始值。数字键用于卒&入数值,sfb0键为设置键,sfbl键为开关键。3 .设置初始值的流程:先按下sfb0键,四个数码管显示内容变为全“0”,并以1HZ频率开始闪烁并等待键盘输入小时、分钟数值(其中小时2位数,分钟2位数),输入完毕后,实时时钟开始以新输入的时间值开始计时。4 .开关键的使用方法:在

2、计时模式下按sfbl键一次,时钟停止计时,时间数值停留在按键那刻;在停止计时模式下,按sfbl键一次时钟开始继续计时。5 .定时闹铃功能(加分功能,可选做):按sgp0_key键,进入闹铃值设置模式,四个数码管显示内容变为全“0”,并以1HZ频率开始闪烁并等待键盘输入小时、分钟数值(其中小时2位数,分钟2位数),此时计时仍然运行,输入完毕后,显示内容恢复为计时值。当时钟计时到达闹铃值,驱动蜂鸣器鸣响8次。6 .增加通过RS2328口,更改时钟当前时间的功能。二、实验程序说明:对实验按键和存储位置的说明语句:DeviceEditor)中选择定时器1.创建一个新工程,在该工程的器件编辑器(模块,然

3、后将其按要求放置,如图所示。图定时器模块放置图2,配置全局资源。单击参数内容方框里的下拉箭头,选择合适的参数值,便可以更改工程中默认的全局资源。此实验配置的全局资源如图所示。Global月中辛g苜Vdu?PowerSettingVcc/到,5lCM/24MHzCPU.Oock务心k/2Skep_Tinri&r512_H5VC1=SvsClk/N12VC2=k/Cl,N10VC3SoursvczVC3Divider100SvsCIkSourceIrtwialSysClkx2DisebieNaAralogPower5COn/RefLcwjRefMuK(Vdd/ZIt/BndGapAGndR

4、yg融DoableOp-AmpBi*LowA_Bufl_PorLowTupVoltageLVDJ.81V11LWDThfottleflackDisableWatchdogEnableDMb但图全局资源配置3.按图配置Timer8定时器模块的参数zJUserModuleParameters:ValueClockVC3CaptureLowTerminalCountOUNoneCompareOut!NonejPeriod9Compare7alue0CompareTppeLessThanOrEqualIntersptTjpeTermin-elCountCbckSyric二川匕toGpsCIkTJFu屈

5、Wi时FullClockInveitCaplureNorrnall4 .按图配置管脚驱动模式NamePortSelectDriveInterruptDisablelnldpP30SldCPUStronggP31SldCPUShorigDisatlelnt1P32SUdCPUSbongDisatlelnleP33StdCPUStrongDisablelntdP34StdCPUStrongDisatilelnteP35SUdCPUSbongDkabtelntbP36SldCPUStrongDisablelntJP3P1SldCPUShongDisable!ntLED_1P40SldCPUStron

6、gDrsatilelntLED_2P41SldCPUStrongDisablelnlLED_3P42SldCPUStrongDisablelnfLED_4P43SUdCPUStrongDisatlelnl图管脚驱动模式的参数配置相应的按5 .程实现3X4矩阵键盘扫描功能,将按下键的键值显示在数码管上键管脚配置如图如示。NemeFortSelectDriyieInterruptcoLO-kev1P5(0SldCPUStrongDisaHelntGO|_1_kGy网ISUjCPLJStrongDisablelntcol_2_keyP叼SldCPUStrongDisjblelntNULLP5(3WE

7、CFUStrongDisablelntr(wj_0_kejJP利SLdCPUHigh2FallingEdgerowi1_ky咫5StdCFUHighZFallingEdgero<?_2_keyP5GlSldCPUHighZFalingEdgero心一keyP517StdCFUHighZFallingEdgePort_7_0P刖StdCPUHigh2上Disabldnt叼7SldCPUHigh2上DisdblelntJ按键管脚配置实验程序:/文件名:main.c/#include<m8c.h>/partspecificconstantsandmacros#include&quo

8、t;PSoCAPI.h"/PSoCAPIdefinitionsforallUserModules#pragmainterrupt_handlerKeyScan#pragmainterrupt_handlertimer1_ISR/voidKeyScan();voiddelay10ms(unsignedchartime);voidDispaly(unsignedchark);unsignedcharkey=1,temp,stopCount;BYTEbyte_Period,byte_Duty;#defineDATAPRT3DR#defineSELPRT4DR#defineLED10b111

9、11110#defineLED20b11111101#defineLED30b11111011#defineLED40b11110111#definedp0b11111110#definesfb010#definesfb111#defineSTOP12#defineRESET13#defineCLOCK14#definesgp0_key0/*commonanodeLED,thereforetheLEDwilllightwhenthepinislow*/unsignedcharnum17=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11

10、,0xc1,0x63,0x85,0x61,0x71,0xff;unsignedcharreg=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11,0xc1,0x63,0x85,0x61,0x71,0xff;unsignedcharled1_dig=0,led2_dig=0,led3_dig=0,led4_dig=0;/分别是1,2,3,4数码管现石的数unsignedcharled1=0,led2=0,led3=0,led4=0;/?/当做缓存的数,设置的时候用到。unsignedcharled_count=1;unsignedchar

11、led_dp=0,setnum=1;/setnum表示当前设置的是第几位unsignedcharflag0,flagl,i,j;/flag0设置当前显示的是时钟还是设置的数,flagl设置时钟是停下来还是走unsignedintcount=0,dpcount=0;/count就是一个计数的,dpcount是专门针对秒钟的点设置的计数的,根据实验的要求要分开unsignedcharclock1,clock2,clock3,clock4;I*/voidtimer1_ISR()(.if(led_count=5)led_count=1;/从第一位开始dpcount+;if(flagl=0&&a

12、mp;count+=200)/*频率是五十赫兹,要求四个数码管都显示一边,乘以四,就是200*/(count=0;if(led4_dig+=9)/if函数设置进制的问题,考虑时间不是十进制,所以对每位分别设置(led4_dig=0;if(led3_dig+=5)(.led3_dig=0;if(led2_dig=3&&led1_dig=2|led2_dig=9)(一一led2_dig=0;if(led1_dig+=2)led1_dig=0;).elseled2_dig+;).)if(flag0=0)(led1=led1_dig;led2=led2_dig;led3=led3_di

13、g;led4=led4_dig;).switch(led_count)(.case 1:在设置的时候控制LED1灯灭高电平熄灭,低电平灯亮,sel就是设置if(setnum=1&&dpcount%200>99)/灯的闪烁,半秒时间亮半秒时间灭SEL=0xff&LED1,DATA=0xff;LED1点亮elseSEL=0xff&LED1,DATA=regled1;/LED1的地址,data就是置数break;case 2:if(setnum=2&&dpcount%200>99)SEL=0xff&LED2,DATA=0xff;el

14、seif(flag1|led_dp=2&&dpcount%200<100)SEL=0xff&LED2,DATA=regled2&dp;/秒钟的点额外分配,elseSEL=0xff&LED2,DATA=regled2;break;case 3:if(setnum=3&&dpcount%200>99)SEL=0xff&LED3,DATA=0xff;elseSEL=0xff&LED3,DATA=regled3;break;case 4:if(setnum=4&&dpcount%200>99)SE

15、L=0xff&LED4,DATA=0xff;elseSEL=0xff&LED4,DATA=regled4;break;default:break;)+led_count;/设置的时候第几位闪烁).voidKeyScan()/键盘中断程序(PRT5DR=0b11111110;/assignp50=0temp=PRT5DR;temp&=0xF0;/if(temp!=0xF0)(delay10ms(1);temp=PRT5DR;temp&=0xF0;if(temp!=0xF0)(temp=PRT5DR;temp&=0xF0;switch(temp)(case0

16、X70:key=7;break;case0XB0:key=4;break;case0XD0:key=1;break;case0XE0:key=0;break;PRT5DR=0b11111101;assignp51=0temp=PRT5DR;temp&=0xF0;if(temp!=0xF0)(delay10ms(1);temp=PRT5DR;temp&=0xF0;if(temp!=0xF0)(temp=PRT5DR;temp&=0xF0;switch(temp)(case0x70:key=8;break;case0b10110000:key=5;break;case0b1

17、1010000:key=2;break;case0b11100000:key=sfb0;break;)/assignp52=0)PRT5DR=0b11111011;temp=PRT5DR;temp&=0xF0;if(temp!=0xF0)delay10ms(1);temp=PRT5DR;temp&=0xF0;if(temp!=0xF0)temp=PRT5DR;temp&=0xF0;switch(temp)case0x70:key=9;break;case0b10110000:key=6;break;case0b11010000:key=3;break;case0b111

18、00000:key=sfb1;break;)PRT5DR=0xf0;)延时函数voiddelay10ms(unsignedchartime)/unsignedchara,b,c;for(a=0;a<time;a+)for(b=0;b<10;b+)for(c=0;c<120;c+);voidReset()/选择重置时间,内容跟设置闹钟差不多(flag1=1;key=STOP;led1_dig=led2_dig=led3_dig=led4_dig=0;setnum=1;while(key!=sfb0)(if(key!=STOP)(if(key<3)led1_dig=key;

19、key=STOP;delay10ms(1);setnum=2;key=STOP;while(key!=sfb0)(if(key!=STOP)(if(key<4|key<10&&led1_dig<2)led2_dig=key;key=STOP;delay10ms(1);setnum=3;key=STOP;while(key!=sfb0)(if(key!=STOP)(if(key<6)led3_dig=key;key=STOP;)delay10ms(1);)setnum=4;key=STOP;while(key!=sfb0)if(key!=STOP)if(k

20、ey<10)led4_dig=key;key=STOP;)delay10ms(1);)setnum=0;count=0;key=1;flag1=0;/启动开始计时)voidClockSet()flag0=1;key=CLOCK;led1=clock1;led2=clock2;led3=clock3;led4=clock4;setnum=1;while(key!=sfb0)设置第一个数,if(key!=CLOCK)if(key<3)led1=key;key=CLOCK;)delay10ms(1);)key=CLOCK;setnum=2;while(key!=sfb0)if(key!=

21、CLOCK)(设置第二位当第一位等于if(key<4|key<10&&ledl<2)/2时,第二位小于4led2=key;key=CLOCK;delay10ms(1);key=CLOCK;setnum=3;while(key!=sfb0)(if(key!=CLOCK)(if(key<6)led3=key;key=CLOCK;delay10ms(1);key=CLOCK;setnum=4;while(key!=sfb0)(if(key!=CLOCK)(if(key<10)led4=key;key=CLOCK;delay10ms(1);key=1;se

22、tnum=0;clock1=led1;clock2=led2;clock3=led3;clock4=led4;flag0=0;voiddelay()/就是一个延时(BYTEtmp1,tmp2;for(tmp1=0;tmp1<255;tmp1+)for(tmp2=0;tmp2<255;tmp2+);)voidmain()(INT_MSK0=0x0;PRT5DR&=0xf0;PRT1DR=0x0f;PRT5IE=0xf0;INT_MSK0|=0x20;M8C_EnableGInt;stopCount=0;/1:停止计时0:正常计时setnum=0;/从左往右分别是第几个数码管Timer8_1_EnableInt();M8C_EnableGInt;Timer8_1_Start();/Timer8中断开启l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论