好文档 - 专业文书写作范文服务资料分享网站

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

天下 分享 时间: 加入收藏 我要投稿 点赞

{

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测温的万年历电子时钟

{switch(screen){case0:cs1=1;cs2=1;break;case1:cs1=1;cs2=0;break;case2:cs1=0;cs2=1;
推荐度:
点击下载文档文档为doc格式
64mmi7ndpe3h0qq03o65
领取福利

微信扫码领取福利

微信扫码分享