单片机数字电子钟及波形发生器方案报告Word格式.docx
- 文档编号:17949426
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:18
- 大小:316.59KB
单片机数字电子钟及波形发生器方案报告Word格式.docx
《单片机数字电子钟及波形发生器方案报告Word格式.docx》由会员分享,可在线阅读,更多相关《单片机数字电子钟及波形发生器方案报告Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
//定义十位
unsignedcharh_gewei。
//定义个位
unsignedcharm_shiwei。
unsignedcharm_gewei。
unsignedchars_shiwei。
unsignedchars_gewei。
unsignedcharcolck_h_shiwei。
unsignedcharcolck_h_gewei。
unsignedcharcolck_m_shiwei。
unsignedcharcolck_m_gewei。
unsignedcharcolck_s_shiwei。
unsignedcharcolck_s_gewei。
unsignedcharhour=0,minute=0,second=0,count=0,AA=0,zd_flag,zd_count。
unsignedcharcolck_hour=0,colck_minute=0,colck_second=0,colck_flag,colck_count。
voiddelayms(unsignedintdelay>
//1ms延时函数
{
unsignedinti,x。
for(x=0。
x<
delay。
x++>
{
for(i=0。
i<
100。
i++>
。
}
}
voiddelay(unsignedintcnt>
while(--cnt>
voidInit_shumaguan(void>
h_shiwei=tab[0]。
h_gewei=tab[0]。
m_shiwei=tab[0]。
m_gewei=tab[0]。
s_shiwei=tab[0]。
s_gewei=tab[0]。
colck_h_shiwei=tab[0]。
colck_h_gewei=tab[0]。
colck_m_shiwei=tab[0]。
colck_m_gewei=tab[0]。
colck_s_shiwei=tab[0]。
colck_s_gewei=tab[0]。
voidInit_Timer1(void>
TMOD|=0x10。
//使用模式1,16位定时器
TH1=(65535-50000>
/256。
//给定初值TL1=(65535-50000>
%256。
EA=1。
//总中断打开
EX0=1。
//外部中断0开
IT0=1。
//电平触发
EX1=1。
//外部中断1开
IT1=1。
ET1=1。
//定时器中断打开
TR1=1。
//定时器开关打开
/*------------------------------------------------
主程序
------------------------------------------------*/
main(>
Init_Timer1(>
Init_shumaguan(>
LED1=0。
LED=0。
second=30。
while(1>
if(flag==2>
{
P2=0x01。
P1=colck_h_shiwei。
//显示秒十位
delay(300>
//短暂延时
P2=0x02。
P1=colck_h_gewei。
//显示秒个位
P2=0x08。
P1=colck_m_shiwei。
P2=0x10。
P1=colck_m_gewei。
P2=0x40。
P1=s_shiwei。
P2=0x80。
P1=s_gewei。
}
else
{
P2=0x01。
P1=h_shiwei。
P1=h_gewei。
P1=m_shiwei。
P1=m_gewei。
if(!
key1>
{
delayms(1>
if(!
while(!
if(flag==1>
{minute++。
if(minute==60>
{
minute=0。
}
m_shiwei=tab[minute/10]。
//十位显示值处理
m_gewei=tab[minute%10]。
//个位显示处理
}
if(flag==2>
{colck_minute++。
if(colck_minute==60>
colck_minute=0。
colck_m_shiwei=tab[colck_minute/10]。
colck_m_gewei=tab[colck_minute%10]。
}
key2>
//去抖动
//检测按键确实按下,进行按键处理
while(!
if(flag==1>
{
hour++。
if(hour==24>
hour=0。
h_shiwei=tab[hour/10]。
h_gewei=tab[hour%10]。
}
if(flag==2>
colck_hour++。
if(colck_hour==24>
colck_hour=0。
colck_h_shiwei=tab[colck_hour/10]。
colck_h_gewei=tab[colck_hour%10]。
*名称:
Time0_Int(>
*功能:
定时器中断
voidTimer1_Int(void>
interrupt3using1
//给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
TL1=(65535-50000>
//LED=~LED。
//指示灯反相,可以看到闪烁
count++。
if(count==20>
second++。
if(zd_flag==1>
zd_count++。
LED=1。
if(zd_count>
5>
{
LED=0。
zd_count=0。
zd_flag=0。
if(colck_flag==1>
colck_count++。
LED1=1。
if(colck_count>
15>
LED1=0。
colck_count=0。
colck_flag=0。
count=0。
if(second==60>
minute++。
second=0。
if(minute==60>
zd_flag=1。
hour++。
minute=0。
if(hour==24>
hour=0。
h_shiwei=tab[hour/10]。
h_gewei=tab[hour%10]。
if(minute==colck_minute&
&
hour==colck_hour>
colck_flag=1。
m_shiwei=tab[minute/10]。
m_gewei=tab[minute%10]。
s_shiwei=tab[second/10]。
s_gewei=tab[second%10]。
中断函数
voidISR_Key(void>
interrupt0using1//调时调分
AA=~AA。
TR1=AA。
if(AA==0>
flag=1。
//LED1=1。
flag=0。
//LED1=0。
/*------------------------------------------------
naoling
voidISR_Key2(void>
interrupt2
flag=2。
//LED=1。
//LED=0。
}
6.方案论证
P1口对应赋值的四个switch按键,由上到下分别控制秒分时,复位和闹钟。
P2口对应显示位显示,,P0口对应显示段显示,abcdefg每个代表一段。
还有晶振电路,蜂鸣器电路。
中断程序采用单片机内部T0实现,定时时间为125ms,当时间到达125乘以8,即1秒时,秒计数缓冲器增加1,到达一分钟时,分计数缓冲器加1,到达一小时时,时计数缓冲器增加1,并将秒分时的个位十位百位放入显示缓冲器。
当秒分时计数缓冲器分别到达60sec60min24h时,则对他们清零,以便重新计数。
7.调试过程
8.运行结果及收获体会
电子钟有复位功能,整点报时,六只LED数码管显示当前的时分秒,并且具有闹钟功能。
通过这次设计是我认识到我对单片机方面知识的匮乏,对于书本上的很多知识不能熟练应用,有很多知识需要自己去掌握,等待自己去认真学习,我会在以后的学习生活中弥补我所缺少的知识。
本次实验使我学到了一些重要的东西,理论到实践的转化,怎样将自己学到的东西用到以后的工作中去。
在大学课堂的学习仅仅只是被灌输了专业知识,而对与实践却是少之又少,此次电子钟设计给自己奠定了实践基础,我会在以后的学习生活中磨练自己,使自己适应于以后的竞争。
波形发生器的设计
1.设计题目
设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。
2.设计要求
利用单片机P1.0引脚输出频率范围1HZ~1000HZ的正弦波方波、三角波、梯形波、锯齿波并用示波器观察。
3.所用设备与器材
DAC0832、89C51、OPAMP、button、GROUND、示波器、电源。
4.硬件方案
采用单片机和数模转换DAC0832实现波形产生,波形的产生是通过AT89C51执行波形程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路输出端得到相关电压波形。
以AT89C51单片机为控制核心,P0口接DAC0832信号输入并进行数模转换,P2口接button。
5.软件方案
DAC0832采用单缓冲方式。
ABSACC.H>
#defineucharunsignedchar
#defineDAC0832_AdrXBYTE[0x7FFF]
charcodesindat[]={
0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,
0xab,0xae,0xb1,0xb4,0xb7,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,
0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xel,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,
0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfa,0xfb,0xfc,0xfd,0xfd,
0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,
0xf4,0xf3,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,
0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,
0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,
0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,
0x66,0x63,0x60,0x5d,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,
0x40,0x3d,0x3a,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,
0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,
0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,
0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,
0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,
0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80}。
bitflag=0。
voiddelay(uintN>
uinti。
for(i=0。
N。
voidDAC0832_ConversionOnce(ucharout_data>
DAC0832_Adr=out_data。
delay(10>
ucharKey_Scan(void>
ucharkey。
if(P2!
=0xff>
delay(10>
key=P2。
if(key!
flag=~flag。
return(key>
elsereturn(key=0xff>
voidFun_Triangle(void>
uchari。
for(i=0。
255。
DAC0832_ConversionOnce(i>
for(。
i>
0。
i-->
voidFun_Rectangular(void>
DAC0832_ConversionOnce(0xff>
delay(1000>
DAC0832_ConversionOnce(0x00>
voidFun_SawTooth(void>
DAC0832_ConversionOnce(i>
voidFun_Sin(void>
uchari。
for(i=0。
DAC0832_ConversionOnce(sindat[i]>
voidmain(>
ucharKey_Num。
while(1>
Key_Num=Key_Scan(>
switch(Key_Num>
case0xfe:
do{
Fun_Triangle(>
}while(Key_Scan(>
&
(flag==1>
>
break。
case0xfd:
do{
Fun_SawTooth(>
case0xfb:
Fun_Rectangular(>
case0xf7:
Fun_Sin(>
default:
}
6.方案论证
采用AT89C51单片机作为控制器,波形选择通过按键选择,波形通过DAC0832。
这样设计占用单片机端口少,具有电路简单,设计方便,显示亮度高,可靠性高等特点。
7.调试过程
按下P2.0
按下P2.1
按下P2.2
按下P2.3
9.运行结果及收获体会
实现了利用AT89C51单片机输出正弦波、矩形波、三角波、锯齿波。
通过对波形发生器的设计,是我收获很多,虽然实验结果不完美,但是这次设计真正是自己长进很多,是我更加深一步的了解了单片机系统的软硬件设计过程,方法及实现,培养了我分析问题解决问题的能力,为以后的设计和实现更难的设计打下良好基础。
要设计一个成功的电路,必须要有耐心,要有坚持的毅力,同时还要有较强的查阅资料的能力,我希望在以后的实践和工作中能在这些方面得到更大更好的提升。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数字 电子钟 波形 发生器 方案 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)