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

📄 lcd1602a.c

📁 160270个英文字符显示源程序
💻 C
字号:
//-----------------------------------------------------------------------------
//程序描述:
//  这个程序可以在该液晶模块上显示字符:"  BT F020 V1.0  www.xhl.com.cn"
//  此程序用4位数据线来驱动液晶
//  液晶接线方法 :1脚接地;2脚接+5V;3脚通过1个10K电阻接+5v,通过1个430欧电阻接地;
//  15脚接地;16脚通过1个15R电阻接+5v。液晶别的引脚直接接相应的数据或控制信号线。
//作者:ZDP
//时间:2005-11-30
//版本:V1.0
//-----------------------------------------------------------------------------
// 头文件包含
//在将E置高电平前,先设置好RS和R/W信号,在E下降沿到来之前,准备好写入的命令字或数据。只需在适当的地方加上延时,就可以满足要求了。

//-----------------------------------------------------------------------------
#include <c8051f020.h>                 

//-----------------------------------------------------------------------------
//全局变量定义
//-----------------------------------------------------------------------------
sbit	key1=P2^0;
sbit	key2=P2^1;
sbit	key3=P2^2;
sbit	key4=P2^3;
                                 
unsigned long x;                 //"中"
unsigned char xdata Netdata[70]="my name is gongyan.I like eating dilicious food and singing.";                                
                               
                                 //"  BT F020 V1.0  "
unsigned char xdata NCDdata[8]={0x04,0x04,0x1f,0x15,0x15,0x1f,0x04,0x04};
                                                              
unsigned char *lcdpoint;        //指向 lcddata数组的指针
unsigned char lcd_data_count;
//-----------------------------------------------------------------------------
// 函数定义
//-----------------------------------------------------------------------------
void SYSCLK_Init (void);
void PORT_Init (void);
void LCD_Init(void);
void delay(void);
//-----------------------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------------------
void main (void)
 {
	static unsigned char data1;
    WDTCN = 0xde;
    WDTCN = 0xad;                       	//禁止看门狗定时器

    SYSCLK_Init ();                        	// 系统时钟初始化
                                          
    PORT_Init ();                          	// 交叉开关和通用I/O口初始化

 	
		LCD_Init();
	   	P3 = 0x40;                       //设定CGRAM地址 00H
   		P2 = 0x00;		         //执行指令
   		P2 = 0x80;                       
                for(x=0;x<1000;x++);  
	     P2  = 0xA0;                        //准备送数据
	    for(x=0;x<5000;x++);
	    lcdpoint=&NCDdata;					//取地址
	    for(lcd_data_count=8;lcd_data_count>0;lcd_data_count--)//显示第一行字符
	    { 
		    data1=*lcdpoint;				//读出数据				
		    P3 = data1; 					//写数据到端口
			P2 = 0X20;

	        P2 = 0XA0;
									//控制LCD	
	        lcdpoint++;
			for(x=0;x<5000;x++);
		}
		P2 = 0X80;
	   	P3 = 0x80;
   		P2 = 0x00;		
		P2 = 0XA0;
		   P2 = 0xA0;          //中
   for(x=0;x<5000;x++);  
   P3=  0x00;   
    P2 = 0x00; 	
	P2 = 0XA0;
   		for(x=0;x<5000;x++);
	    lcdpoint=&Netdata;
	    while(*lcdpoint!='\0')//输出字符串
	    { 
		    data1=*lcdpoint;
		    P3 = data1; 
		    P2 = 0xA0;                   
                    P2 = 0x20;
	        lcdpoint++;
			for(x=0;x<5000;x++);
		}
		

		P2 = 0x80;         //定位光标
   for(x=0;x<5000;x++);
   P3=  0x80;
   P2 = 0x00;
	while(1)
	{
	key1=1;
	if(key1==0)
	{
		key1=1;
		delay();//延时
		if(key1==0)
		{
			while(key1==0);
			P2 = 0x80;
   for(x=0;x<1000;x++);
   P3=  0x10;
   P2 = 0x00;
   P2 = 0x80;
   for(x=0;x<1000;x++);
   P3=  0x1c;
   P2 = 0x00;
		}
	}
   key2=1;
	if(key2==0)
	{
		key2=1;
		delay();//延时
		if(key2==0)
		{
			while(key2==0);
		P2 = 0x80;
   for(x=0;x<1000;x++);
   P3=  0x14;
   P2 = 0x00;
   	P2 = 0x80;
   for(x=0;x<1000;x++);
   P3=  0x18;
   P2 = 0x00;
		}
	}

	}

}

//-----------------------------------------------------------------------------
//函数名称:      SYSCLK_Init ()
//函数功能:      系统时钟初始化
//入口参数:      无
//出口参数:      无
//全局变量引用:  无
//调用模块:      无 
//-----------------------------------------------------------------------------
//

  void SYSCLK_Init (void)
{
   //int i;                              // delay counter

   //OSCXCN = 0x67;                      // start external oscillator with
                                       // 22.1184MHz crystal

   //for (i=0; i < 256; i++) ;           // Wait for osc. to start up

   //while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle

   //OSCICN = 0x88;    

   OSCICN = 0x05;                          // 系统时钟初始化为片内的 24.5MHz / 8                                                           
 }

//-----------------------------------------------------------------------------
//函数名称:      PORT_Init  ()
//函数功能:      通用I/O口及交叉开关初始化
//入口参数:      无
//出口参数:      无
//全局变量引用:  无
//调用模块:      无  
//-----------------------------------------------------------------------------

void PORT_Init (void)
{

   XBR0     = 0x00;                       // 没有选择数字外设
   XBR2     = 0x40;
   P2MDOUT  = 0xe0;                       // P2口设为推挽方式
}
//-----------------------------------------------------------------------------
//函数名称:      LCD_Init ()
//函数功能:      LCD初始化
//入口参数:      无
//出口参数:      无
//全局变量引用:  无
//调用模块:      无  
//-----------------------------------------------------------------------------
void LCD_Init(void)
{
   P2 = 0X80;
   for(x=0;x<50000;x++);
   //P7 = 0x30;				/*一行显示*/
   P3 = 0x38;				/*两行显示*/
   P2 = 0X00;//0x08;
   P2 = 0X80;//0x09; 
   for(x=0;x<1000;x++);
   P3 = 0x0e;
   P2 = 0x00;
   P2 = 0x80;
   for(x=0;x<1000;x++);
   P3=  0x06;
   P2 = 0x00;
   P2 = 0x80;
   for(x=0;x<5000;x++);
   P3 = 0x01;
   P2 = 0x00;
   P2 = 0x80; 
   for(x=0;x<5000;x++);
}
void delay(void)
{
	int a=1000;
	while(a!=0)
	{
		a--;
	}
 }

⌨️ 快捷键说明

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