×
单片机 > 单片机程序设计 > 详情

C8051F LCD12864程序

发布时间:2021-11-09 发布时间:
|

摘要: /********************************************************************************************************** File : LCD12864.c* Hardware Environment: DVK501 F320 EX* Build Environment : Silicon LABs 3 ...

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

*

* File : LCD12864.c

* Hardware Environment: DVK501 && F320 EX

* Build Environment : Silicon LABs 3.42.00 / uVision3 V3.80 20100913

* Version :

* By : Su Wei Feng

*

*(c) Copyright 2005-2010, WaveShare

*/zixunimg/eeworldimg/www.waveshare.net

*All Rights Reserved

*

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


#define _DVK501_F320_EX_


#include

#include <..>

#include <..>

#include <..>


void main(void)

{

PCA0MD &= ~0x40; //Clear watchdog timer enable

XBR1 = 0x40;

clock_external();

delay_ms(100);

SPI_Init();

st7920LcdInit();

showLine(2,1,lcd_buffer,"深圳微雪电子");

showLine(2,2,lcd_buffer,"WaveShare.net");

refreshLCD(lcd_buffer);


while(1);

}



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

*

* File : ws_lcd_st7920_port.h

* Hardware Environment:

* Build Environment : Silicon LABs 3.42.00 / uVision3 V3.80 20100913

* Version :

* By : Su Wei Feng

*

* (c) Copyright 2005-2010, WaveShare

* /zixunimg/eeworldimg/www.waveshare.net

* All Rights Reserved

*

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


#ifndef _WS_LCD_ST7920_PORT_H

#define _WS_LCD_ST7920_PORT_H


void st7920LcdInit(void);

void spiSendChar(uchar send_char);

void sendCodeST7920(uchar Lcd_code);

void sendDataST7920(uchar Lcd_data);

void refreshLCD(const uchar *lcd_stack);

void decToAscii(uchar* str,uint dec,uchar width);

void hexToAscii(uchar* str,uint hex,uchar width);

void showLine(const uchar x,const uchar y,uchar* lcd_stack,char * str,...);


uchar idata lcd_buffer[64];


/*Hardware Environment:DVK501 && F320 EX*/

#if defined(_DVK501_F320_EX_)

sbit CS_LCD = P0^7;


void SPI_Init(void)

{

XBR0 |= 0x03;

P0SKIP |= 0x80;

P0MDOUT |= 0xC1;

SPI0CFG = 0x40;

SPI0CN = 0x01;

SPI0CKR = 0x05;

}


#else

#warning "No SPI!"

#endif


#include <..>


#endif /*_WS_LCD_ST7920_PORT_H*/



********************************************************************************************************

*

* File : ws_lcd_st7920.h

* Hardware Environment:

* Build Environment : Silicon LABs 3.42.00 / uVision3 V3.80 20100913

* Version :

* By : Su Wei Feng

*

* (c) Copyright 2005-2010, WaveShare

* /zixunimg/eeworldimg/www.waveshare.net

* All Rights Reserved

*

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


#ifndef _WS_LCD_ST7920_H

#define _WS_LCD_ST7920_H


#include

#include


#define LCD_DELAY() delay_us(75)


void st7920LcdInit(void)

{

sendCodeST7920(0x30);

sendCodeST7920(0x0C);

sendCodeST7920(0x01);

sendCodeST7920(0x02);

sendCodeST7920(0x80);

delay_ms(2);

memset(lcd_buffer,' ',sizeof(lcd_buffer));

}


void spiSendChar(uchar send_char)

{

SPIF = 0;

SPI0DAT = send_char;

while (!SPIF);

}


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


Software simulation SPI


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

/*void spiSendChar(uchar send_char)

{

uchar i;

for(i=8;i>0;i--)

{

if(send_char & (1 << (i-1)))

RW_SID = 1;

else

RW_SID = 0;

delay_us(10);

E_CLK = 1;

delay_us(10);

E_CLK = 0;

delay_us(10);

}

}*/


void sendCodeST7920(uchar Lcd_code)

{

/*CS_LCD = 1;

delay_us(10);*/


spiSendChar(0xF8);

spiSendChar(Lcd_code & 0xF0);

spiSendChar((Lcd_code << 4));

LCD_DELAY();


/*delay_us(10);

CS_LCD = 0;*/

}


void sendDataST7920(uchar Lcd_data)

{

/*CS_LCD = 1;

delay_us(10);*/


spiSendChar(0xFA);

spiSendChar(Lcd_data & 0xF0);

spiSendChar((Lcd_data << 4));

LCD_DELAY();


/*delay_us(10);

CS_LCD = 0;*/

}


void refreshLCD(const uchar *lcd_stack)

{

uchar addr;

sendCodeST7920(0x02);

for(addr=0;addr<16;addr++)

{

sendDataST7920(*(lcd_stack + addr));

}

for(addr=32;addr<48;addr++)

{

sendDataST7920(*(lcd_stack + addr));

}

for(addr=16;addr<32;addr++)

{

sendDataST7920(*(lcd_stack + addr));

}


for(addr=48;addr<64;addr++)

{

sendDataST7920(*(lcd_stack + addr));

}

}


void decToAscii(uchar* str,uint dec,uchar width)

{

while(width)

{

switch(width)

{

case 5:

{

*str = (dec / 10000 + '0');

dec %= 10000;

break;

}

case 4:

{

*str = (dec / 1000 + '0');

dec %= 1000;

break;

}

case 3:

{

*str = (dec / 100 + '0');

dec %= 100;

break;

}

case 2:

{

*str = (dec / 10 + '0');

dec %= 10;

break;

}

case 1:

{

*str = (dec + '0');

break;

}

default: *str = '0';

}

width--;

str++;

}

}


void hexToAscii(uchar* str,uint hex,uchar width)

{

uint tmp;

while(width)

{

switch(width)

{

case 4:

{

tmp = (hex >> 12);

if(tmp > 9) *str = tmp + ('A' - 10);

else *str = tmp + '0';

break;

}

case 3:

{

tmp = (hex >> 8) & 0x000F;

if(tmp > 9) *str = tmp + ('A' - 10);

else *str = tmp + '0';

break;

}

case 2:

{

tmp = (hex >> 4) & 0x000F;

if(tmp > 9) *str = tmp + ('A' - 10);

else *str = tmp + '0';

break;

}

case 1:

{

tmp = hex & 0x000F;

if(tmp > 9) *str = tmp + ('A' - 10);

else *str = tmp + '0';

break;

}

default: *str = '0';

}

width--;

str++;

}

}


void showLine(const uchar x,const uchar y,uchar *lcd_stack,char *str,...)

{

uchar coordinate = 16 * y + x;

va_list marker;

va_start(marker,str); // Initialize variable arguments.

while(*str != '


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向