智能仪表设计报告(3)

2019-03-29 14:05

* 调用: v_RTInputByte()

* 输入: pReDa: 寄存器数据地址 * 返回值: 无

***********************************************************************/ void v_BurstW1302R(Uchar *pReDa) {

Uchar i;

v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/ T_RST = 0; T_CLK = 0; T_RST = 1;

v_RTInputByte(0xfe); /* 0xbe:时钟多字节写命令 */ for (i=31;i>0;i--) /*31Byte 寄存器数据 */ {

v_RTInputByte(*pReDa); /* 写1Byte数据*/ pReDa++; }

T_CLK = 1; T_RST =0;

}

/******************************************************************** * * 名称: uc_BurstR1302R

* 说明: 先写地址,后读命令/数据(寄存器多字节方式) * 功能: 读取DS1302寄存器数据

* 调用: v_RTInputByte() , uc_RTOutputByte() * 输入: pReDa: 寄存器数据地址 * 返回值: 无

***********************************************************************/ void v_BurstR1302R(Uchar *pReDa) {

Uchar i; T_RST = 0; T_CLK = 0; T_RST = 1;

v_RTInputByte(0xff); /* 0xbf:时钟多字节读命令 */ for (i=31; i>0; i--) /*31Byte 寄存器数据 */ {

*pReDa = uc_RTOutputByte(); /* 读1Byte数据 */ pReDa++; }

T_CLK = 1;

T_RST =0; }

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

10

* 名称: v_Set1302

* 说明:

* 功能: 设置初始时间 * 调用: v_W1302()

* 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B * 返回值: 无

***********************************************************************/ void v_Set1302(Uchar *pSecDa) { Uchar i;

Uchar ucAddr = 0x80;

v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/ for(i =7;i>0;i--)

{

v_W1302(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */ pSecDa++; ucAddr +=2; }

v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/ }

/******************************************************************** * * 名称: v_Get1302 * 说明:

* 功能: 读取DS1302当前时间

* 调用: uc_R1302()

* 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B * 返回值: 无

***********************************************************************/ void v_Get1302(Uchar ucCurtime[]) {

Uchar i;

Uchar ucAddr = 0x81; for (i=0;i<7;i++) {

ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */ ucAddr += 2; } }

/********************************************************************** *时子程序(在YB-51-B实验板配套的各功能演示程序中都是调用的本延时子程序)

11

*作者:郑州远博科技 王兴民

*0371-66949037 0371-67256036 13949105551

***********************************************************************/ //#include

void Delayus(Uchar j) //延时时间为 j*10+8 us (根据生成的汇编代码计算) {

while(j) { _nop_(); _nop_(); _nop_(); _nop_();

j--; } }

void Delayms(Uint n) { //延时时间大约n*1 ms while(n) { Delayus(100); //延时为1008us n--; }

}

/************************************************************************* *YB-51-B DS1302的时钟演示程序

*来源: 郑州远博科技 王兴民371-66949037 0371-67256036 13949105551

***************************************************************************/ //#include

data Uchar yjdispbuff[32]; //液晶屏显示缓冲区 data Uchar clockdata2[7]; //时钟数据缓冲区 data Uchar *clockdatain; data Uchar *clockdataout; data Uchar cmddata;

data Uchar indata,outdata;

data Uchar houtdatal,houtdatah,moutdatal,moutdatah,soutdatal,soutdatah; //时、分、秒

data Uchar noutdatal,noutdatah,youtdatal,youtdatah,routdatal,routdatah; //年、月、日

data Uchar woutdatal, woutdatah; //星期 void main() { Uchar j;

for(j=0;j<32;j++) { yjdispbuff[j]=32; }

12

Delayms(100);

Lcdreset(); cmddata=0x8e; indata=0x00;

v_W1302(cmddata, indata); //init cmddata=0x80; indata=0x00;

v_W1302(cmddata, indata);//秒 cmddata=0x82; indata=0x30;

v_W1302(cmddata, indata);//分 cmddata=0x84;

indata=0x08;

v_W1302(cmddata, indata);//小时 cmddata=0x86; indata=0x18;

v_W1302(cmddata, indata);//日 cmddata=0x88; indata=0x01;

v_W1302(cmddata, indata);//月 cmddata=0x8A;

indata=0x01;

v_W1302(cmddata, indata);//星期 cmddata=0x8C; indata=0x10;

v_W1302(cmddata, indata);//年 while(1) {

clockdataout=&clockdata2; v_BurstR1302T(clockdataout); soutdatal=clockdata2[0]&0x0f; soutdatah=(clockdata2[0]>>4)&0x07; moutdatal=clockdata2[1]&0x0f; moutdatah=(clockdata2[1]>>4)&0x07; houtdatal=clockdata2[2]&0x0f; houtdatah=(clockdata2[2]>>4)&0x07; routdatal=clockdata2[3]&0x0f; routdatah=(clockdata2[3]>>4)&0x07; youtdatal=clockdata2[4]&0x0f;

youtdatah=(clockdata2[4]>>4)&0x07; woutdatal=clockdata2[5]&0x0f;

woutdatah=(clockdata2[5]>>4)&0x07;

noutdatal=clockdata2[6]&0x0f;

noutdatah=(clockdata2[6]>>4)&0x07;

yjdispbuff[0]=50; //50代表数字‘2’的ASC码,液晶屏是按照ASC

13

码来显示字符的

yjdispbuff[1]=48; //48代表数字‘0’的ASC码 yjdispbuff[2]=noutdatah+48; //48表示对应数字的实际值和相对应的ASC码的偏移量

yjdispbuff[3]=noutdatal+48; yjdispbuff[5]=youtdatah+48; yjdispbuff[6]=youtdatal+48; yjdispbuff[8]=routdatah+48; yjdispbuff[9]=routdatal+48; yjdispbuff[13]=woutdatal+48; yjdispbuff[17]=houtdatah+48; yjdispbuff[18]=houtdatal+48; yjdispbuff[20]=moutdatah+48; yjdispbuff[21]=moutdatal+48; yjdispbuff[23]=soutdatah+48; yjdispbuff[24]=soutdatal+48;

yjdispbuff[4]=45; //‘-’的ASC码 yjdispbuff[7]=45;

yjdispbuff[10]=32; //空格的ASC码 yjdispbuff[11]=32; yjdispbuff[12]=32; yjdispbuff[14]=32; yjdispbuff[15]=32; yjdispbuff[16]=32; yjdispbuff[19]=45; yjdispbuff[22]=45; for(j=0;j<32;j++)

{

Disponechar(0,j+2,yjdispbuff[j]); } }

}

14


智能仪表设计报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:10.创新工作室经费管理办法

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

马上注册会员

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