⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gaoding.c

📁 c8051f020的128×64图形液晶显示图形的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <C8051F020.h>     // Register definition file.
#include <stdio.h>
#define SYSCLK   22118400   //定义系统时钟22.1184MHz
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;
/*=======基本指令集=========*/
#define Base_Module 	0x30	/*基本指令集*/
#define Clear_Display	0x01 /*清除显示器,清除DDRAM*/			
#define Go_Origin		0x02 /*光标返回到原点,AC=0,DDRAM不变*/
#define Right_ACAdd 	0x06 //设定光标移动方向,光标右移  AC+1
#define Left_ACDec	 	0x04 //设定光标移动方向,光标左移,AC-1
#define Clear_Screen 	0x08 /*显示器关闭*/
#define On_Screen		0x0c 	/*显示器打开*/
#define Off_Cursor  	0x0d /*光标显示关*/
#define On_Cursor 		0x0e /*光标显示开*/
#define Reverse_Current			0x0f /*光标位置显示取反*/	
#define LeftShift_Cursor 		0x10 /*光标左移,AC-1*/
#define RightShift_All 			0x18 /*画面整体左移*/
#define RightShift_Cursor 		0x14 /*光标右移,AC+1*/
#define LeftShift_All  			0x1c /*画面整体右移*/

/*=======扩充指令集=========*/
#define Expand_Module 	0x34	/*扩充指令集*/
//#define Wait_Module 	0x01 //进入待命模式,执行任何其他指令都可
						     			  	 //终止待命模式,只保留COM33显示
#define Enable_ICGRAMBitAddr		0x02 /*允许输入IRAM,CGRAM位址*/
#define Enable_UprightnessBitAddr 	0x03 /*允许输入垂直滚动位址*/
#define Reverse_WhiteOne			0x04 /*选择4行中的一行反白*/
#define Reverse_WhiteSecond			0x05 /*选择4行中的二行反白*/
#define On_	Sleep		0x08 /*进入睡眠模式*/
#define Off_Sleep		0x0c /*脱离睡眠模式*/
#define On_Plot			0x36 /*绘图显示开*/
#define Off_Plot	  	0x34 /*绘图显示关*/




//接口定义////////////////////////////////////
sbit  LCDRS = P3^0;  //  H---DATA,    L---INSTRUCT
sbit  LCDRW = P3^1;  //  H---READ,    L---WRITE
sbit  LCDE = P3^2;   //  下降沿---写数据,  高---读数据, 低或上升沿无动作
sbit  LCDPSB = P3^3;   //  1--并行,0--串行
#define  LCDDB = P7;			//  DATA


//LCD寄存器定义//////////////////////////////
data LCD_DAT;  
data LCD_COM;


//外部晶振初始化/////////////////////////////
void SYSCLK_Init ()
{
    int i;                    // 延时计数器
    OSCXCN = 0x67;            // 开启外部振荡器22.1184MHz晶体
    for (i=0; i < 256; i++) ; // 等待振荡器启振
    while (!(OSCXCN & 0x80)); // 等待晶体振荡器稳定
    OSCICN = 0x88;            // 选择外部振荡器为系统时钟源并允许丢失时钟检测器
}


//  交叉开关配置,管脚输入输出配置
void XBR_Init()
{
	XBR0 = 0x00;	//不配置特殊功能
	XBR1 = 0x00;	
	XBR2 = 0x40;	//使能交叉开关,并且总体弱上拉

}	

//发送控制命令到LCD
void LCDWRT_COM(unsigned char COM)
{
   
	unsigned char temp;
	unsigned int i;
	LCDPSB=1;
	//读取并判断busy
	LCDRS=0;
		for (i=0;i<255;i++);
		for (i=0;i<255;i++);
	LCDRW=1;
		for (i=0;i<255;i++);
		for (i=0;i<255;i++);
	P7=0xff;
		for (i=0;i<255;i++);
		for (i=0;i<255;i++);
	LCDE=1;
		for (i=0;i<255;i++);
		for (i=0;i<255;i++);
	temp=P7;
		for (i=0;i<255;i++);
	LCDE=0;
	while(temp>=0x80);
		for (i=0;i<255;i++);
		for (i=0;i<255;i++);
	LCDRW=0; 
		for (i=0;i<255;i++);
		for (i=0;i<255;i++);
	P7=COM;
		for (i=0;i<255;i++);
		for (i=0;i<255;i++);
	LCDE=1;
		for (i=0;i<255;i++);
		for (i=0;i<255;i++);
	LCDE=0;
		for (i=0;i<255;i++);
		for (i=0;i<255;i++);

}



//发送数据到LCD
void LCDWRT_DAT(unsigned char DAT)
{

	unsigned int i;
	unsigned char temp;
	LCDPSB=1;
	//读取并判断busy
	LCDRS=0;
//	for (i=0;i<255;i++);
	for (i=0;i<255;i++);
	LCDRW=1;
//	for (i=0;i<255;i++);
	for (i=0;i<255;i++);
	P7=0xff;
//	for (i=0;i<255;i++);
	for (i=0;i<255;i++);
	LCDE=1;
//	for (i=0;i<255;i++);
	for (i=0;i<255;i++);
	temp=P7;
	for (i=0;i<255;i++);
	for (i=0;i<255;i++);
	LCDE=0;
	while(temp>=0x80);
	for (i=0;i<255;i++);

	LCDRS=1;
//	for (i=0;i<255;i++);
	for (i=0;i<255;i++);
	LCDRW=0;
//	for (i=0;i<255;i++);
	for (i=0;i<255;i++);
	P7=DAT;
//	for (i=0;i<255;i++);
	for (i=0;i<255;i++);
	LCDE=1;
//	for (i=0;i<255;i++);
	for (i=0;i<255;i++);
	LCDE=0;
//	for (i=0;i<255;i++);
	for (i=0;i<255;i++);
	
}
void main()
{
	unsigned int i,j;
	/*--  文字:  0  --*/
/*--  Verdana22;  此字体下对应的点阵为:宽x高=21x35   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=24x35  --
xdata  unsigned char  PNumber0[64]={
/*--  文字:  0  --*/
/*--  Impact18;  此字体下对应的点阵为:宽x高=16x37   
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,
0x0F,0xF0,0x1F,0xF8,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,
0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,
0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x1E,0x7C,0x1F,0xF8,0x0F,0xF0,0x07,0xE0,0x00,0x00,
0x00,0x00,0x00,0x00};--*/


xdata  unsigned int date[64][16]={0x55,0x55,0x4A,0xA5,0x52,0x55,0x4A,0x94,0xA5,0x49,0x4A,0xAA,0x95,0x55,0x55,0x52,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -