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

📄 12864-7920.c

📁 16个单片机c语言实验程序
💻 C
字号:
//12864液晶的试验程序,驱动芯片为ST7920
//目标板为DDC-16A
//驱动方式-并口
//JP10短路块位于右侧,JP1内侧短路块插好(+)
//调节V0电位器调整对比度
//注意:因为厂家不同液晶的19脚和20脚(背光)有时会不同,导致背光不亮,需要注意。

#include <iom16v.h>
#include <string.h>

#define uchar unsigned char 
#define uint unsigned int 

#define RS (1<<5)
#define RW (1<<6)
#define EN (1<<7)

//延时函数
void s_ms(uint ms)
{
	for(;ms>1;ms--);
}	

//此处定义字符串
char text_1[]={"北京东控开发板"};
char text_2[]={"WWW.ISMCU.COM"};
char text_3[]={"WDD_CN@126.COM"};
char text_4[]={"QQ:621520"};

//写数据
void WriteDataLCM(unsigned char WDLCM)
{
	//ReadStatusLCM(); //检测忙
	s_ms(100);
	PORTA|=RS;       //RS=1    
	s_ms(100);
	PORTA&=~RW;      //RW=0
	s_ms(100);
	PORTA|=EN;       //EN=1
	s_ms(100);
	PORTD=WDLCM;     //输出数据
	s_ms(100);
	PORTA&=~EN;      //EN=0
	s_ms(100);
}

//写指令
void WriteCommandLCM(unsigned char WCLCM) 
{
	//ReadStatusLCM(); //根据需要检测忙
	s_ms(100);
	PORTA&=~RS;      //RS=0
	s_ms(100);
	PORTA&=~RW;      //RW=0
	s_ms(100);
	PORTA|=EN;       //EN=1
	s_ms(100);
	PORTD=WCLCM;     //输出指令
	s_ms(100);
	PORTA&=~EN;      //EN=0
	s_ms(100);
}

//读状态:检测忙
void ReadStatusLCM(void)
{
	uchar temp;
    uchar flag = 1;
    while(flag==1)
	{
	    DDRD=0x00;      //端口A改为输入
		PORTD=0xff;    
		s_ms(100);
		PORTA&=~RS;     //RS=0
		s_ms(100);
		PORTA|=RW;      //RW=1
		s_ms(100);
		PORTA|=EN;      //EN=1
		s_ms(1000);
		temp = PIND;    //读端口A
		s_ms(1000);
		DDRD=0xff;      //端口A改为
		s_ms(100);
		PORTA&=~EN;     //EN=0
		s_ms(100);
		if(temp>>7==0)
		flag = 0;
	}
}

//LCM初始化
void LCMInit(void) 
{
	WriteCommandLCM(0x38);    //三次显示模式设置,不检测忙信号
	s_ms(1000);
	WriteCommandLCM(0x38);
	s_ms(1000); 
	WriteCommandLCM(0x38);
	s_ms(1000); 
	WriteCommandLCM(0x38);    //显示模式设置,开始要求每次检测忙信号
	WriteCommandLCM(0x08);    //关闭显示
	WriteCommandLCM(0x01);    //显示清屏
	WriteCommandLCM(0x06);    //显示光标移动设置
	WriteCommandLCM(0x0C);    //显示开及光标设置
}

//按指定位置显示一串字符
//液晶显示:汉字为16*16,字母及数字为8*16,此次显示的文本
//          从第一行第一列开始,依次向左,如果想在不同的
//          位置显示,只需修改相应的行值即可。液晶显示
//          完毕后,转入语音文本发送。
//DisplsyList(X,DData)函数:X为0x80在第一行显示;X为0x90在
//			第二行显示;X为0x88在第三行显示;X为0x98在
//			第四行显示;DData为显示数组。
void DisplayList(unsigned char X,char *DData)
{
	unsigned char length;
	unsigned char i=0;
	char *p;
	p = DData;
	length = strlen(p);
	WriteCommandLCM(0x08);
	WriteCommandLCM(X);
	WriteCommandLCM(0x06);
	WriteCommandLCM(0x0C);
	WriteCommandLCM(X);
	for(i=0;i<length;i++)
	{
		WriteDataLCM(DData[i]);
		i++;
		WriteDataLCM(DData[i]);
	}
}

//主函数
void main(void)
{
    //端口初始化
	DDRA=0xff;
	PORTA=0xff;
	DDRB=0xff;
	PORTB=0xff;
	DDRD=0xff;
	PORTD=0x00;
	
	s_ms(200); 
	s_ms(200);  
	LCMInit(); //LCM初始化   //液晶初始化

    DisplayList(0x80,text_1);     //显示第一行
	DisplayList(0x90,text_2);     //显示第二行
	DisplayList(0x88,text_3);     //显示第三行
	DisplayList(0x98,text_4);     //显示第四行
	while(1);
}

⌨️ 快捷键说明

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