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

📄 lcd.c

📁 本文件是LED灯闪硕实验程序;LED灯每隔1秒亮1秒 将跳线器JP4短接 使用外22.1184MHz晶振.
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************************************************************

* 文件名称: lcd.C
* 文件标识: none
* 适用器件: c8051f020
* 
* 摘 要: 本文件是LCD显示子程序;使用外部22.1184MHz晶振,将跳线器JP8短接,R44空闲
* 

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

/************************************************************************************/
// 引用外部头文件

#include "c8051f020.h"
#include <INTRINS.H>
#include "lcd.h"
#include <math.h>

/************************************************************************************/
// 全局变量
/************************************************************************************/

Uchar col,row,cbyte;			/*列x,行(页)y,输出数据*/
bit xy;							/*画线方向标志:1水平*/
unsigned int xdata addr;
unsigned char xdata *tp;
unsigned char xdata et;

/*--  文字:  铭  --*/
/*--  楷体_GB231224;  此字体下对应的点阵为:宽x高=32x33   --*/
C_BYTE  WLib_ming_32x32[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xF8,0x78,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0xC0,0xFC,0x78,0x38,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xDE,0xCF,0xC7,0x66,0x66,0x66,0x67,0x02,0x30,
0x38,0x3C,0x7E,0xE7,0xC3,0xC3,0xE3,0xF3,0x7F,0x1F,0x0F,0x07,0x02,0x00,0x00,0x00,
0x00,0x06,0x03,0x11,0x10,0x18,0x18,0x18,0xFF,0xFF,0x1F,0x0C,0x4C,0x6C,0x64,0x30,
0x38,0xFC,0xFC,0x3F,0x37,0x33,0x31,0x30,0x18,0x18,0xF8,0xF8,0x70,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x3F,0x3F,0x1E,0x0E,0x07,0x03,0x01,0x00,
0x00,0x0F,0x3F,0x1C,0x0C,0x0C,0x0C,0x06,0x06,0x07,0x07,0x07,0x00,0x00,0x00,0x00,
0x54,0x2B,0xDC,0x00,0x54,0x2B,0xDC,0x00,0x20,0x00,0x00,0x00,0x32,0x30,0x30,0x34,
0x2D,0x39,0x2D,0x31,0x30,0x20,0x31,0x36,0x3A,0x34,0x36,0x3A,0x20,0x00,0x00,0x00
};
/*--  文字:  朗  --*/
/*--  楷体_GB231224;  此字体下对应的点阵为:宽x高=32x33   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=39x33  --*/
C_BYTE  WLib_lang_32x32[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x18,0x38,0xF8,0xB0,0x00,0x00,
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x06,0xFE,0xFE,0x36,0x32,0x33,0x33,0xC3,0xFF,0xFF,0x07,
0x00,0x01,0xFF,0xFF,0x61,0x61,0x61,0x21,0x01,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xC3,0xC3,0xE3,0x6B,0x3B,0x7B,0x70,0x00,
0xC0,0xF8,0x7F,0x0F,0x0C,0x0C,0x0C,0x04,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0x0F,0x07,0x03,0x01,0x00,0x20,0x20,0x30,0x18,0x0C,0x0F,
0x07,0x01,0x00,0x00,0x00,0x04,0x0C,0x1C,0x7C,0x7F,0x1F,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
};
/*--  文字:  科  --*/
/*--  楷体_GB231224;  此字体下对应的点阵为:宽x高=32x33   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=39x33  --*/
C_BYTE  WLib_ke_32x32[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xE0,0x70,0x78,0x70,0x20,
0x00,0x00,0x00,0x00,0x00,0x04,0x7C,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x40,0xC0,0xE0,0xE0,0xE1,0x61,0x61,0xF1,0xF0,0xFF,0xFF,0xB8,0x98,0x98,0x18,
0x00,0x11,0x33,0x73,0x67,0x02,0x00,0xFF,0xFF,0x00,0x00,0x80,0x80,0x80,0x80,0x00,
0x00,0x80,0xC0,0x60,0x70,0x38,0x1C,0x0F,0x07,0x83,0xFF,0xFF,0x01,0x03,0x03,0x0C,
0x0C,0x0C,0x0E,0x06,0x06,0x06,0x06,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x03,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,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
};

/*--  文字:  技  --*/
/*--  楷体_GB231224;  此字体下对应的点阵为:宽x高=32x33   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=39x33  --*/
C_BYTE  WLib_ji_32x32[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0xFC,0xFC,0x18,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x8C,0xFC,0xFC,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x10,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0x8C,0x8C,0x0C,0x00,0x0C,0x0C,
0x0C,0x8C,0xFF,0xFF,0x87,0xC7,0xC7,0xC3,0x83,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x70,0x70,0x70,0x38,0x1C,0x0C,0x0E,0xFF,0xFF,0x01,0x00,0x00,0x01,0x0F,0x0F,
0x1B,0xB1,0xF1,0xF1,0xFD,0xDF,0x8F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x04,0x0C,0x1C,0x3E,0x3F,0x0F,0x00,0x08,0x0C,0x0C,0x06,0x06,
0x03,0x03,0x01,0x00,0x00,0x01,0x03,0x07,0x0F,0x1E,0x1E,0x1C,0x1C,0x1C,0x18,0x08,
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
};

/*--  文字:  W  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=10x8   --*/
C_BYTE  WLib_W_10x8[]={
0x02,0x0e,0x70,0xc2,0x3e,0x32,0xc0,0x72,0x0e,0x02
};
/*--  文字:  M  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=9x8   --*/
C_BYTE  WLib_M_9x8[]={
0x82,0xfe,0x8e,0x70,0x80,0x70,0x8e,0xfe,0x82
};
/*--  文字:  L  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=6x8   --*/
C_BYTE  WLib_L_6x8[]={
0x82,0xfe,0x82,0x80,0xc0,0x00
};
/*--  文字:  A  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=7x8   --*/
C_BYTE  WLib_A_7x8[]={
0x80,0xe0,0xbc,0x22,0x3c,0xe0,0x80
};
/*--  文字:  R  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=7x8   --*/
C_BYTE  WLib_R_7x8[]={

0x82,0xFe,0x92,0x32,0x52,0x8c,0x80
};
/*--  文字:  C  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=7x8   --*/
C_BYTE  WLib_C_7x8[]={
0x00,0x7c,0x82,0x82,0x84,0x46,0x00
};
/*--  文字:  O  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=7x8   --*/
C_BYTE  WLib_O_7x8[]={
0x00,0x7c,0x82,0x82,0x82,0x7c,0x00
};
/*--  文字:  .  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=4x8   --*/
C_BYTE  WLib_dot_4x8[]={
0x00,0xc0,0xc0,0x00
};
/*--  文字:  T  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=5x8   --*/
C_BYTE  WLib_T_6x8[]={
0x00,0x06,0x82,0xfe,0x82,0x06
};
/*--  文字:  e  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=5x8   --*/
C_BYTE  WLib_e_5x8[]={
0x00,0x70,0xa8,0xa8,0xb0
};
/*--  文字:  l  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=5x8   --*/
C_BYTE  WLib_l_4x8[]={
0x00,0x82,0xfe,0x80
};
/*--  文字:  :  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=5x8   --*/
C_BYTE  WLib_ddot_3x8[]={
0x00,0x6c,0x6c
};
/*--  文字:  -  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=5x8   --*/
C_BYTE  WLib_line_6x8[]={
0x00,0x10,0x10,0x10,0x10,0x10
};
/*--  文字:  1  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=4x8   --*/
C_BYTE  WLib_1_4x8[]={
0x00,0x84,0xFe,0x80
};

/*--  文字:  2  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=5x8   --*/
C_BYTE  WLib_2_5x8[]={
0x00,0xc4,0xa2,0x92,0x8c
};

/*--  文字:  3  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=5x8   --*/
C_BYTE  WLib_3_5x8[]={
0x00,0x44,0x92,0x92,0x6c
};

/*--  文字:  4  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=6x8   --*/
C_BYTE  WLib_4_6x8[]={
0x00,0x30,0x28,0x24,0xfe,0x20
};

/*--  文字:  5  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=5x8   --*/
C_BYTE  WLib_5_5x8[]={
0x00,0x4e,0x8a,0x8a,0x72
};

/*--  文字:  6  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=6x8   --*/
C_BYTE  WLib_6_5x8[]={
0x00,0x7c,0x92,0x92,0x60
};

/*--  文字:  7  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=5x8   --*/
C_BYTE  WLib_7_5x8[]={
0x00,0x02,0xf2,0x0a,0x06
};

/*--  文字:  8  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=5x8   --*/
C_BYTE  WLib_8_5x8[]={
0x00,0x6c,0x92,0x92,0x6c
};

/*--  文字:  9  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=5x8   --*/
C_BYTE  WLib_9_5x8[]={
0x00,0x0c,0x92,0x92,0x7c
};

/*--  文字:  0  --*/
/*--  Times New Roman8;  此字体下对应的点阵为:宽x高=5x8   --*/
C_BYTE  WLib_0_5x8[]={
0x00,0x7c,0x82,0x82,0x7c
};

/***********************************************************************************
* 函数名称:lcd_init;
*
* 函数功能描述:lcd_init;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/

void lcd_init(void)                                           
  {

	DISABLE_INTERRUPTS;
	addr=0x980c;

	lcd_wrct(0xc0);
	lcd_wrct(0x40);		// COLOUM ADDRESS
	lcd_wrct(0xb8);		// ROW ADDRESS
	lcd_wrct(0x3f);

	ENABLE_INTERRUPTS;  
 }

/***********************************************************************************
* 函数名称:dis_start0;
*
* 函数功能描述:显示开机界面"铭朗科技www.mlarm.com"及电话;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/

void  dis_start0(void)
{
	LCD_Disp_Word(0,32,WLib_ming_32x32,4,32);
	LCD_Disp_Word(32,32,WLib_lang_32x32,4,32);
	LCD_Disp_Word(64,32,WLib_ke_32x32,4,32);
	LCD_Disp_Word(96,32,WLib_ji_32x32,4,32);

	LCD_Disp_Word(8,16,WLib_W_10x8,1,10);
	LCD_Disp_Word(19,16,WLib_W_10x8,1,10);
	LCD_Disp_Word(30,16,WLib_W_10x8,1,10);
	LCD_Disp_Word(41,16,WLib_dot_4x8,1,4);
	LCD_Disp_Word(46,16,WLib_M_9x8,1,9);
	LCD_Disp_Word(57,16,WLib_L_6x8,1,6);
	LCD_Disp_Word(63,16,WLib_A_7x8,1,7);
	LCD_Disp_Word(71,16,WLib_R_7x8,1,7);
	LCD_Disp_Word(79,16,WLib_M_9x8,1,9);
	LCD_Disp_Word(90,16,WLib_dot_4x8,1,4);
	LCD_Disp_Word(94,16,WLib_C_7x8,1,7);
	LCD_Disp_Word(102,16,WLib_O_7x8,1,7);
    LCD_Disp_Word(110,16,WLib_M_9x8,1,9);

	LCD_Disp_Word(11,2,WLib_T_6x8,1,6);
	LCD_Disp_Word(17,2,WLib_e_5x8,1,5);
	LCD_Disp_Word(22,2,WLib_l_4x8,1,4);
	LCD_Disp_Word(27,2,WLib_ddot_3x8,1,3);

	LCD_Disp_Word(34,2,WLib_0_5x8,1,5);
	LCD_Disp_Word(39,2,WLib_2_5x8,1,5);
	LCD_Disp_Word(44,2,WLib_9_5x8,1,5);
	LCD_Disp_Word(49,2,WLib_line_6x8,1,6);
	LCD_Disp_Word(55,2,WLib_8_5x8,1,5);
	LCD_Disp_Word(60,2,WLib_8_5x8,1,5);
	LCD_Disp_Word(65,2,WLib_2_5x8,1,5);
	LCD_Disp_Word(70,2,WLib_2_5x8,1,5);
	LCD_Disp_Word(75,2,WLib_3_5x8,1,5);
	LCD_Disp_Word(80,2,WLib_5_5x8,1,5);
	LCD_Disp_Word(85,2,WLib_9_5x8,1,5);
	LCD_Disp_Word(90,2,WLib_7_5x8,1,5);
	LCD_Disp_Word(95,2,WLib_line_6x8,1,6);
	LCD_Disp_Word(101,2,WLib_8_5x8,1,5);
	LCD_Disp_Word(106,2,WLib_0_5x8,1,5);
	LCD_Disp_Word(111,2,WLib_2_5x8,1,5);
}

/***********************************************************************************
* 函数名称:dis_clr;
*
* 函数功能描述: 清屏;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/

void dis_clr(void)
{
      unsigned char x,y;
      for(y=0;y<8;y++)
        {
           for(x=0;x<128;x++)                
                 lcd_wrda(x,y,0x00);
        }
}

/***********************************************************************************
* 函数名称:dis_full;
*
* 函数功能描述: 写满屏;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/

void dis_full(void)
{
      unsigned char x,y;
      for(y=0;y<8;y++)
        {
           for(x=0;x<128;x++)                
                 lcd_wrda(x,y,0xff);
        }
}

/***********************************************************************************
* 函数名称:checkbusy;
*
* 函数功能描述: 判断LCD忙等待;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/

void checkbusy(void)
{
	addr=0x980e;

	_nop_();_nop_();
    _nop_();_nop_();

	do
	{
		tp=addr;
	}while((*tp&0x80)==0x80);

	addr=0x180f;
}

/***********************************************************************************
* 函数名称:lcd_wrct;
*
* 函数功能描述: 向LCD写命令;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/

void lcd_wrct(unsigned char dd)
{
	DISABLE_INTERRUPTS;	

	addr=0x980c;
    tp=addr;
	*tp=dd;

	addr=0x180c;

	_nop_();_nop_();
    _nop_();_nop_();

	addr=0x180d;

	ENABLE_INTERRUPTS;
}

/***********************************************************************************
* 函数名称:set_xy;
*
* 函数功能描述: LCD读写位置变换;
*              
* 输入参数:unsigned char类型坐标x,y;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/

void set_xy(unsigned char x,unsigned char y)
{
	DISABLE_INTERRUPTS;
  
    checkbusy();

	y&=0x07;
	y|=0xB8;
	lcd_wrct(y);

    x&=0x3F;
	x|=0x40;
	lcd_wrct(x);

	ENABLE_INTERRUPTS;
}

/***********************************************************************************
* 函数名称:lcd_wrda;
*
* 函数功能描述:向LCD写数据;
*              
* 输入参数:unsigned char类型坐标x,y, unsigned char类型写入数据dd;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/

void lcd_wrda(unsigned char x,unsigned char y,unsigned char dd)
  {
    
   	DISABLE_INTERRUPTS;

⌨️ 快捷键说明

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