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

📄 lcd.c

📁 基于AVR平台的C语言开发
💻 C
字号:
//LCD.c : source file for the LCD project
//

#include "LCD.h"
#include <delay.h>
#include <eeprom.h>
#include <pgmspace.h>
#define uchar unsigned char
#define uint  unsigned int

/////////////////////////////////////////////////////////////////////////////
//LCD
uchar xdsd,jdsd;
uchar flg;
char meumy[4][17];//显示缓冲区
char *line[4];	//保存菜单的显示数据

static void io_init(void)
{
	//{{WIZARD_MAP(General)
	//}}WIZARD_MAP(General)

	//{{WIZARD_MAP(I/O Ports)
	// PortA
	PORTA = 0x0;
	DDRA = 0xff;
	// PortB
	PORTB = 0x0;
	DDRB = 0x0;
	// PortC
	PORTC = 0x0;
	DDRC = 0xff;
	// PortD
	PORTD = 0x0;
	DDRD = 0xff;
	//}}WIZARD_MAP(I/O Ports)

	//{{WIZARD_MAP(Watchdog)
	// Watchdog Disabled
	wdt_disable();
	//}}WIZARD_MAP(Watchdog)

	//{{WIZARD_MAP(Analog Comparator)
	// Analog Comparator Disabled
	ACSR = 0x80;
	//}}WIZARD_MAP(Analog Comparator)
}

int main(void)
{
	//{{WIZARD_MAP(Initialization)
	io_init();
	lcm_init();
	xdsd=100;
	jdsd=50;
	//}}WIZARD_MAP(Initialization)
	// TODO: Add extra initialization here
	
	//{{WIZARD_MAP(Global interrupt)
	//}}WIZARD_MAP(Global interrupt)
	while(1)
	{
		// TODO: Add your code here
		flg=0;star1();
		delay(500,8000);
		flg=1;star1();
		delay(500,8000);

	}
}

/*****************************************
液晶初始化程序
输入数据:无
输出:PA4:CLK,33-6; PC7:SID,26-5; PC6:CS,25-4;
*****************************************/
void lcm_init(void)
{
	sbi(PORTC,6);delay(40,8000);
	wr_com(0x30);delay(1,8000);  //00110000
	wr_com(0x30);delay(1,8000);  //00110000
	wr_com(0x0c);delay(1,8000);  //00001100
	wr_com(0x01);delay(5,8000);  //00000001
	wr_com(0x06);delay(1,8000);  //01100000
	wr_com(0x01);delay(5,8000);  //00000001
}

/*****************************************
液晶写控制字程序
输入数据:要写入的8位数据
输出:无
*****************************************/
void wr_com(uchar a)
{
	uchar s;
	s=a&0xf0;   
	lcm_out(0xf8);lcm_out(s); 
	s=a&0x0f;s<<=4;
	lcm_out(s);
}

/*****************************************
液晶写数据子程序
输入数据:要写入的8位数据
*****************************************/
void wr_date(uchar a)
{
	uchar s;
	s=a&0xf0;
	lcm_out(0xfa);lcm_out(s); //11111010 
	s=a&0x0f;s<<=4;
	lcm_out(s);
}

/*****************************************
液晶发送子程序(串行)
输入数据:要发送的8位数据
输出:PA4:CLK,33-6; PC7:SID,26-5; PC6:CS,25-4;
*****************************************/
void lcm_out(char a)
{
	char i,d;
	for(i=0;i<8;i++)
	{
		cbi(PORTA,4);	
		d=a&0x80;
		if(d)	
			sbi(PORTC,7);
		else	
			cbi(PORTC,7);
		a<<=1;	
		sbi(PORTA,4);
	}
}



void send_lcm(void)
{	
	uchar adr[4]={0x80,0x90,0x88,0x98};//各行显示的起始地址
	uchar d,d2;
	uchar *p;//指向数组的指针
	p=meumy[0];
	for(d=0;d<4;d++)
	{
		p=meumy[d];	            //指向各行
		wr_com(adr[d]);         //写入地址
		for(d2=0;d2<16;d2++)
		{
			if(*p==0)*p=' ';
		 	wr_date(*p);	    //写该行的数据
		 	p++;	            //指针移动
	 	}
	}
}

void clr_arry(void)
{
	uchar a,b;
	for (a=0;a<4;a++)
		for (b=0;b<17;b++)
			meumy[a][b]=' ';
}

void lcd_copy(void)
{
	clr_arry();
	uchar *p;
		p=meumy[0];	strcpy_P(p,line[0]); //复制程序空间源字符串到内存空间目标字符串,
		p=meumy[1];	strcpy_P(p,line[1]);
		p=meumy[2];	strcpy_P(p,line[2]);
		p=meumy[3];	strcpy_P(p,line[3]);
}

void star1(void)
{
	line[0]=PSTR("广西大学:xxxm/s");  //把字符串放入程序空间并返回其地址
	line[1]=PSTR("电气工程:xxxm/s");
	line[2]=PSTR("A:20 B:   C:    ");
	line[3]=PSTR("");
	lcd_copy();
	
	meumy[0][9]=(xdsd/100)%10+0x30;
	meumy[0][10]=(xdsd/10)%10+0x30;
	meumy[0][11]=(xdsd/1)%10+0x30;
	
	meumy[1][9]=(jdsd/100)%10+0x30;
	meumy[1][10]=(jdsd/10)%10+0x30;
	meumy[1][11]=(jdsd/1)%10+0x30;
	
	if(flg)
	{
		meumy[2][0]=' ';
		meumy[2][1]=' ';
		meumy[2][2]=' ';
		meumy[2][3]=' ';
	}

send_lcm();
}

⌨️ 快捷键说明

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