单片机控制12864液晶显示屏静态显示(含仿真文件和代码)

12864简介:

点我点我点我查看12864简介

显示屏幕说明图:

在这里插入图片描述

仿真电路图:

在这里插入图片描述

仿真结果展示:

在这里插入图片描述

汉字取模软件设置:

(取模软件下载链接在文章结尾)
在这里插入图片描述

C语言程序代码:

#include <reg51.h>

#define LCDLCDDisp_Off   0x3e//   程序中 的 LCD_OFF (LCD 断开/不亮) 的值 是 16进制 0x3E
#define LCDLCDDisp_On    0x3f//   程序中 的 LCD_ON (LCD 合上/亮) 的值 是 16进制 0x3F
#define Page_Add         0xb8//   页地址
#define LCDCol_Add       0x40//   列地址
#define Start_Line       0xC0//   行地址
/*****液晶显示器的端口定义*****/
#define data_ora P0 /*液晶数据总线*/
sbit LCD_CS1=P2^4 ;    /*CS1为1时选择右半屏*/
sbit LCD_CS2=P2^3 ;    /*CS2为1时选择左半屏*/
sbit RESET=P2^3 ;  /*复位信号*/
sbit LCDDi=P2^2 ;     /*数据/指令 选择*/
sbit LCDRW=P2^1 ;     /*读/写 选择*/
sbit LCDEnable=P2^0 ;     /*读/写 使能*/



char code Hz_yang[]= 
{
0x00,0xFE,0x02,0x22,0xDA,0x06,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,
0x00,0xFF,0x08,0x10,0x08,0x07,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00

};

char code Hz_guang[]= 
{
0x40,0x40,0x42,0x44,0x58,0xC0,0x40,0x7F,0x40,0xC0,0x50,0x48,0x46,0x64,0x40,0x00,
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x70,0x00
};


char code Hz_zheng[]= 
{
0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0xC2,0x83,0x02,0x00,0x00,
0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00
};

char code Hz_hao[]= 
{
0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,0x82,0x82,0xE2,0x92,0x8A,0xC6,0x80,0x00,
0x40,0x22,0x15,0x08,0x14,0x63,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00
};

char code Hz_wei[]= 
{
0x10,0x88,0xC4,0xA3,0xBC,0xA0,0xBF,0xA0,0xBC,0x20,0xD8,0x17,0x90,0x78,0x10,0x00,
0x01,0x00,0xFF,0x40,0x3E,0x02,0x02,0x3E,0x90,0x48,0x33,0x0C,0x33,0xC0,0x40,0x00
};


char code Hz_feng[]= 
{
0x00,0x00,0xFE,0x02,0x0A,0x12,0x62,0x82,0x62,0x1A,0x02,0xFF,0x02,0x00,0x00,0x00,
0x80,0x40,0x3F,0x20,0x10,0x08,0x06,0x01,0x06,0x18,0x00,0x3F,0x40,0x80,0xE0,0x00
};



char code Hz_bu[]= 
{
0x02,0x02,0x02,0x02,0x02,0x82,0x42,0xF2,0x0E,0x42,0x82,0x02,0x02,0x03,0x02,0x00,
0x00,0x08,0x04,0x02,0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0x01,0x03,0x06,0x00,0x00
};

char code Hz_zao[]= 
{
0x80,0x70,0x00,0xFF,0x20,0x10,0x08,0xE0,0x2F,0xE9,0x09,0xE9,0x2F,0xE0,0x00,0x00,
0x40,0x20,0x18,0x07,0x08,0x30,0x44,0x25,0x15,0x0D,0xFE,0x0D,0x35,0x65,0x24,0x00
};
/****************************************************************************
函数功能:LCD延时程序
入口参数:t
出口参数:
****************************************************************************/
void LCDdelay(unsigned int t)
{
	unsigned int i,j;
	for(i=0;i<t;i++);
	for(j=0;j<10;j++);
}
/****************************************************************************
状态检查,LCD是否忙


*****************************************************************************/
void CheckState()		
{
   unsigned char dat,DATA;//状态信息(判断是否忙)
   LCDDi=0; // 数据\指令选择,D/I(RS)="L" ,表示 DB7∽DB0 为显示指令数据 
   LCDRW=1; //R/W="H" ,E="H"数据被读到DB7∽DB0 
   do
   {
      DATA=0x00;
      LCDEnable=1;	//EN下降源
	  LCDdelay(2);//延时
	  dat=DATA;
      LCDEnable=0;
      dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
    }
    while(dat!=0x00);
}
/*****************************************************************************
函数功能:写命令到LCD程序,RS(DI)=L,RW=L,EN=H,即来一个脉冲写一次
入口参数:cmdcode
出口参数:
*****************************************************************************/
void write_com(unsigned char cmdcode)
{
    CheckState();//检测LCD是否忙
	LCDDi=0;
	LCDRW=0;
	P1=cmdcode;		
	LCDdelay(2);
	LCDEnable=1;
	LCDdelay(2);
	LCDEnable=0;//E下降沿将命令锁存到DB0-DB7
}

/*****************************************************************************
函数功能:写数据到LCD程序,RS(DI)=H,RW=L,EN=H,即来一个脉冲写一次
入口参数:LCDDispdata
出口参数:
*****************************************************************************/
void write_data(unsigned char LCDDispdata)
{
    CheckState();//检测LCD是否忙
	LCDDi=1;
	LCDRW=0;
	P1=LCDDispdata;
	LCDdelay(2);
	LCDEnable=1;
	LCDdelay(2);
	LCDEnable=0;
}
/*****************************************************************************
函数功能:清除LCD内存程序
入口参数:pag,col,hzk
出口参数:
*****************************************************************************/
void Clr_Scr()
{
	unsigned char j,k;
	LCD_CS1=0; //左、右屏均开显示
	LCD_CS2=0;
 	write_com(Page_Add+0);
 	write_com(LCDCol_Add+0);
 	for(k=0;k<8;k++)//控制页数0-7,共8页
 	{
		write_com(Page_Add+k); //每页每页进行写
  		for(j=0;j<64;j++)  //每页最多可写32个中文文字或64个ASCII字符
		{
      		write_com(LCDCol_Add+j);
			write_data(0x00);//控制列数0-63,共64列,写点内容,列地址自动加1
		}
	}
}
/*****************************************************************************
函数功能:指定位置显示汉字16*16程序
入口参数:page,column,hzk
出口参数:
*****************************************************************************/
void hz_LCDDisp16(unsigned char page,unsigned char column, unsigned char code *hzk)
{
	unsigned char j=0,i=0;
	for(j=0;j<2;j++)
	{
		write_com(Page_Add+page+j);
		write_com(LCDCol_Add+column);
		for(i=0;i<16;i++) 
			write_data(hzk[16*j+i]);
	}
}

/*****************************************************************************
函数功能:LCD初始化程序
入口参数:
出口参数:
*****************************************************************************/
void init_lcd()
{
	LCDdelay(100);	
	LCD_CS1=1;//刚开始关闭两屏
	LCD_CS2=1;
	LCDdelay(100);
	write_com(LCDLCDDisp_Off);	 //写初始化命令
	write_com(Page_Add+0);
	write_com(Start_Line+0);
	write_com(LCDCol_Add+0);
	write_com(LCDLCDDisp_On);
}
/*****************************************************************************/

void main()
{ 
	init_lcd();
	Clr_Scr();
	LCD_CS1=0; //左屏开显示
	LCD_CS2=1;
	hz_LCDDisp16(0,0,Hz_yang);
    hz_LCDDisp16(0,16,Hz_guang);
	hz_LCDDisp16(0,32,Hz_zheng);
	hz_LCDDisp16(0,48,Hz_hao);
	
	LCD_CS1=1; //右屏开显示
	LCD_CS2=0;
	hz_LCDDisp16(0,0,Hz_wei);
    hz_LCDDisp16(0,16,Hz_feng);
	hz_LCDDisp16(0,32,Hz_bu);
	hz_LCDDisp16(0,48,Hz_zao);
	
	while(1)
    {
  
	}
}


仿真工程文件下载、HEX文件及C语言程序文件:

=相关文件下载=

字模提取软件下载:

=字模软件下载=

  • 15
    点赞
  • 147
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
51单片机中开关控制LED数码管静态显示的基本原理是:通过设置开关的状态,控制51单片机上的GPIO口的电平状态,从而控制LED数码管的亮灭。 首先,我们需要连接开关和LED数码管到51单片机。将开关的一个引脚连接到GND,另一个引脚连接到51单片机上的一个GPIO口(例如P1.0),以输入方式连接。然后,将LED数码管的各个段选引脚分别连接到51单片机上的不同GPIO口,以输出方式连接。通过这样的连接方式,我们可以通过控制51单片机的GPIO口的电平状态来控制LED数码管的亮灭。 接下来,我们需要在51单片机程序中进行相应的设置。首先,我们需要配置P1为输入口,可以设置P1的相应寄存器(比如P1CON)来将其设置为输入模式。然后,我们可以使用51单片机的输入相关的函数(如P1的输入函数)读取开关的状态,即判断开关是否闭合或打开。 在主程序中,我们可以使用if语句来判断开关的状态。当开关闭合时,我们设置相应的GPIO口输出低电平,以控制LED数码管的亮灭;当开关打开时,我们设置相应的GPIO口输出高电平,以控制LED数码管的熄灭。具体的代码可以如下: ```c #include <reg51.h> #define GPIO_LED_P1 P1 // LED数码管连接到P1口 sbit SW = P1^0; // 开关连接到P1.0引脚 void main() { GPIO_LED_P1 = 0xFF; // 给所有段选引脚置高电平,熄灭数码管 while(1) { if(SW == 0) { // 开关闭合 GPIO_LED_P1 = 0x00; // 给所有段选引脚置低电平,亮起数码管 } else { // 开关打开 GPIO_LED_P1 = 0xFF; // 给所有段选引脚置高电平,熄灭数码管 } } } ``` 以上就是51单片机中开关控制LED数码管静态显示的基本原理和一个简单的代码示例。通过控制开关的状态,可以实现LED数码管的亮灭,从而达到静态显示的效果。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿鹿学术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值