第一范文网 - 专业文章范例文档资料分享平台

基于at89s52单片机用12864液晶lcd显示带ds18b20测温的万年历电子时钟

来源:用户分享 时间:2025/9/23 0:13:41 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

{

switch(screen) { case 0: cs1=1; cs2=1; break; case 1: cs1=1; cs2=0; break; case 2: cs1=0; cs2=1; break; }

}

/*-----清屏:screen: 0-全屏,1-左屏,2-右-----*/ void LCD_Clr(uchar screen) { unsigned char i,j;

Select_Screen(screen); for(i=0;i<8;i++) {Set_Line(i);

for(j=0;j<128;j++) { Write_Dat(0x00); } } }

/*-----初始化LCD------*/ void LCD_Init(void)

{ uchar i=250; //延时 while(i--);

Select_Screen(0);

Set_OnOff(0); //关显示 LCD_Clr(0); //清屏 Select_Screen(0);

Set_OnOff(1); //开显示 Select_Screen(0);

Set_StartLine(0); //开始行:0 RST = 1;

}

// 在指定位置显示字符:x=0-120(字母、数字)/0-112(汉字),y=0-6

void Out_Char(uchar x, uchar y, bit mode, char *fmt) //mode: 1 正常显示,0 反白显示 {

int c1,c2,cData;

uchar i=0,j,uLen;

uchar k;

uLen=strlen(fmt);

while(i

c1 = fmt[i]; c2 = fmt[i+1];

if(c1>=0 && c1<128 )// ASCII {

if(c1 < 0x20) {

switch(c1)

{

case 13:

case 10: // 回车或换行

i++;

//if(y < (LCD_Y_MAX - (2 HZ_CHR_HEIGHT)))

if (y<7)

{x=0; y+=2;} continue; case 8: // 退格

i++;

if(y>ASC_CHR_WIDTH) y-=ASC_CHR_WIDTH; cData = 0x00; break; } }

for(j=0;j

{

if(fmt[i] == ASC_16[j].Index_Char[0]) break; }

for(k=0;k<2*ASC_CHR_WIDTH;k++) {

if(j < sizeof(ASC_16)/sizeof(ASC_16[0])) {

if (mode == 1)

cData=ASC_16[j].Msk_Char[k]; //正常

*

else

cData=~ASC_16[j].Msk_Char[k]; //反白 } else

cData=0;

if (k

{ Select_Screen(1); //选择左半屏 Set_Column(x+k);

} else

{ Select_Screen(2); //选择右半屏 Set_Column(x+k-64); }

Set_Line(y); }

else //字符下半部

{ if ((x+k-ASC_CHR_WIDTH)<64)

{ Select_Screen(1); //选择左半屏 Set_Column(x+k-8);

} else

{ Select_Screen(2); //选择右半屏 Set_Column((x+k-8)-64); }

Set_Line(y+1); }

Write_Dat(cData);

}

if(c1 != 8) // 非退格 x+=ASC_CHR_WIDTH; }

else //汉字

{

for(j=0;j

if(fmt[i] == GB_16[j].Index_GB16[0] GB_16[j].Index_GB16[1])

break;

&& fmt[i+1] ==

}

for(k=0;k<2*HZ_CHR_WIDTH;k++) {

if(j < sizeof(GB_16)/sizeof(GB_16[0])) {

if (mode == 1)

cData=GB_16[j].Msk_GB16[k]; else

cData=~GB_16[j].Msk_GB16[k]; } else

cData=0;

if (k

{ Select_Screen(1); //选择左半屏 Set_Column(x+k); } else

{ Select_Screen(2); //选择右半屏 Set_Column(x+k-64); }

Set_Line(y); }

else //汉字下半部

{ if ((x+k-HZ_CHR_WIDTH)<64)

{ Select_Screen(1); //选择左半屏 Set_Column(x+k-HZ_CHR_WIDTH); } else

{ Select_Screen(2); //选择右半屏

Set_Column((x+k-HZ_CHR_WIDTH)-64); }

Set_Line(y+1); }

Write_Dat(cData);

}

x+=HZ_CHR_WIDTH; i++; }

i++;

} } /**

lcd.h

**/

#ifndef __LCD__H

#define __LCD__H

/*KS0108 128*64 LCD C语言驱动 LCD引脚定义 1---GND 2---VCC 3---VLCD 4---D/I 5---R/W 6---E

7到14---D0-D7 15--CS1 16--CS2 17--RESET 18--VEE 19--SW

20--NC*/

/*-----端口定义-----*/

#define DataPort P0 // LCD数据线D0-D7 sbit DI = P2^0; // 数据\\指令 选择 RS sbit RW = P2^4; // 读\\写 选择 sbit EN = P2^1; // 读\\写使能

基于at89s52单片机用12864液晶lcd显示带ds18b20测温的万年历电子时钟.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c64mmi7ndpe3h0qq03o65_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top