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

📄 main.c

📁 自己做的单片机Proteus仿真实例
💻 C
字号:
/***********http://hi.baidu.com/echoas**************
程序:LCD12864显示图片原理
内容:显示国旗和人物头像
软件:keil uVision4
学习板:HOT-51
作者:大海橡树
整理日期:2010-11-18 21:00
修改:无

备注:有什么错误的地方,欢迎网友们到空间留言

					O(∩_∩)O~

*************http://hi.baidu.com/echoas************/ 
#include<AT89X52.h>
#include"BMP.h"
#include"BMP1.h"
#include"BMP2.h"
#define uchar unsigned char
#define uint  unsigned int

sbit RS=P2^5;
sbit RW=P2^6;
sbit EN=P2^7;		//LCD三个控制端 

void delay(uint i) //延时函数 
{
	while(--i);
}

void read_busy()//读忙函数。每次读写都要进行读忙操作 
{
	RS=0;
	RW=1;
	EN=1;
	while(P0 & 0x80);//最高位为BF位 DB7---BF 
	EN=0;
}

void write_LCD_command(uchar value)//写指令函数 
{
	read_busy();
	RS=0;
	RW=0;
	EN=1;		//EN从1---0锁存数据 
	P0=value;
	delay(200);	
	EN=0;
} 

void write_LCD_data(uchar value)//写数据函数 
{
	read_busy();
	RS=1;
	RW=0;
	EN=1;		//EN从1---0锁存数据 
	P0=value;
	delay(200);
	EN=0;
} 
/***********************************************
函数:显示图片初始化
说明:与显示汉字的不一样(基本指令--0x30),显示图
片的指令是扩充指令---0x36 
***********************************************/ 
void init_BMP()	 
{
	write_LCD_command(0x36);//CL=1--8位。扩充指令(RE=1),绘图打开(G=1)
	delay(100);	//适当延时 
	write_LCD_command(0x36);
	delay(37);
	write_LCD_command(0x3E); //8位(CL=1),扩充指令(RE=1),绘图打开(G=1) 
	delay(100);
	write_LCD_command(0x01);//清屏指令 
	delay(100);
}
/**********************************************
函数:显示图片
说明:要先设定垂直地址再设定水平地址(连续写入两
个字节的资料来完成垂直于水平的坐标地址) 
0x80---0x87:显示上半部分
0x88---0x8F:显示下半部分 
只需设定显示的第一个位置,指针会自动加1 
**********************************************/ 
void display_BMP(uchar *address)	
{
	uchar i,j;
	for(i=0;i<32;i++)		
	{
		write_LCD_command(0x80+i);//先送垂直地址 
		write_LCD_command(0x80);  //再送水平地址 ----显示图片的上半部分 
		for(j=0;j<16;j++)
		{
			write_LCD_data(*address);
			address++;
		}
	}
	
	for(i=0;i<32;i++)
	{
		write_LCD_command(0x80+i);	//先送垂直地址
		write_LCD_command(0x88);	//显示图片的下半部分 
		for(j=0;j<16;j++)
		{
			write_LCD_data(*address);
			address++;			//指针地址指向下个位置 
		}
	}
}

void clear_BMP_RAM()//清除图片显示RAM区的数据,与清屏指令write_LCD_command(0x01)不同 
{
	uchar i,j;
	for(i=0;i<32;i++)
	{
		write_LCD_command(0x80+i);
		write_LCD_command(0x80);
		for(j=0;j<16;j++)
		{
			write_LCD_data(0);//清0 
		}
	}
	
	for(i=0;i<32;i++)
	{
		write_LCD_command(0x80+i);
		write_LCD_command(0x88);
		for(j=0;j<16;j++)
		{
			write_LCD_data(0);//清0
		}
	}	
}

void main()
{
	while(1)
	{
		init_BMP();
		display_BMP(table);//显示国旗 
		delay(50000); 
		delay(50000);
		delay(50000);
		delay(50000);
		clear_BMP_RAM();//清除RAM区 
		display_BMP(table1);//显示人物头像 
		delay(50000); 
		delay(50000);
		delay(50000);
		delay(50000);
		clear_BMP_RAM();//清除RAM区 
		display_BMP(table2);//显示人物头像 
		delay(50000); 
		delay(50000);
		delay(50000);
		delay(50000);
	}
}

⌨️ 快捷键说明

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