C8051F LCD12864程序

2020-06-28来源: eefocus关键字:C8051F  LCD12864程序

摘要: /********************************************************************************************************** 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

*http://www.waveshare.net

*All Rights Reserved

*

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


#define _DVK501_F320_EX_


#include

#include <../../../../library/C8051F/ws_clock.h>

#include <../../../../library/C8051F/ws_delay.h>

#include <../../../../library/C8051F/ws_lcd_st7920_port.h>


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

*                                                                     http://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 <../../../../library/C8051F/ws_lcd_st7920.h>


#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

*                                                                     http://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 != '')

{

if(coordinate > 64) break;


if(*str == '\')

{

str++;

lcd_stack[coordinate] = *str;

}

else if(*str == '%')

{

str++;

if (*str == 'd' || *str == 'D')

{

str++;

decToAscii(&lcd_stack[coordinate],va_arg(marker,uchar),(*str - '0'));

coordinate += (*str - '0' - 1);

}

else if(*str == 'c' || *str == 'C')

{

lcd_stack[coordinate] = va_arg(marker,uchar);

}

else if(*str == 'x' || *str == 'X')

{

str++;

hexToAscii(&lcd_stack[coordinate],va_arg(marker,uchar),(*str - '0'));

coordinate += (*str - '0' - 1);

}

}

else

{

lcd_stack[coordinate] = *str;

}

str++;

coordinate++;

}

va_end( marker ); // Reset variable arguments. 

}


#endif /*_WS_LCD_ST7920_H*/


关键字:C8051F  LCD12864程序 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic501332.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:C8051F LCD1602程序
下一篇:C8051F SPI程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

C8051F烧写程序快速入门(Keil)
注:下载程序必须先安装Keil软件,以及对应的Silicon IDE驱动软件·Keil的安装  请到 Keil 官方网站: https://www.keil.com/c51/demo/eval/c51.htm下载安装。·Keil μVision Driver 的安装  请到 Silabs 官方网站: http://www.silabs.com/products/mcu/Pages/KeilDriver.aspx下载安装。1、安装好Keil μVision Driver驱动并且设置好下载程序前的相关配置(点击查看)2、如下图所示,点击菜单栏中的"Debug -> Start/Stop Debug Session
发表于 2020-06-30
<font color='red'>C8051F</font>烧写程序快速入门(Keil)
C8051F仿真调试快速入门(Silicon IDE)
注:下载程序必须首先安装Silicon IDE以及Keil软件·Keil的安装  请到 Keil 官方网站: https://www.keil.com/c51/demo/eval/c51.htm下载安装。·Silicon IDE的安装  请到 Silabs 官方网站: http://www.silabs.com/products/mcu/Pages/SoftwareDownloads.aspx?cm_sp=<WebParts>-_-<MCUSupport>-_-<SWDownloads>下载安装。1、在Silicon IDE中集成Keil软件(点击查看)2、如下图所示,点击
发表于 2020-06-30
<font color='red'>C8051F</font>仿真调试快速入门(Silicon IDE)
C8051F仿真调试快速入门(Keil)
注:下载程序必须先安装Keil软件,以及对应的Silicon IDE驱动软件·Keil的安装  请到 Keil 官方网站: https://www.keil.com/c51/demo/eval/c51.htm下载安装。·Keil μVision Driver 的安装  请到 Silabs 官方网站: http://www.silabs.com/products/mcu/Pages/KeilDriver.aspx下载安装。1、安装好Keil μVision Driver驱动并且设置好下载程序前的相关配置(点击查看)2、如下图所示,点击菜单栏中的"Debug -> Start/Stop Debug
发表于 2020-06-30
<font color='red'>C8051F</font>仿真调试快速入门(Keil)
C8051F单片机基本硬件线路设计
其实C8051F可以不需要晶振跟复位电路,但是为了最小系统能够稳定运行,所以最好增加外部电路。● C8051F复位电路设计   C8051F单片机内置上电复位,所以,C8051F单片机可以不设外部上电复位电路,依然可以正常复位,稳定工作。 若是系统需要设置按键复位电路,那么注意,C8051F单片机是低电平复位,如下图所示● C8051F震荡电路设计C8051F单片机内置RC振荡电路。在出厂设置中,并未对时钟源进行设置,用户可通过编程的方式设置内部时钟电路或是外部时钟电路,内部时钟源的最高频率为12M高速RC振荡器。通过程序对寄存器的设置,可以设置MCU的内部RC振荡频率。例如:4M、8M等。不过,内置RC振荡,在一致性
发表于 2020-06-30
<font color='red'>C8051F</font>单片机基本硬件线路设计
C8051F IO输出之LED显示程序
系统功能使用C8051F单片机控制8位LED,演示C8051F单片机之“点灯术”。硬件设计关于C8051F的I/O结构及相关介绍详见Datasheet(点击查看),这里仅对作部分简单介绍,下面是AVR的I/O引脚配置表:虽然C8051F的I/O口单独输出“1”时,可输出较大电流足已点亮一盏灯,但C8051F总的I/O输出毕竟是有限的,所以,有经验的点灯者考虑到除了点灯外可能还有其它费劲的活儿要干,会将C8051F的I/O口设计为输出“0”时点灯,输出“1”时熄灯。这种接法亦叫“灌电流接法”。8位LED灯控制电路原理图软件设计下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解!//目标系统: 基于C8051F
发表于 2020-06-30
<font color='red'>C8051F</font> IO输出之LED显示程序
使用74LS164将C8051F的串口输出扩为并口输出
系统功能使用74LS164将AVR的串口输出扩为并口输出。硬件设计串行输出扩展为并行输出芯片74LS164控制电路原理图软件设计下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解!//目标系统: 基于C8051F单片机//应用软件: Silicon IDE / Keil/*01010101010101010101010101010101010101010101010101010101010101010101----------------------------------------------------------------------实验内容:使用P2口的LED指示灯查看MCU自己从模拟串口发送
发表于 2020-06-30
使用74LS164将<font color='red'>C8051F</font>的串口输出扩为并口输出
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved