整理液晶点阵显示屏程序设计Word下载.docx

上传人:b****6 文档编号:19119795 上传时间:2023-01-03 格式:DOCX 页数:25 大小:76.25KB
下载 相关 举报
整理液晶点阵显示屏程序设计Word下载.docx_第1页
第1页 / 共25页
整理液晶点阵显示屏程序设计Word下载.docx_第2页
第2页 / 共25页
整理液晶点阵显示屏程序设计Word下载.docx_第3页
第3页 / 共25页
整理液晶点阵显示屏程序设计Word下载.docx_第4页
第4页 / 共25页
整理液晶点阵显示屏程序设计Word下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

整理液晶点阵显示屏程序设计Word下载.docx

《整理液晶点阵显示屏程序设计Word下载.docx》由会员分享,可在线阅读,更多相关《整理液晶点阵显示屏程序设计Word下载.docx(25页珍藏版)》请在冰豆网上搜索。

整理液晶点阵显示屏程序设计Word下载.docx

#defineLCD_DATAP2

#defineLCD_RSP30

#defineLCD_RWP31

#defineLCD_EP32

#defineLCD_CS1P33

#defineLCD_CS2P34

#defineLCD_RSTP35

#defineMUX_TEMP0x08

#defineMUX_VOLT0x01

#defineMUX_PRESS0x02

#defineNOSELECT7279P5|=0x80//SPICS4(P57)=1

#defineSELECT7279P5&

=~(0x80)//SPICS4(P57)=0;

#defineSet7279DATHD7279_DAT=1

#defineClr7279DATHD7279_DAT=0

#defineSet7279CLKHD7279_CLK=1

#defineClr7279CLKHD7279_CLK=0

voidDelay1ms(unsignedchar);

/*--宽度x高度=128x64--*/

charcodescreen[]={江苏大学计算机学院};

charcodescreen1[]={2010年单片机课程设计};

charcodescreen2[]={液晶点阵显示屏程序设计};

/*--宽度x高度=128x64--*/};

charcodescreen3[]={作者姓名、班级、学号};

#defineSELECTCS0

//LCD

voidLCD_WaitReady1(void)//判断LCD控制芯片KS0108是否忙

{

LCD_DATA=0xff;

_nop_();

LCD_CS2=SELECTCS;

//片学cs2

LCD_RW=1;

//读写选择

LCD_RS=0;

//数据指令选择

LCD_E=1;

//读写使能

while(LCD_DATA&

0x80);

//等待空闲

LCD_CS2=!

SELECTCS;

}

voidLCD_WaitReady2(void)//判断LCD控制芯片KS0108是否忙

LCD_CS1=SELECTCS;

LCD_CS1=!

voidLCD_WriteCommand1(charch)//向LCD控制芯片KS0108发送控制命令

LCD_WaitReady1();

LCD_RW=0;

LCD_DATA=ch;

LCD_E=0;

voidLCD_WriteCommand2(charch)//向LCD控制芯片KS0108发送控制命令

LCD_WaitReady2();

voidLCD_WriteData1(charch)//向LCD控制芯片KS0108发送数据命令

//写

LCD_RS=1;

//数据、指令

//读写使能

voidLCD_WriteData2(charch)//向LCD控制芯片KS0108发送数据命令

/*--文字:

温--*/

charcodeWen[]={};

度--*/

charcodeDu[]={};

压--*/

charcodeYa[]={};

力--*/

charcodeLi[]={};

电--*/

charcodeDian[]={};

位--*/

charcodeWei[]={};

voidLCD_WriteHZ(charx,chary,char*Dot)//显示16*16点阵汉字

chari;

for(i=0;

i<

32;

i++)

{

if((x+i%16)<

64)//左半液晶屏显示

{

LCD_WriteCommand1(0xB8+y+i/16);

//页数选择

LCD_WriteCommand1(0x40+x+i%16);

//列数选择

LCD_WriteData1(Dot[i]);

//一次写一字节

}

else//右半液晶屏显示

LCD_WriteCommand2(0xB8+y+i/16);

LCD_WriteCommand2(0x40+x-64+i%16);

LCD_WriteData2(Dot[i]);

}

.--*/

charcodeDot[]={};

0--*/

charcodeZero[]={};

1--*/

charcodeOne[]={};

2--*/

charcodeTwo[]={};

3--*/

charcodeThree[]={};

4--*/

charcodeFour[]={};

5--*/

charcodeFive[]={};

6--*/

charcodeSix[]={};

7--*/

charcodeSeven[]={};

8--*/

charcodeEight[]={};

9--*/

charcodeNine[]={};

voidLCD_WriteSZ(charx,chary,intnum)//显示8*16点阵数字和点字符

char*Num_Dot;

chari;

switch(num)//根据需要选择要输出的数字

case0:

Num_Dot=Zero;

break;

case1:

Num_Dot=One;

case2:

Num_Dot=Two;

case3:

Num_Dot=Three;

case4:

Num_Dot=Four;

case5:

Num_Dot=Five;

case6:

Num_Dot=Six;

case7:

Num_Dot=Seven;

case8:

Num_Dot=Eight;

case9:

Num_Dot=Nine;

case-1:

Num_Dot=Dot;

16;

if((x+i%8)<

64)

LCD_WriteCommand1(0xB8+y+i/8);

选择地址显示数字

LCD_WriteCommand1(0x40+x+i%8);

LCD_WriteData1(Num_Dot[i]);

else

LCD_WriteCommand2(0xB8+y+i/8);

LCD_WriteCommand2(0x40+x-64+i%8);

LCD_WriteData2(Num_Dot[i]);

voidInitLCD(void)//初始化LCD

chari,j;

LCD_RST=0;

Delay1ms

(1);

LCD_RST=1;

//复位信号把页地址计数器内容清零

LCD_WriteCommand1(0xc0);

LCD_WriteCommand2(0xc0);

LCD_WriteCommand1(0x3f);

//开显示

LCD_WriteCommand2(0x3f);

for(j=0;

j<

8;

j++)//清屏

LCD_WriteCommand1(0xB8+j);

//清左半屏

LCD_WriteCommand1(0x40);

for(i=0;

64;

LCD_WriteData1(0x00);

LCD_WriteCommand2(0xB8+j);

//清右半屏

LCD_WriteCommand2(0x40);

LCD_WriteData2(0x00);

voidDispBmp(char*buf)//显示一幅位图

inti,j;

//if(mode==0)

//{

j++)//显示位图

//Y地址读写后自动加1

for(i=0;

LCD_WriteData1(buf[(j*2)*64+i]);

//左半液晶屏显示

LCD_WriteData2(buf[(j*2+1)*64+i]);

//右半液晶屏显示

/*voidDispBmpUp(char*buf)//显示一幅位图,并上滚

inti;

DispBmp(buf);

for(i=0;

i<

64;

i++)

Delay1ms(50);

LCD_WriteCommand1(0xc0+i%64);

//设置起始行,实现上滚

LCD_WriteCommand2(0xc0+i%64);

voidDispBmpDown(char*buf)//显示一幅位图,并下滚

for(i=63;

i>

=0;

i--)

//设置起始行,实现下滚

voidDispBmpLeft(char*buf)//显示一幅位图,并左滚

inti,j,k;

for(k=0;

k<

128;

k++)

Delay1ms(30);

for(j=0;

j<

8;

j++)

LCD_WriteCommand1(0xB8+j);

LCD_WriteCommand1(0x40);

for(i=0;

{

LCD_WriteData1(buf[(j*2)*64+(i+k)%128]);

}

LCD_WriteCommand2(0xB8+j);

LCD_WriteCommand2(0x40);

LCD_WriteData2(buf[(j*2)*64+(i+k+64)%128]);

voidDispBmpRight(char*buf)//显示一幅位图,并右滚

for(k=128;

k>

0;

k--)

for(j=0;

LCD_WriteCommand1(0xB8+j);

voidDelay1s(unsignedcharT);

unsignedintGetADCValue(charNo);

charGetKeyValue(void);

voidWaitKeyOff(void);

voidTestLCD(void)

chari,j,buf[4],flag,keyvalue;

//flag为小数点输出标志

unsignedintw;

InitLCD();

DispBmp(screen);

//显示第一幅

LCD_WriteCommand1(0xc0+i%64);

//设置起始行地址,实现向上滚动,第i行数据放在LCD的第一行显示

LCD_WriteCommand2(0xc0+i%64);

DispBmp(screen1);

//显示第二幅图

//设置起始行,实现向上滚动

DispBmp(screen2);

//显示第三幅图

DispBmp(screen3);

//显示第四幅图

Delay1ms(10);

InitLCD();

LCD_WriteHZ(0,0,Wen);

//显示参数的中文字

LCD_WriteHZ(16,0,Du);

LCD_WriteHZ(0,2,Ya);

LCD_WriteHZ(16,2,Li);

LCD_WriteHZ(0,4,Dian);

LCD_WriteHZ(16,4,Wei);

for(i=0,flag=0;

;

i=(i+1)%3,flag=0)

w=GetADCValue(i+1);

//获取温度,电压或压力

Delay1ms(250);

buf[0]=(w%10000)/1000;

//取出各位上的数值

buf[1]=(w%1000)/100;

buf[2]=(w%100)/10;

buf[3]=(w%10);

if(i==2)//要输出的是电压,需要输出小数点的位置需改变一下

for(j=0;

5;

j++)//5个符号输出

{

if(j==1)

LCD_WriteSZ(32+j*8,i*2,-1);

//显示数字,参数为-1输出小数点;

flag=1;

else

LCD_WriteSZ(32+j*8,i*2,buf[j-flag]);

//利用flag来控制数据位

}

else//输出温度和压力数据

for(j=0;

j++)

if(j==2)

LCD_WriteSZ(32+j*8,i*2,-1);

//显示数字参数为-1输出小数点;

flag=1;

else

ADC:

unsignedintidataTemp,Press,Volt;

unsignedcharidatamux_select;

sfr16ADC0=0xbe;

//ADC0data

voidinit_adc(void)

ADC0CN=0x81;

//ADC0enabled;

normaltracking

//mode;

ADC0conversionsareinitiated

//onwritetoAD0BUSY;

ADC0datais

//left-justified

REF0CN=0x07;

//enabletempsensor,on-chipVREF,

//andVREFoutputbuffer

mux_select=MUX_TEMP;

//CPUon-chiptempsensor

AMX0SL=MUX_TEMP;

ADC0CF=(SYSCLK/2500000)<

<

3;

//ADCconversionclock=2.5MHz

//ADC0CF|=0x01;

//PGAgain=2

EIE2&

=~0x02;

//disableADC0EOCinterrupt

EIE1&

=~0x04;

//disableADC0windowcompareinterrupt

//On-chiptemperature

//AN1.电位器

//AN2.应变片

voidread_analog_inputs(void)

longtemp_long;

AD0INT=0;

//clearconversioncompleteindicator

AD0BUSY=1;

//initiateconversion

while(AD0INT==0);

//waitforconversioncomplete

switch(mux_select)//通过每次的调用来获取电压,温度和压力值

caseMUX_TEMP:

temp_long=ADC0-42380/2;

temp_long=(temp_long*200L)/156;

Temp=temp_long;

AMX0SL=MUX_VOLT;

//SelectAIN1fornextread

mux_select=MUX_VOLT;

break;

caseMUX_VOLT:

temp_long=ADC0;

Volt=24*temp_long/655;

AMX0SL=MUX_PRESS;

//Selecton-chiptempsensor

mux_select=MUX_PRESS;

caseMUX_PRESS:

temp_long=24*temp_long/655;

Press=temp_long;

AMX0SL=MUX_TEMP;

mux_select=MUX_TEMP;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1