1602液晶显示DS1302+S51时钟+温度显示
{
DisplayOneChar(X, Y, DData[j]); //显示单个字符
X++;//横坐标加1,纵坐标不变
}
}
}
//=================================== 自定义字符 ==========================================
/*****************************************************
函 数 名:void mychar()
功 能:自定义字符--CGRAM
说 明:LCM1602字符库中没有温度符号,自定义温度符号
入口参数:无
返 回 值:无
定义形式:1602中定义CGRAM的形式如下:
---------------------------------------------------------------------------
| CGRAM地址设置 | 自定义的代码 |
| DB7 DB6 | DB5 DB4 DB3 | DB2 DB1 DB0 | DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 |
| 0 1 | 0 0 0 | X X X | 0 0 0 0 * 0 0 0 |
| 0 1 | 0 0 1 | X X X | 0 0 0 0 * 0 0 1 |
| ... | ... | ... | ... ... |
| 0 1 | 1 1 0 | X X X | 0 0 0 0 * 1 1 0 |
| 0 1 | 1 1 1 | X X X | 0 0 0 0 * 1 1 1 |
---------------------------------------------------------------------------
1. 1602共能定义8个5x8字符;
2. CGRAM地址设置: X X X--DB2 DB1 DB0对应写入地址,1~8行;
DB5 DB4 DB3对应自定义字符代码;DB7 DB6为指令码,不可变.
3. 自定义的代码: 高4位DB7 DB6 DB5 DB4为0000时它的低3位DB2 DB1 DB0对应于第1-8个,DB3为无关项。
4. 自定义的代码的DB2 DB1 DB0对应于CGRAM地址的DB5 DB4 DB3。
*****************************************************/
void mychar()
{
//---------自定义字符代码--01H-------------------
WriteCommandLCM(0x48,0); //第1行
WriteDataLCM(0x02);//
WriteCommandLCM(0x49,0); //第2行
WriteDataLCM(0x05);//
WriteCommandLCM(0x4a,0); //第3行 1------**--
WriteDataLCM(0x05);// 2----**--**
WriteCommandLCM(0x4b,0); //第4行 3----**--**
WriteDataLCM(0x02);// 4------**--
WriteCommandLCM(0x4c,0); //第5行 5----------
WriteDataLCM(0x00);// 6----------
WriteCommandLCM(0x4d,0); //第6行 7----------
WriteDataLCM(0x00);// 8----------
WriteCommandLCM(0x4e,0); //第7行
WriteDataLCM(0x00);//
WriteCommandLCM(0x4f,0); //第8行
WriteDataLCM(0x00);//
//-----------------------------------------------
}
//======================================= 延时函数部分 ====================================
/*****************************************************
函 数 名:void Delay5Ms()
功 能:5ms延时
说 明:软件消除按键抖动和适当的延时
入口参数:无
返 回 值:无
*****************************************************/
//5ms延时
void Delay5Ms(void)
{
uint TempCyc = 5552; //放入延时数据
while(TempCyc--);
}
/*****************************************************
函 数 名:void Delay400Ms()
功 能:400ms延时
说 明:
入口参数:无
返 回 值:无
*****************************************************/
//400ms延时
void Delay400Ms(void)
{
uchar TempCycA = 5;
uint TempCycB;
while(TempCycA--)
{
TempCycB=7269;
while(TempCycB--);
};
}
//================================== 时钟芯片控制部分 ======================================
/*****************************************************
函 数 名:RTInputByte()
功 能:实时时钟写入一字节
说 明:往DS1302写入1Byte数据 (内部函数)
入口参数:d 写入的数据
返 回 值:无
*****************************************************/
void RTInputByte(uchar d)
{
uchar i;
ACC = d;
for(i=8; i>0; i--)
{
T_IO = ACC0; /*相当于汇编中的 RRC */
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
/*****************************************************
函 数 名:RTOutputByte()
功 能:实时时钟读取一字节
说 明:从DS1302读取1Byte数据 (内部函数)
入口参数:无
返 回 值:ACC
设 计:zhaojun 日 期:2007-06-29
修 改: 日 期:
*****************************************************/
uchar RTOutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; /*相当于汇编中的 RRC */
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC); //返回读取值
}
/*****************************************************
函 数 名:W1302()
功 能:往DS1302写入数据
说 明:先写地址,后写命令/数据 (内部函数)
调 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址, ucData: 要写的数据
返 回 值:无
*****************************************************/
void W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
RTInputByte(ucDa); /* 写1Byte数据*/
T_CLK = 1;
T_RST = 0;
}
/******************************************************
函 数 名:R1302()
功 能:读取DS1302某地址的数据
说 明:先写地址,后读命令/数据 (内部函数)
调 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址
返 回 值:ucData :读取的数据
*******************************************************/
uchar R1302(uchar ucAddr)
{
uchar ucData;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
ucData = RTOutputByte(); /* 读1Byte数据 */
T_CLK = 1;
T_RST = 0;
return(ucData);
}
1602液晶DS1302S51时钟温度显 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)