单片机实验报告实时时钟.docx
- 文档编号:16587989
- 上传时间:2023-07-15
- 格式:DOCX
- 页数:17
- 大小:40.12KB
单片机实验报告实时时钟.docx
《单片机实验报告实时时钟.docx》由会员分享,可在线阅读,更多相关《单片机实验报告实时时钟.docx(17页珍藏版)》请在冰点文库上搜索。
单片机实验报告实时时钟
单片机实验报告
姓名:
学号:
姓名:
学号:
、实验要求:
1.设计一个实时时钟,四个八段数码管显示格式为:
XX.XX(小时/分钟,24小
时计时法);使用一个LED用来显示秒的状态,显示规则为:
以1Hz频率闪烁,既亮灭一次为一秒钟,500毫秒亮、500毫秒灭。
2.实时时钟可以通过3x4键盘设置初始值。
数字键用于输入数值,sfbO键为设置键,sfb1键为开关键。
3.设置初始值的流程:
先按下sfbO键,四个数码管显示内容变为全“0”,并
以1HZ频率开始闪烁并等待键盘输入小时、分钟数值(其中小时2位数,分
钟2位数),输入完毕后,实时时钟开始以新输入的时间值开始计时。
4.开关键的使用方法:
在计时模式下按sfb1键一次,时钟停止计时,时间数值停留在按键那刻;在停止计时模式下,按sfb1键一次时钟开始继续计时。
5.定时闹铃功能(加分功能,可选做):
按sgp0_key键,进入闹铃值设置模式,
四个数码管显示内容变为全“0”,并以1HZ频率开始闪烁并等待键盘输入小时、分钟数值(其中小时2位数,分钟2位数),此时计时仍然运行,输入完毕后,显示内容恢复为计时值。
当时钟计时到达闹铃值,驱动蜂鸣器鸣响8
次。
6.增加通过RS232接口,更改时钟当前时间的功能。
二、实验程序说明:
对实验按键和存储位置的说明语句:
1.创建一个新工程,在该工程的器件编辑器(DeviceEditor)中选择定时器模块,然后将其按要求放置,如图所示。
图定时器模块放置图
2.配置全局资源。
单击参数内容方框里的下拉箭头,选择合适的参数值,便可以更改工程中默认的全局资源。
此实验配置的全局资源如图所示。
GlobalRsfowrces
Vdu?
FewerSetting[Vcc/创劉
5lCM/24MHz
CPU.Oock
Sy£lk/2
Sleep_Tinri&r
512_H5
VC1=SvsClk/N
12
VC2=k/Cl?
N
10
VCSSoucs
vcz
VC3Divider
100
SvsCIkSource
Irtwial
SysClkx2Disable:
Na
AralogPower
5COn/RefLwj
FiefMuk
(Vdd/ZIt/B^ndGap
Doable
Op-AmpBias
Low
A_Bufl_Po^r
Low
TripVolage[LVD]
J.81V11
LWDThfottleflack
Disable
WatchdogEnable
Disable
图全局资源配置
3.按图配置Timer8定时器模块的参数
TinerS1
UserModuleIParameters
Value
Clock
VC3
Capture
Low
TerminalCountOwt
None
匚ompareOut
|None|十
Period
9
Compare7alue
0
匚ompareTppe
LessThanOrEqual
IntersptTj^pe
Termin-elCount
CltKkSyric
S^jhcitoGpsCIk
兀-尸ul新Width
FullClock
InveitCaplure
Norrnall
4•按图配置管脚驱动模式
Name
Port
Select
Drive
Interrupt
dp
P3[0]
SldCPU
Strong
Disablelnl
g
P3[1]
SldCPU
Shorig
Disatlelnt
1
P3[2]
SUdCPU
Sbong
Disatlelnl
e
P3[3]
StdCPU
Strong
Disablelrt
d
P3[4]
SldCPU
Strong
Disatilelnt
e
P3[5]
SUdCPU
Sbung
Dkablalnt
b
P3[6]
SldCPU
Strong
Disablelnt
■J
P3P1
SldCPU
Shong
Disablelnt
LED_1
P4[0]
SldCPU
Strong
Drsatilelnt
LED_2
P4[1]
SldCPU
Strong
Disablelnl
LED」
P4[2]
SldCPU
Strong
Disablelnt
LED4
P4[3]
SUdCPU
Strong
Disablelr*
图管脚驱动模式的参数配置
5.程实现3X4矩阵键盘扫描功能,将按下键的键值显示在数码管上。
相应的按键管脚配置如图如示。
Fort
Select
Driyie
Interrupt
coLO-kev1
P5{0]
SldCPU
Strong
DisaHelnt
00|_1_呦
切
SUjCPU
Strong
Disablelnt
col_2_key
田田
SldCPU
Strong
Diublelnt
NULL
P5(3]
SMCRJ
Strong
DnaUelnt
r(wj_0_kejJ
P甲]
SLdCPU
High2
FallingEdge
rowi1_k^y
P5(5l
StdCFU
HighZ
FallingEdge
ro
_2_key
P5(S]
SldCPU
HighZ
FalingEd^e
row_3_kev
P517]
StdCFU
HighZ
FallingEdge^
Port_7_0
P徊
SldCPU
HighM上
Disabldnt
PM
SldCPU
High
Dis^blelnt
按键管脚配置
实验程序:
////文件名:
main.c
//
#include
#include"PSoCAPI.h"//PSoCAPIdefinitionsforallUserModules#pragmainterrupt_handlerKeyScan#pragmainterrupt_handlertimer1_ISR
//voidKeyScan();
voiddelay10ms(unsignedchartime);
voidDispaly(unsignedchark);
unsignedcharkey=1,temp,stopCount;
BYTEbyte_Period,byte_Duty;
#defineDATAPRT3DR
#defineSELPRT4DR
#defineLED10b11111110
#defineLED20b11111101
#defineLED30b11111011
#defineLED40b11110111
#definedp0b11111110
#definesfb010
#definesfb111
#defineSTOP12
#defineRESET13
#defineCLOCK14
#definesgp0_key0
/*commonanodeLED,thereforetheLEDwilllightwhenthepinislow*/unsignedcharnum[17]=
{0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11,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;unsignedcharled_dp=0,setnum=1;
//setnum表示当前设置的是第几位
unsignedcharflag0,flag1,i,j;//flag0设置当前显示的是时钟还是设置的数,flag1设置时钟是停下来还是走
unsignedintcount=0,dpcount=0;
//count就是一个计数的,dpcount是专门针对秒钟的点设置的计数的,根据实验的要求要分开
unsignedcharclock1,clock2,clock3,clock4;
I**********************************************************************/voidtimer1_ISR()
{
if(led_count==5)led_count=1;//从第一位开始dpcount++;
if(flag1==0&&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_dig;
led4=led4_dig;
}
switch(led_count)
{
case1:
在设置的时候控制LED1
灯灭高电平熄灭,低电平
灯亮,sel就是设置
if(setnum==1&&dpcount%200>99)//灯的闪烁,半秒时间亮半秒时间灭SEL=0xff&LED1,DATA=0xff;//LED1点亮
else
SEL=0xff&LED1,DATA=reg[led1];//LED1的地址,data就是置数
break;
case2:
if(setnum==2&&dpcount%200>99)SEL=0xff&LED2,DATA=0xff;
elseif(flag1||led_dp==2&&dpcount%200<100)SEL=0xff&LED2,DATA=reg[led2]&dp;//秒钟的点额外分配,else
SEL=0xff&LED2,DATA=reg[led2];
break;
case3:
if(setnum==3&&dpcount%200>99)
SEL=0xff&LED3,DATA=0xff;
else
SEL=0xff&LED3,DATA=reg[led3];
break;
case4:
if(setnum==4&&dpcount%200>99)
SEL=0xff&LED4,DATA=0xff;
else
SEL=0xff&LED4,DATA=reg[led4];
break;
default:
break;
}
++led_count;//设置的时候第几位闪烁
}
voidKeyScan()//键盘中断程序
{
PRT5DR=0b11111110;//assignp5[0]=0temp=PRT5DR;
temp&=0xF0;//
if(temp!
=0xF0)
{
delay10ms
(1);temp=PRT5DR;
temp&=0xF0;
if(temp!
=0xF0)
{temp=PRT5DR;temp&=0xF0;switch(temp){case0X70:
key=7;break;
case0XB0:
key=4;break;
case0XD0:
key=1;break;
case0XE0:
key=0;break;
}
}
}
PRT5DR=0b11111101;//assignp5[1]=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;
case0b11010000:
key=2;break;
case0b11100000:
key=sfb0;break;
}
}
}
PRT5DR=0b11111011;//assignp5[2]=0temp=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;
case0b11100000:
key=sfb1;break;
}
}
}
PRT5DR=0xf0;
延时函数
}
voiddelay10ms(unsignedchartime)//unsignedchara,b,c;
for(a=0;a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告 实时 时钟