《可报温报时电子钟设计报告》由会员分享,可在线阅读,更多相关《可报温报时电子钟设计报告(33页珍藏版)》请在金锄头文库上搜索。
1、电子系统设计报告电气 43 陈振斌 孙鹏程西安交通大学2017-5-201、 整体系统框图2、 系统工作原理 基于单片机 STC89C52 与开发平台 KEIL 软件,利用 C 语言设计相关程序。期间配合使用 DS1302 时钟芯片实现走时功能,使用温度传感器件 DS18B20 实现室温测量功能,使用 ISD1760 语音芯片实现录放音功能以及配合动态显示数码将相关功能以可视形式呈现, 并通过按键配合实现切换显示、校时、定闹等额外功能。3、 软件框图 时钟显示时钟校正日历显示日历校正温度显示定闹功能报时报温数码管闪烁S1 键切换模式S2 键切换显示整点闹钟提示S3、S4、S5 键 组合实现校正
2、开始各变量及时钟、语音 芯片初始化主程序循环S1、S2 键执行模式及 显示切换功能及 S5 确 认/关闭闹钟功能温度显示循环(关闭 定时器)整点报时报温 功能定时中断部分循 环程序时钟、日历显示 模块时钟、日历校正及定闹模 块(S3、S4、S5 组合)闹钟提示(数 码管闪烁)4、 系统使用介绍: 电路板上电后,初始状态数码管显示时钟; S1 键切换模式,模式 0 为正常显示模式,模式 1 为校正模式,并且取决于按下按键之 前显示部分依次进入:时钟校正、日历校正、闹钟定时模块; S2 键切换显示,依次为:时钟、日历、温度; S3 键在进入校正模式有效,用于选择校正位; S4 键在进入校正模式有效
3、,用于对当前校正位进行数值改变,即“加 1”功能; S5 键在校正模式时,用于确认校正,在闹钟闪烁时,按下可关闭闹钟; S6 为电路板重置键,终止程序; RST 键为语音芯片重置键,中断语音芯片工作。5、 已知部分缺陷及非完美解决方案: 问题描述:进入校正模式时,会出现数据读取错乱,使得数码显示 09 以外的数字, 如 A、B、C、D 等;在确认校正时同样会有几率出现该问题。 推测原因:DS1302 走时程序中数据会有过渡性变化,使得 display_buffer数组的数据 在读取和置入时产生问题。或置数时有数据错误。解决方案:对显示错乱部分重新进行校时,该处将置零。此后可正常校正。6、 软件
4、编写与调试时所遇到的问题及解决方案: 按键按下时程序多次执行:利用“miaomiao”系列变量作为判定条件保证只执行一 次程序; 对显示变量 display_buffer 直接进行加一操作进位产生错乱:引入 buffer_temp数 组,替代校正; 语音芯片不能连续播放多段语音:每段播放后延时适当时间; 为使得”on”、 ” off” 的右下角显示小数点时对 SEGMENT 直接进行“位与”操作只能 显示“o8.”、 ” of8”. 等:引入变量 s 过渡; 整点报时会连续两次播放语音:只在分钟显示为“59”时使得 miaomiao_play 变量为 一,播放后置为零,保证只播放一次; 报温时
5、可能读取到设定工作温度上限(39 摄氏度)的温度值且实际此时温度在上 限之内:在 tmread()函数里增加循环读取部分直至读到正常数值; 其他组组员(于晨曦同学)提出的建议与提示:温度读取时间较长不宜加入定时中断 显示;每次显示前对位码或段码(取决于置数顺序)先置零,以解决数码管残影 问题。7、 PCB 板原理图及接线图见验收文件夹 PPT,由于打印问题在此不作展示。8、 源程序代码 #include #include #include #include #define SEGMENT XBYTE0xdfff #define BIT_LED XBYTE0xbfff #define fosc
6、11.0592 #define time0 2500 #define uint unsigned int #define SEGMENT XBYTE0xdfff #define BIT_LED XBYTE0xbfff/语音部分定义开始 unsigned char bdata SR0_L; unsigned char bdata SR0_H; unsigned char bdata SR1; unsigned char APCL=0,APCH=0; unsigned char PlayAddL=0,PlayAddH=0; unsigned char RecAddL=0,RedAddH=0;sbi
7、t CMD=SR0_L0; sbit FULL=SR0_L1; sbit PU=SR0_L2; sbit EOM=SR0_L3; sbit INTT=SR0_L4; sbit RDY=SR10; sbit ERASE=SR11; sbit PLAY=SR12; sbit REC=SR13;unsigned char ISD_SendData(unsigned char dat); void ISD_PU(void); void ISD_Rd_Status(void); void ISD_WR_APC2(unsigned char apcdatl,apcdath); void ISD_SET_P
8、LAY(unsigned char Saddl,Saddh,Eaddl,Eaddh);sbit SS=P14; sbit SCK=P17; sbit MOSI=P15; sbit MISO=P16;void ISD_Init(void);void delay(unsigned int t);unsigned char get_address(unsigned char k);/快速获取部分语音地址函数 /语音部分定义结束/温度部分定义开始 sbit TMDAT=P34; void dmsec(unsigned int count); void tmreset(void); void tmsta
9、rt(void); void tmdisplay(void);void tmread(void);/温度读取函数 unsigned char tmrtemp(void); unsigned char code seg_code=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;unsigned char code tran_code=0,1,2,3,4,5,6,7,8,9; /类型转换数组 unsigned char last; int last_shi=2,last_ge
10、=6;/温度部分定义结束/时间部分定义开始 unsigned char data display_bit,display_buffer8,display_buffer18,ring8=1,5,0,0,0,1,0,0; unsigned char data time0_h,time0_1,TEMP; unsigned int idata time0_times; unsigned char get_code(unsigned char i); void display(void); void initial_ds1302(); unsigned char read_ds1302(char com
11、mand); void open_write_bit(); void close_write_bit(); void read_time(); void set_time();void reset_time();/校正确认功能函数 void read_date();sbit SCL_DS1302=P20; sbit IO_DS1302=P21; sbit RST_DS1302=P22;unsigned char bdata data_ds1302; sbit bit_data0=data_ds13020; sbit bit_data7=data_ds13027;unsigned char bd
12、ata x;sbit x0=x0; sbit x7=x7;/时间部分定义结束/功能部分定义开始 sbit key1=P10;/切换功能 unsigned char modecg;/工作模式指示变量sbit key2=P11;/切换显示 unsigned char displaycg;/切换显示指示变量sbit key3=P12;/切换校正位 unsigned char time_ajflag;/时钟校正位指示变量 unsigned char time_bitadjust;/时钟校正位显示变量 unsigned char date_ajflag;/日历校正位指示变量 unsigned char
13、date_bitadjust;/日历校正位显示变量 unsigned char ring_ajflag;/闹钟校正位指示变量 unsigned char ring_bitadjust;/闹钟校正位显示变量sbit key4=P13;/加位键sbit key5=P32;/确认或关闭闹钟键unsigned char miaomiao_1,miaomiao_2,miaomiao_3,miaomiao_4,miaomiao_5,miaomiao_play;/防止多 次执行步骤指示变量 unsigned char j,s;/j 为部分程序循环指示变量,s 为为解决 on off 的加小数点显示问 题而定
14、义的 SEGMENT 过渡变量 int time_t=400;/数码管闪烁计数变量 unsigned char buffer_temp8,play_adr8,wendu_shi,wendu_ge;/分别为校正功能过 渡变量数组、语音播报地址变量、温度十位类型过渡变量及温度个位类型过渡变量 /功能部分定义结束main() modecg=0;displaycg=0;BIT_LED=0;date_ajflag=0;ring_ajflag=0;time_ajflag=0;miaomiao_1=1;miaomiao_2=1;miaomiao_3=1;miaomiao_4=1;miaomiao_5=1;m
15、iaomiao_play=1;/以上为各新定义变量的初始化TEMP=TMOD;TEMP=TEMPTMOD=TEMP|0X01;time0_times=-time0*fosc/12;time0_h=(time0_times/256);time0_1=(time0_times%256);TH0=time0_h;TL0=time0_1;initial_ds1302();display_bit=0x01;display_buffer5=0x05;display_buffer4=0x03;display_buffer3=0x09;display_buffer2=0x05;display_buffer1=
16、0x01;display_buffer0=0x02;display_buffer17=0x06;display_buffer16=0x00;display_buffer15=0x05;display_buffer14=0x00;display_buffer13=0x07;display_buffer12=0x01;display_buffer11=0x00;display_buffer10=0x02;set_time();ISD_Init();dmsec(1);tmread();TR0=EA=ET0=1;doif(key1=0)if(miaomiao_1) modecg+;modecg=modecg%2;/切换工作模式:0:显示模式;1:校正、定闹模式miaomiao_1=0;