电子系统综合设计Word格式文档下载.docx
- 文档编号:20965938
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:19
- 大小:1.48MB
电子系统综合设计Word格式文档下载.docx
《电子系统综合设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《电子系统综合设计Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
sbitLSC=P2^4;
sbitKey_H=P1^7;
sbitS1=P1^3;
sbitS2=P1^2;
sbitS3=P1^1;
sbitS4=P1^0;
sbitK1=P3^1;
sbitK2=P3^0;
sbitK3=P3^2;
sbitK4=P3^3;
sbitSRCLK=P3^6;
sbitRCLK=P3^5;
sbitSER=P3^4;
unsignedcharMode,n=0;
//n为节拍常量
unsignedcharSetState,SetPlace;
unsignedcharcodeDIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharNum=0;
unsignedintdisp[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
unsignedcharcodemusic_tab[]={
0x18,0x30,0x1C,0x10,//格式为:
频率常数,节拍常数,频率常数,节拍常数,
0x20,0x40,0x1C,0x10,
0x18,0x10,0x20,0x10,
0x1C,0x10,0x18,0x40,
0x1C,0x20,0x20,0x20,
0x1C,0x20,0x18,0x20,
0x20,0x80,0xFF,0x20,
0x30,0x1C,0x10,0x18,
0x20,0x15,0x20,0x1C,
0x20,0x20,0x20,0x26,
0x40,0x20,0x20,0x2B,
0x20,0x26,0x20,0x20,
0x20,0x30,0x80,0xFF,
0x20,0x20,0x1C,0x10,
0x18,0x10,0x20,0x20,
0x26,0x20,0x2B,0x20,
0x30,0x20,0x2B,0x40,
0x20,0x30,0x1C,0x10,
0x18,0x20,0x15,0x20,
0x26,0x40,0x20,0x20,
0x2B,0x20,0x26,0x20,
0x20,0x20,0x30,0x80,
0x20,0x10,0x1C,0x10,
0x20,0x20,0x26,0x20,
0x2B,0x20,0x30,0x20,
0x2B,0x40,0x20,0x15,
0x1F,0x05,0x20,0x10,
0x1C,0x10,0x20,0x20,
0x20,0x20,0x30,0x30,
0x18,0x40,0x1C,0x20,
0x20,0x20,0x26,0x40,
0x13,0x60,0x18,0x20,
0x15,0x40,0x13,0x40,
0x18,0x80,0x00
};
//--列选通控制--//
unsignedcharcodeTAB[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsignedcharcodeCHARCODE[4][8]=
{
{0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00},//I
{0x3C,0x08,0x18,0x18,0x04,0x10,0x38,0x30},//love
{0x00,0x00,0x3C,0x04,0x00,0x1C,0X00,0X00},//LI
};
voidInt0Configuration();
voidLcdDisplay();
voidTimer0Configuration();
voidHc595SendByte(unsignedchardat);
/*********************************************************
*函数名:
Delay10ms
*函数功能:
延时函数,延时10ms
*输入:
无
*输出:
***********************************************************/
voidDelayms(unsignedinta)//误差0us
unsignedchari;
for(;
a>
0;
a--)
{
for(i=110;
i>
i--);
}
}
voiddelay(unsignedcharm)//控制频率延时
{
unsignedi=3*m;
while(--i);
}
/***********************
Key_SetTime();
*函数功能:
设定时间按下K3,开始设定时间,按K1选择设定时分秒月日,
********************/
voidKey_SetTime(void)
if(SetState==0)
{
Ds1302ReadTime();
}
else
if(K1==0)//检测按键K1是否按下
{
Delayms(5);
//消除抖动
if(K1==0)
{
SetPlace++;
if(SetPlace>
=7)
SetPlace=0;
}
while((i<
50)&
&
(K1==0))//检测按键是否松开
Delayms(5);
i++;
i=0;
}
if(K2==0)//检测按键K2是否按下
if(K2==0)
TIME[SetPlace]++;
if((TIME[SetPlace]&
0x0f)>
9)//换成BCD码。
{
TIME[SetPlace]=TIME[SetPlace]+6;
}
if((TIME[SetPlace]>
=0x60)&
(SetPlace<
2))//分秒只能到59
TIME[SetPlace]=0;
=0x24)&
(SetPlace==2))//小时只能到23
=0x32)&
(SetPlace==3))//日只能到31
=0x13)&
(SetPlace==4))//月只能到12
}
=0x7)&
(SetPlace==5))//周只能到7
TIME[SetPlace]=1;
}
(K2==0))//检测按键是否松开
}
/*************工作模式设定*************************/
voidKey_Mode()
uchartemp;
Key_H=0;
temp=P1;
temp=temp&
0x0f;
if(temp!
=0x0f)
{
Delayms(5);
switch(temp)
case0x07:
//S1
if(Mode==1)
Mode=0;
else
Mode=2;
break;
case0x0B:
//S2
if(Mode==2)
Mode=3;
case0x0D:
//S3
if(Mode==3)
Mode=1;
case0x0E:
//S4
if(Mode==4)
Mode=4;
while(temp!
temp=P1;
}
voidmain()
unsignedcharp,m;
//m为频率常数变量
unsignedchari=0;
unsignedchartab,j;
Int0Configuration();
Timer0Configuration();
LcdInit();
Ds1302Init();
while
(1)
Key_Mode();
//模式1--LCD显示
if(Mode==1)
LcdDisplay();
//模式4---数码管显示
if(Mode==4)
disp[7]=DIG_CODE[TIME[0]&
0x0f];
disp[6]=DIG_CODE[TIME[0]>
>
4];
disp[5]=0X40;
disp[4]=DIG_CODE[TIME[1]&
disp[3]=DIG_CODE[TIME[1]>
disp[2]=0X40;
disp[1]=DIG_CODE[TIME[2]&
disp[0]=DIG_CODE[TIME[2]>
//模式2---蜂鸣器
if(Mode==2)
while(Mode==2)
a:
p=music_tab[i];
if(p==0x00){i=0,Delayms(1000);
gotoa;
}//如果碰到结束符,延时1秒,回到开始再来一遍
elseif(p==0xff){i=i+1;
Delayms(100),TR0=0;
}//若碰到休止符,延时100ms,继续取下一音符
else{m=music_tab[i++],n=music_tab[i++];
}//取频率常数和节拍常数
TR1=1;
//开定时器1
while(n!
=0)
Beep=~Beep;
delay(m);
Key_Mode();
}//等待节拍完成,通过P1口输出音频(可多声道哦!
)
TR1=0;
//关定时器1
Beep=0;
//模式3--8*8点阵
if(Mode==3)
for(i=0;
i<
50;
i++)//两个字之间的扫描间隔时间
for(tab=0;
tab<
8;
tab++)
{
Hc595SendByte(0x00);
//消隐
DIG=TAB[tab];
//输出字码
Hc595SendByte(CHARCODE[j][tab]);
delay
(2);
j++;
if(j==4)
j=0;
/*******************************************************************************
LcdDisplay()
显示函数
*******************************************************************************/
voidLcdDisplay()
LcdWriteCom(0x80+0X40);
LcdWriteData('
0'
+TIME[2]/16);
//时
+(TIME[2]&
0x0f));
-'
);
+TIME[1]/16);
//分
+(TIME[1]&
+TIME[0]/16);
//秒
+(TIME[0]&
LcdWriteCom(0x80);
2'
+TIME[6]/16);
//年
+(TIME[6]&
+TIME[4]/16);
//月
+(TIME[4]&
+TIME[3]/16);
//日
+(TIME[3]&
LcdWriteCom(0x8D);
+(TIME[5]&
0x07));
//星期
/************************************************/
voidHc595SendByte(unsignedchardat)
unsignedchara;
SRCLK=0;
RCLK=0;
for(a=0;
a<
a++)
SER=dat>
7;
dat<
<
=1;
SRCLK=1;
_nop_();
SRCLK=0;
RCLK=1;
_nop_();
Int0Configuration()
配置外部中断0
voidInt0Configuration()
//设置INT0
IT0=1;
//跳变沿出发方式(下降沿)
EX0=1;
//打开INT0的中断允许。
//EA=1;
//打开总中断
voidTimer0Configuration()
TMOD=0X12;
//选择为定时器模式,工作方式2,仅用TRX打开启动。
TH0=0X9C;
//给定时器0赋初值,定时100us
TL0=0X9C;
TH1=0xd8;
TL1=0xef;
ET1=1;
//打开定时器1中断允许
ET0=1;
//打开定时器0中断允许
EA=1;
//打开总中断
TR0=1;
//打开定时器0
Int0()
外部中断0中断函数
voidInt0()interrupt0
if(K3==0)
SetState=~SetState;
SetPlace=0;
Ds1302Init();
DigDisplay()interrupt1
中断数码管显示
voidDigDisplay()interrupt1
DIG=0;
//消隐
switch(Num)//位选,选择点亮的数码管,
case(7):
LSA=0;
LSB=0;
LSC=0;
break;
case(6):
LSA=1;
case(5):
LSB=1;
case(4):
case(3):
LSC=1;
case
(2):
case
(1):
case(0):
DIG=disp[Num];
//段选,选择显示的数字。
Num++;
if(Num>
7)
Num=0;
voidint1()interrupt3//采用中断3控制节拍
{TH0=0xd8;
TL0=0xef;
n--;
五.实验小结
电子综合设计是培养学生综合运用所学的知识,锻炼实际能力的重要环节,在这次课程设计我收获很多。
1.提高了我的逻辑思维能力,使我们设计和分析上有了很大的进步。
加深了对对微机原理的了解。
2.由于许多的知识都不知道,我们查阅了很多的资料与书籍,有的问题还是问了同学才解决的。
3.通过本次实验才发现,合作是很重要的,相互合作,可以解决很多问题。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 系统 综合 设计