毕业论文基于STC12C5410AD单片机的倾角测试系统设计(6)

2019-04-21 13:37

山东大学学士学位论文

部分程序:

//----------------Ds1302-------------------------

void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数) { unsigned char i; ACC = d; for(i=8; i>0; i--)

{ DS1302_IO = ACC0; DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >> 1; } }

unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数) { unsigned char i; for(i=8; i>0; i--)

{ ACC = ACC >>1; ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; }

return(ACC); }

void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据 { DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1;

DS1302InputByte(ucAddr); // 地址,命令 DS1302InputByte(ucDa); DS1302_CLK = 1;

21

// 写1Byte数据

山东大学学士学位论文

DS1302_RST = 0; }

unsigned char Read1302(unsigned char ucAddr) 据

{ unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1;

DS1302InputByte(ucAddr); // 地址,命令 ucData = DS1302OutputByte(); // 读1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData); }

//读取DS1302某地址的数

3.4键盘功能设置

在软件的编写上,可以采用软件查询方式对按键进行识别[16]。读键子程序如图3.4所示。

键值功能设计:

系统默认显示的是当前时间和当前角度值,当第一次按下S1时,显示切换到角度上下限的显示,第二次按下调节角度下限的小数位,第三次按下调节角度下限的个位,依次按下,依次调节各位。

S2作为调节角度上下限时的加一及角度正负号的切换用。 S3作为调节角度上下限时的减一及角度正负号的切换用。 S4作为调节完毕后返回当前时间和当前角度值显示之用。 键盘功能程序代码请见附录。 键盘识别程序代码如下。

22

山东大学学士学位论文

开始 定时扫描 有键按下? 延时4ms 有键按下? 延时 4ms 读取键值 图3.4读键子程序

//---------------------获取键值------------------------- void getkey(void)

{

if(P00==0&&key_last0==1)

{ delay_flag=0; //delay_flag在定时器中4ms到置1

while(delay_flag==0); //延时4ms,去抖动 if(P00==0&&key_last0==1)

{ key_num=0;

key_last0=0;

delay_flag=0; //去抖动

while(delay_flag==0); //延时4ms,去抖动 }

else if(P00==1) key_last0=1;

23

山东大学学士学位论文

}

else if(P00==1) key_last0=1; if(P01==0&&key_last1==1) { delay_flag=0;

while(delay_flag==0); //去抖动

if(P01==0&&key_last1==1)

{

key_num=1; key_last1=0;

delay_flag=0;

while(delay_flag==0); //延时4ms,去抖动

else if(P01==1) key_last1=1;

}

else if(P01==1) key_last1=1; if(P02==0&&key_last2==1) { delay_flag=0;

while(delay_flag==0); //延时4ms,去抖动 if(P02==0&&key_last2==1) {

key_num=2; key_last2=0;

delay_flag=0; //去抖动

while(delay_flag==0); //延时4ms,去抖动 }

else if(P02==1) key_last2=1;

}

else if(P02==1) key_last2=1; if(P03==0&&key_last3==1) {

delay_flag=0;

while(delay_flag==0); //延时4ms,去抖动 if(P03==0&&key_last3==1)

24

山东大学学士学位论文

{

key_num=3; key_last3=0;

delay_flag=0;

while(delay_flag==0); //延时4ms,去抖动 } //去抖动

else if(P03==1) key_last3=1;

} }

else if(P03==1) key_last3=1;

3.5 通信部分

上位机与单片机通信按应答方式经行。由上位机给单片机发送一组命令数据,单片机受到命令经过分析后认为正常,则按照命令执行操作。将操作结果返回给上位机。若经过分析认为不正常,则返回给上位机出错信息。

单片机向上位机发送的数据的方式考虑了两种,第一种是等数据存储器容量存满了后在一块发,这种方式实时性不够,为了使角度数据的变化能够及时的传到上位机,采用定时发送,定时时间和上传的次数由上位机来定,这样一来就解决了实时性问题。

由于是定时发送,通过对数据的分析知道上位机收到的数据可能有重复的,或者是有FF字样。这可由时间标签,加以区分,而FF为数据存储器中尚未写进的字节单元,通过上位机软件可以滤除。

上位机用串口调试助手来进行数据发送,为了使数据直观,命令码全部使用BCD码,由单片机传来的数据也使用BCD码存储。 上位机给单片机的指令为:

报文开始 识别字(STX) 内容 字节数 0XEE 1 命令码 报文结束(ETX) (CMD) CC 视命令定 0XFF 1 25


毕业论文基于STC12C5410AD单片机的倾角测试系统设计(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:少教多学读书笔记

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: