智能仪表设计报告(2)

2019-03-29 14:05

_nop_();

while( DataPort & Busy ); EL1602=0; }

/*======================================================= 写控制字符子程序: E=1 RS1602=0 RW1602=0

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

void LcdWriteCommand( Uchar CMD,Uchar AttribC ) {

if (AttribC) WaitForEnable(); // 检测忙信号? RS1602=0; RW1602=0; _nop_();

DataPort=CMD;

_nop_(); EL1602=1; _nop_();

_nop_();

EL1602=0; // 操作允许脉冲信号 }

/*======================================================= 当前位置写字符子程序: E =1 RS1602=1 RW1602=0

=======================================================*/ void LcdWriteData( char dataW ) {

WaitForEnable(); // 检测忙信号 RS1602=1; RW1602=0; _nop_();

DataPort=dataW; _nop_();

EL1602=1; _nop_(); _nop_(); EL1602=0; // 操作允许脉冲信号 }

/*======================================================= 初始化程序, 必须按照产品资料介绍的初始化过程进行

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

void Lcdreset( void ) {

LcdWriteCommand( 0x38, 0); // 显示模式设置(不检测忙信号) Delayms(10);

LcdWriteCommand( 0x38, 0); // 共三次

Delayms(10);

LcdWriteCommand( 0x38, 0); Delayms(10);

LcdWriteCommand( 0x38, 1); // 显示模式设置(以后均检测忙信号) LcdWriteCommand( 0x08, 1); // 显示关闭

LcdWriteCommand( 0x01, 1); // 显示清屏

LcdWriteCommand( 0x06, 1); // 显示光标移动设置 LcdWriteCommand( 0x0c, 1); // 显示开及光标设置

5

}

/*======================================================= 显示光标定位(X表示行 ,Y表示列)

=======================================================*/ void Disp_XY( char posx,char posy) { Uchar temp;

temp = posy & 0x0f;

posx &= 0x1;

if ( posy>15 ) temp |= 0x40;

if (posx==1) temp |=0x40; temp |= 0x80;

LcdWriteCommand(temp,0);

}

/*======================================================= 按指定位置显示数出一个字符

=======================================================*/ void Disponechar(Uchar x,Uchar y,Uchar Wdata) { Disp_XY( x, y ); // 定位显示地址 LcdWriteData( Wdata ); // 写字符

}

/*======================================================= 液晶屏上显示字符串

=======================================================*/ void Eputstr(Uchar x,Uchar y, Uchar code *ptr) { Uchar i,l=0;

while (*ptr++ >0){l++;}; //统计字符的个数(字符串数组的最后一位是‘\\0') ptr=ptr-(l+1); //使指针重新指向首个字符 for (i=0;i

if ( y == 31 ) { y = 0; x ^= 0; } }

}

/************************************************************************* YB-51-B 时钟演示程序(函数模块) 来源: 郑州远博科技 王兴民

0371-66949037 0371-67256036 13949105551 需要参看DS1302的相关原理和时序,见配套光盘

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

#define T_CLK P1_6 /*实时时钟时钟线引脚 */ #define T_IO P1_7 /*实时时钟数据线引脚 */ #define T_RST P3_3 /*实时时钟复位线引脚 */

/********************************************************************* 实时时钟模块 时钟芯片型号:DS1302

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

6

/******************************************************************** * * 名称: v_RTInputByte * 说明:

* 功能: 往DS1302写入1Byte数据 * 调用:

* 输入: ucDa 写入的数据 * 返回值: 无

***********************************************************************/ void v_RTInputByte(Uchar ucDa) {

Uchar i,xbyte; xbyte = ucDa; for(i=8; i>0; i--) {

T_IO = xbyte&0x01; T_CLK = 1;

T_CLK = 0;

xbyte = xbyte >> 1; }

}

/******************************************************************** * * 名称: Uchar uc_RTOutputByte * 说明:

* 功能: 从DS1302读取1Byte数据 * 调用: * 输入:

* 返回值: xbyte

***********************************************************************/ Uchar uc_RTOutputByte(void) {

Uchar i,xbyte,xbyte1=0; for(i=8; i>0; i--) {

xbyte = xbyte >>1;

xbyte1 =(xbyte1|((Uchar)(T_IO)))<<7; xbyte=xbyte|xbyte1; T_CLK = 1; T_CLK = 0; }

return(xbyte); }

/******************************************************************** * * 名称: v_W1302

* 说明: 先写地址,后写命令/数据

7

* 功能: 往DS1302写入数据

* 调用: v_RTInputByte()

* 输入: ucAddr: DS1302地址, ucDa: 要写的数据 * 返回值: 无

***********************************************************************/ void v_W1302(Uchar ucAddr, Uchar ucDa) {

T_RST = 0; T_CLK = 0; T_RST = 1;

v_RTInputByte(ucAddr); /* 地址,命令 */ v_RTInputByte(ucDa); /* 写1Byte数据*/ T_CLK = 1; T_RST =0;

}

/******************************************************************** * * 名称: uc_R1302

* 说明: 先写地址,后读命令/数据 * 功能: 读取DS1302某地址的数据

* 调用: v_RTInputByte() , uc_RTOutputByte() * 输入: ucAddr: DS1302地址

* 返回值: ucDa :读取的数据

***********************************************************************/ Uchar uc_R1302(Uchar ucAddr) {

Uchar ucDa; T_RST = 0;

T_CLK = 0; T_RST = 1;

v_RTInputByte(ucAddr); /* 地址,命令 */ ucDa = uc_RTOutputByte(); /* 读1Byte数据 */ T_CLK = 1; T_RST =0;

return(ucDa);

}

/******************************************************************** * * 名称: v_BurstW1302T

* 说明: 先写地址,后写数据(时钟多字节方式) * 功能: 往DS1302写入时钟数据(多字节方式)

* 调用: v_RTInputByte()

* 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制

* 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B * 返回值: 无

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

8

void v_BurstW1302T(Uchar *pSecDa)

{

Uchar i;

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

v_RTInputByte(0xbe); /* 0xbe:时钟多字节写命令 */

for (i=8;i>0;i--) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/ {

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

T_CLK = 1; T_RST =0; }

/******************************************************************** * * 名称: v_BurstR1302T

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

* 调用: v_RTInputByte() , uc_RTOutputByte()

* 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B * 返回值: ucDa :读取的数据

***********************************************************************/ void v_BurstR1302T(Uchar *pSecDa) {

Uchar i; T_RST = 0; T_CLK = 0;

T_RST = 1;

v_RTInputByte(0xbf); /* 0xbf:时钟多字节读命令 */ for (i=8; i>0; i--) {

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

//T_CLK = 1; T_RST =0;

}

/******************************************************************** * * 名称: v_BurstW1302R

* 说明: 先写地址,后写数据(寄存器多字节方式) * 功能: 往DS1302寄存器数写入数据(多字节方式)

9


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

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

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

马上注册会员

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