电子技术综合实践.docx

上传人:b****6 文档编号:16515621 上传时间:2023-07-14 格式:DOCX 页数:51 大小:192.94KB
下载 相关 举报
电子技术综合实践.docx_第1页
第1页 / 共51页
电子技术综合实践.docx_第2页
第2页 / 共51页
电子技术综合实践.docx_第3页
第3页 / 共51页
电子技术综合实践.docx_第4页
第4页 / 共51页
电子技术综合实践.docx_第5页
第5页 / 共51页
电子技术综合实践.docx_第6页
第6页 / 共51页
电子技术综合实践.docx_第7页
第7页 / 共51页
电子技术综合实践.docx_第8页
第8页 / 共51页
电子技术综合实践.docx_第9页
第9页 / 共51页
电子技术综合实践.docx_第10页
第10页 / 共51页
电子技术综合实践.docx_第11页
第11页 / 共51页
电子技术综合实践.docx_第12页
第12页 / 共51页
电子技术综合实践.docx_第13页
第13页 / 共51页
电子技术综合实践.docx_第14页
第14页 / 共51页
电子技术综合实践.docx_第15页
第15页 / 共51页
电子技术综合实践.docx_第16页
第16页 / 共51页
电子技术综合实践.docx_第17页
第17页 / 共51页
电子技术综合实践.docx_第18页
第18页 / 共51页
电子技术综合实践.docx_第19页
第19页 / 共51页
电子技术综合实践.docx_第20页
第20页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

电子技术综合实践.docx

《电子技术综合实践.docx》由会员分享,可在线阅读,更多相关《电子技术综合实践.docx(51页珍藏版)》请在冰点文库上搜索。

电子技术综合实践.docx

电子技术综合实践

Xx大学

电子技术综合实践报告

 

设计题目:

多功能数字电子表

 

专业:

电子信息科学与技术

班级学号:

         

学生姓名:

指导教师:

设计时间:

小组成员:

多功能数字电子表

一、设计任务与要求

1.实践任务:

运用单片机89c52实现多功能电子表的设计与运行

2.基本要求:

显示时分秒,时间调节与设置功能,秒表功能,计数功能,闹钟功能。

3.提高要求:

运用18b20芯片实时监测周围温度。

二、方案设计与论证

1.整体方案论证

本数字电子表系统以stc89c52单片机为核心控制器,对系统进行初始化,完成对按键,led数码管显示的控制等功能,以及完成各模块通信协调的功能,时钟芯片da1302不断将时间信号送往单片机,然后单片机通过

Led数码管将时间显示出来,按键将信号传递给单片机处理,借以实现对时间的设置,可以对年,月,日,时,分,秒进行设定,还可以通过对闹钟时间进行设置实现定时闹钟的功能,通过温度传感器将温度信号传递给单片机,然后单片机通过led数码管将温度显示出来,达到温度显示的功能。

另外,秒表功能有开始,中止,复位来控制,以led数码管显示,计数器则由按键控制计数。

最终由6v电源供电。

最终实现以下6个功能:

1)实现电子表的时,分,秒的显示

2)实现电子表对时间等的设定

3)实现秒表功能

4)实现计数器功能

5)实现闹钟报警功能

6)实现温度实时监测显示功能

2.模块的分类

1)stc89c52单片机主控模块

设计初期,我们有如下两种以单片机为核心的主控方式可选:

1.采用stc89c52单片机作为数字电子表主控核心,运用flashrom,搭载有4Kbrom内部存储空间,能够在3v的低压电源下工作,与mcs-52系列单片机具有完全兼容性,缺点是没有isp在线编程技术,运用于电路设计时,如果对程序进行增添新功能或修改程序不方便控制。

2.采用stc89c52单片机作为数字电子表主控核心,搭载flashrom为片内rom,在6v电源工作,对于编程技术可以有效的修改的方式。

综上考虑选择第二种。

2)DS1302时钟电路模块

在时钟电路模块的设计中,我也想了两种方案:

1.利用单片机本身自带功能实现定时计数功能,通过程序编写来实现对年,月,日,时,分,秒的计时。

通过外部晶振提供准确时钟,采用11.0592的晶振。

但是不宜断电保护。

2.采用时钟芯片ds1302进行计时,然后时间信号交给单片机处理通过led数码管显示出来。

此方案中ds1302性价比高,性能优越,耗电量少,具有计时功能,还有闰年补偿功能,节省了单片机资源且便宜,但控制难度增加。

综合考虑选择第二种方案。

3)led数码管显示模块

开始有led数码管和lcd液晶显示屏两种方案,由于对led数码管更为熟悉好用,选择方案一。

4)温度测试模块闹钟模块

采用了方便易用且价格低廉的数字温度传感器ds18b20实现。

优点是使用方便,报警选择蜂鸣器。

5)键盘扫描电路模块

该电路通过编写相应的程序即能实现功能,在此不再赘述。

三、电路设计原理

1)元器件

Stc89c52单片机一个

Ds1302时钟芯片一个

Ds18b20温度芯片一个

led数码管六个

蜂鸣器一个

按键三个

2)电路图原理图

四、软件编程

1.软件流程图

否是

2.实物图

3.主程序

/*====================================================================

调试要求:

1.MCU:

AT89S52芯片或AT89C52

2.晶振:

12MHz

功能:

多功能时钟+温度计

====================================================================*/

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitdis_bit1=P2^7;//定义数码管控制口

sbitdis_bit2=P2^6;//定义数码管控制口

sbitdis_bit3=P2^4;//定义数码管控制口

sbitdis_bit4=P2^3;//定义数码管控制口

sbitdis_bit5=P2^1;//定义数码管控制口

sbitdis_bit6=P2^0;//定义数码管控制口

sbitled1_bit=P2^2;//定时LED的控制口

sbitled2_bit=P2^5;//定时LED的控制口

sbits1_bit=P1^0;//定义S1控制口

sbits2_bit=P1^1;//定义S2控制口

sbits3_bit=P1^2;//定义S3控制口

sbitdq_ds18b20=P3^3;//定义控制DS18B20

sbitspeak=P3^7;//定义蜂鸣器控制口

sbitclk_ds1302=P3^6;//定义控制DS1302的时钟线

sbitio_ds1302=P3^5;//定义控制DS1302的串行数据

sbitrest_ds1302=P3^4;

#definesmg_dataP0//定义数码管数据口

voiddelay_3us();//3US的延时程序

voiddelay_8us(uintt);//8US延时基准程序

voiddelay_50us(uintt);//延时50*T微妙函数的声明

voiddisplay1(uchardis_data);//数码管1显示子程序

voiddisplay2(uchardis_data);//数码管2显示子程序

voiddisplay3(uchardis_data);//数码管3显示子程序

voiddisplay4(uchardis_data);//数码管4显示子程序

voiddisplay5(uchardis_data);//数码管5显示子程序

voiddisplay6(uchardis_data);//数码管6显示子程序

voidinit_t0();//定时器0初始化函数

voiddis_led();//LED处理函数

voidjudge_s1();//S1按键处理函数

voidjudge_s2();//S2按键处理函数

voidjudge_s3();//S3按键处理函数

voiddis(uchars6,uchars5,uchars4,uchars3,uchars2,uchars1);//显示子程序

voiddis_san(uchars6,uchars5,uchars4,uchars3,uchars2,uchars1,ucharsan);//闪烁显示子程序

voidjudge_dis();//显示处理函数

voidjudge_clock();//显示处理函数

voidset_ds1302();//设置时间

voidget_ds1302();//读取当前时间

voidw_1byte_ds1302(uchart);//向DS1302写一个字节的数据

ucharr_1byte_ds1302();//从DS1302读一个字节的数据

//***********************************************************************

//DS18B20测温函数定义

voidw_1byte_ds18b20(ucharvalue);//向DS18B20写一个字节

ucharr_1byte_ds18b20(void);//从DS18B20读取一个字节的数据

voidrest_ds18b20(void);//DS18B20复位程序

voidreadtemp_ds18b20(void);//读取温度

voiddis_temp();//温度显示函数

 

//共阳数码管断码表

constuchartabl1[16]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,

//012345

0x82,0xf8,0x80,0x90,0x86,0x87,0xFF,

//6789ETB

0xc6,0xbf,0xff};

//C-

constuchartabl3[]=

{0x00,0x01,0x01,0x02,0x03,0x03,0x04,

0x04,0x05,0x06,0x06,0x07,0x08,0x08,

0x09,0x09};//温度内部计算用

uchart0_crycle;

ucharhour_count,minute_count,second_count,msecond_count;

ucharclock_hour,clock_minute;

ucharcountdown_second;

ucharcountdown_hour,countdown_minute;

ucharclock_en;//闹钟关闭和开启的标志,1开启,0关闭

ucharflag1,second_flag,zancun1,zancun2,zancun3;

ucharzancun4,zancun5,zancun6,zancun7;

ucharclock_flag,countdown_flag;

ucharmsecond_minute,msecond_second,msecond_msecond,msecond_flag;//秒表相关参数

uintspeak_count;

uchartempl,temph,temp_flag;

uchart_b,t_s,t_g,t_x,temp_flag2;//从左到右分别存储温度百位,十位,个位,小数位

uchartab23[3];//={0x40,0x59,0x23,0x28,0x11,0x06,0x09};//上电时默认的时间

//主程序

voidmain()

{

P3=0x00;

flag1=0;

zancun3=0;

msecond_minute=0;//置秒表相关参数为0

msecond_second=0;

msecond_msecond=0;

speak=1;//关闭蜂鸣器

speak_count=0;

clock_hour=0;

clock_minute=0;

clock_flag=0;

countdown_flag=0;//倒计时标志位为0

clock_en=0;//开机时默认关闭闹钟

init_t0();

TR0=1;//

//set_ds1302();//设置DS1302的初始时间

//接下来开始编写让数码管显示的程序

while

(1)

{

get_ds1302();

judge_dis();//显示处理

judge_s1();

judge_s2();

judge_s3();

judge_clock();//闹钟处理程序

}

}

voidtimer0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

t0_crycle++;

if(t0_crycle==2)//0.1秒

{

t0_crycle=0;

msecond_flag=1;

msecond_count++;

if(msecond_count==10)//1秒

{

msecond_count=0;

second_flag=1;

}

}

}

//**************************************************

//显示处理函数

voidjudge_dis()

{

if(flag1==0)

{

if(second_flag==1)

{

zancun7++;

second_flag=0;

}

if(zancun7<1)

{

if(temp_flag2==1)

{

readtemp_ds18b20();//读取温度

temp_flag2=0;

}

dis_temp();//温度显示函数

}

if(zancun7>=1)

{

temp_flag2=1;

zancun4=hour_count&0xf0;

zancun4>>=4;

zancun5=minute_count&0xf0;

zancun5>>=4;

zancun6=second_count&0xf0;

zancun6>>=4;

dis(zancun4,hour_count&0x0f,zancun5,minute_count&0x0f,zancun6,second_count&0x0f);

dis_led();

if(zancun7==5)zancun7=0;

}

}

if(flag1!

=0)

{

switch(flag1)

{

case1:

dis(5,10,11,1,12,12);//显示SET1

led1_bit=1;

led2_bit=1;

break;

case2:

dis(5,10,11,2,12,12);//显示SET2

break;

case3:

dis(5,10,11,3,12,12);//显示SET3

break;

case4:

dis(5,10,11,4,12,12);//显示SET4

break;

case5:

dis(5,10,11,5,12,12);//显示SET5

break;

case6:

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,12,1);

break;

case7:

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,12,2);

break;

case8:

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,12,3);

break;

case9:

//进入修改时间,时间分位个位闪烁

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,12,4);

break;

case10:

//进入修改闹钟,闹钟小时十位闪烁

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,zancun3,1);

break;

case11:

//进入修改闹钟,闹钟小时个位闪烁

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,zancun3,2);

break;

case12:

//进入修改闹钟,闹钟小时十位闪烁

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,zancun3,3);

break;

case13:

//进入修改闹钟,闹钟小时个位闪烁

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,zancun3,4);

break;

case14:

//进入修改闹钟的开关

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,zancun3,6);

break;

case15:

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,1);

break;

case16:

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,2);

break;

case17:

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,3);

break;

case18:

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,4);

break;

case19:

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,5);

break;

case20:

dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,6);

break;

case21:

if(second_flag==1)

{

second_flag=0;

countdown_second--;

if(countdown_second==255)

{

countdown_second=59;

countdown_minute--;

if(countdown_minute==255)

{

countdown_minute=59;

countdown_hour--;

if(countdown_hour==255)

{

flag1=22;

countdown_minute=0;

countdown_hour=0;

countdown_second=0;

countdown_flag=1;

}

}

}

}

dis(countdown_hour/10,countdown_hour%10,countdown_minute/10,countdown_minute%10,countdown_second/10,countdown_second%10);//

break;

case22:

if(countdown_flag>0&&countdown_flag<7)

{

speak=0;

if(second_flag==1)

{

second_flag=0;

countdown_flag++;

}

}

else

{

speak=1;

}

dis(countdown_hour/10,countdown_hour%10,countdown_minute/10,countdown_minute%10,countdown_second/10,countdown_second%10);//

break;

case23:

dis(msecond_minute/10,msecond_minute%10,msecond_second/10,msecond_second%10,msecond_msecond%10,12);

break;

case24:

if(msecond_flag==1)

{

msecond_flag=0;

msecond_msecond++;

if(msecond_msecond==10)

{

msecond_msecond=0;

msecond_second++;

if(msecond_second==60)

{

msecond_second=0;

msecond_minute++;

if(msecond_minute==100)

{

msecond_minute=99;

flag1=23;

}

}

}

}

dis(msecond_minute/10,msecond_minute%10,msecond_second/10,msecond_second%10,msecond_msecond%10,12);

break;

case25:

dis(zancun3/10,zancun3%10,zancun2/10,zancun2%10,zancun1/10,zancun1%10);

break;

default:

break;

}

}

}

//**************************************************

//S1按键处理函数

voidjudge_s1()

{

s1_bit=1;//置IO为1,准备读入收据

if(s1_bit==0)//判断是否有按键按下

{

delay_50us

(1);//延时,去除机械抖动

if(s1_bit==0)

{

switch(flag1)

{

case0:

case1:

case2:

case3:

case4:

case6:

case7:

case8:

case10:

case11:

case12:

case13:

case15:

case16:

case17:

case18:

case19:

flag1++;

break;

case9:

flag1=6;

break;

case14:

flag1=10;

break;

case20:

flag1=15;

break;

case5:

case21:

case22:

case23:

//系统从秒表状态复位

case24:

//系统从秒表状态复位

case25:

//系统从计数器复位

flag1=0;

break;

default:

break;

}

while(s1_bit==0)

{

judge_dis();

}//等待按键释放

}

}

}

//**************************************************

//S2按键处理函数

voidjudge_s2()

{

s2_bit=1;//置IO为1,准备读入收据

if(s2_bit==0)//判断是否有按键按下

{

delay_50us

(1);//延时,去除机械抖动

if(s2_bit==0)

{

switch(flag1)

{

case1:

//在显示SET1状态下按S2件,进入修改时间

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2