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

📄 my_vp12864.txt

📁 精电VP12864图形点阵的驱动,包括实现与CPU的接线图描述
💻 TXT
字号:
/*********************************************
This program was produced by the
CodeWizardAVR V1.23.8d Standard
Automatic Program Generator
?Copyright 1998-2003 HP InfoTech s.r.l.
http://www.hpinfotech.ro
e-mail:office@hpinfotech.ro

Project : 
Version : 
Date    : 2006-7-14
Author  : alan                            
Company :                                 
Comments: 


Chip type           : ATmega16
Program type        : Application
Clock frequency     : 8.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*********************************************/

/*--------------------------- 连线图   ------------------------------------------------
  | *MCU---ATmega16*  |  *MCU---ATmega16*  |   *MCU---ATmega16*  |  *MCU---ATmega16*
  | *DB0---PORTA.0*   |  *DB4---PORTA.4*   |   *WR----PORTB.0*   |  *RST----PORTB.4*
  | *DB1---PORTA.1*   |  *DB5---PORTA.5*   |   *RD----PORTB.1*
  | *DB2---PORTA.2*   |  *DB6---PORTA.6*   |   *CE----PORTB.2*
  | *DB3---PORTA.3*   |  *DB7---PORTA.7*   |   *CD----PORTB.3*
 注:  ATmega16: fos:8MHz
***---------------------------------------------------------------------------------*/

#include <mega16.h>
#include <String.h>
#include <delay.h>

#define uchar unsigned char
#define uint  unsigned int

#define  lcd_WR  PORTB.0          /*------ 写使能    "0" 有效  -------------*/
#define  lcd_RD  PORTB.1          /*------ 读使能    "0" 有效  -------------*/
#define  lcd_CE  PORTB.2          /*------ 片选使能  "0" 有效  -------------*/
#define  lcd_CD  PORTB.3          /*------ 选通信号  "0" 数据  "1"  指令  --*/
#define  lcd_RST PORTB.4          /*------ 复位使能  "0" 有效  -------------*/

#define  lcd_data_out   PORTA     /*------ 写数据  ------*/
#define  lcd_data_in    PINA      /*------ 读数据  ------*/

#define	 TXHOME	 0x40             /*------ 文本区首址 ----------------------*/
#define	 TXAREA	 0x41             /*------ 文本区宽度(字节数/行)----------*/
#define  GRHOME	 0x42             /*------ 图形区首址 ----------------------*/
#define	 GRAREA	 0x43             /*------ 图形区宽度(字节数/行)----------*/
#define	 OFFSET	 0x22             /*------ CGRAM偏置地址设置 ---------------*/	
#define	 ADPSET	 0x24             /*------ 地址指针位置	--------------------*/
#define	 AWRON	 0xb0             /*------ 自动写设置	--------------------*/
#define  AWROFF	 0xb2             /*------ 自动读、写结束  -----------------*/

uchar ACC;                        /*------  状态位  -----------------	*/
uchar  STA0;                      /*------  状态位 0  读写状态 ------	*/
uchar  STA1;                      /*------  状态位 1  读写状态 ------	*/
uchar  STA2;                      /*------  状态位 2  自动读状态 ----	*/
uchar  STA3;                      /*------  状态位 3  自动写状态 ----	*/

/*-------------         字符库           ----------------*/
/*********************************************************/
uchar flash TAB[]={
 	
 	 0x27,0x4F,0x4C,0x44,0x45,0x4E,0x00,0x30,0x41,0x4C,
	 0x4D,0x00,0x33,0x43,0x49,0x45,0x4E,0x43,0x45,0x00,
	
	 0x34,0x45,0x43,0x48,0x4E,0x4F,0x4C,0x4F,0x47,0x59,
	 0x00,0x23,0x4F,0x0E,0x0C,0x2C,0x54,0x44,0x00,0x00,
	
	 0x2E,0x4F,0x0E,0x13,0x11,0x00,0x2A,0x49,0x41,0x4E,
	 0x53,0x48,0x45,0x00,0x32,0x4F,0x41,0x44,0x13,0x00,
	
	 0x3A,0x48,0x41,0x4F,0x51,0x49,0x4E,0x47,0x00,0x30,
	 0x0E,0x32,0x0E,0x23,0x48,0x49,0x4E,0x41,0x00,0x00,
	
	 0x30,0x4F,0x53,0x54,0x43,0x4F,0x44,0x45,0x1A,0x00,
	 0x15,0x12,0x16,0x10,0x14,0x10,0x00,0x00,0x00,0x00,
	
	 0x34,0x25,0x2C,0x1A,0x00,0x18,0x16,0x0D,0x17,0x15,
	 0x18,0x0D,0x12,0x12,0x12,0x13,0x11,0x19,0x16,0x00,
	
	 0x57,0x57,0x57,0x0E,0x47,0x50,0x54,0x0E,0x43,0x4F,
	 0x4D,0x0E,0x43,0x4E,0x00,0x00,0x00,0x00,0x00,0x00,
	
	 0x25,0x3F,0x4D,0x41,0x49,0x4C,0x1A,0x4A,0x4D,0x47,
	 0x50,0x43,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	
	 0x20,0x50,0x55,0x0E,0x5A,0x48,0x41,0x4F,0x51,0x49,
	 0x4E,0x47,0x0E,0x47,0x44,0x0E,0x43,0x4E,0x00,0x00};
/*********************************************************/   

/*------------            读状态位       ----------------*/
/*********************************************************/
uchar read_port()
{
	DDRA = 0xff;                      /*-----   PORTA定义为输出  -----*/
	lcd_data_out = 0xff;
	DDRA = 0x00;			  /*-----   PORTA定义为输入  -----*/
	ACC  = 0xff;
	lcd_CD = 1;
	lcd_WR = 1;
	lcd_RD = 0;
	//_nop_(); 
	delay_us(2);
	ACC &= lcd_data_in;
	lcd_RD = 1;
	STA0 = ACC & 0x01;		  /*-----   读状态字 位 0  -----*/
	STA1 = (ACC & 0x02) >> 1;  	  /*-----   读状态字 位 1  -----*/
	STA2 = (ACC & 0x04) >> 2; 	  /*-----   读状态字 位 2  -----*/
	STA3 = (ACC & 0x08) >> 3;    	  /*-----   读状态字 位 3  -----*/
	DDRA = 0xff;
	return(ACC);
}
/*********************************************************/

/*----------------    自动写数据          ---------------*/
/*********************************************************/
void auto_write_data(uchar data)
{
	do{
	    	read_port();
           }
	while(STA3 == 0);
	DDRA = 0xff;
	lcd_CD = 0;
	lcd_WR = 1;
	lcd_RD = 0;
	lcd_data_out = data;
	lcd_RD = 1;
}
/*********************************************************/

/*---------------      写命令           -----------------*/
/*********************************************************/
void write_command(uchar command)
{
	do{
		read_port();
	   }
	while(STA0 & STA1 ==0);
	lcd_CD = 1;
	lcd_WR = 1;
	lcd_RD = 0;
	lcd_data_out = command;
	lcd_RD = 1;
} 
/*********************************************************/

/*-----------------     写一个数据       ----------------*/
/*********************************************************/
void write_one_data(uchar data)
{
	do{
		read_port();
	   }
	while(STA0 & STA1 ==0);
	lcd_CD = 0;
	lcd_WR = 1;
	lcd_RD = 0;
	lcd_data_out = data;
	lcd_RD = 1;
}
/*********************************************************/

/*-----------     写两个数据  ---  一个命令    ----------*/
/*********************************************************/
void ComTwoData(uchar dat_l,uchar dat_h,uchar Com)
{
	write_one_data(dat_l);
	write_one_data(dat_h);
        write_command(Com);
}
/*********************************************************/

/*-----------------   液晶初始化       ------------------*/
/*********************************************************/
void lcd_init()
{
	ComTwoData(0x00,0x00,TXHOME);       /*--  文本首址设置: 0x0000   -----*/ 
	ComTwoData(0x10,0x00,TXAREA);       /*--  文本宽度 : 16字节 / 行 -----*/
	ComTwoData(0x08,0x00,GRHOME);       /*--  图形首址设置: 0x0008   -----*/
	ComTwoData(0x10,0x00,GRAREA);       /*--  图形宽度 : 16字节 / 行 -----*/
	write_command(0x81);                /*--  "异或"合成    -------------*/ 
	ComTwoData(0x02,0x00,OFFSET);       /*--  CGRAM偏置地址 : 0x0020 -----*/
	write_command(0x9c);                /*--  文本 ,图形显示开   ---------*/
}  
/*********************************************************/

/*----------------     全屏清除          ----------------*/
/*********************************************************/
void  full_clr(uchar ad_l,uchar ad_h, uint count,uchar data)
{
	uchar i;
	ComTwoData(ad_l,ad_h,ADPSET);       /*-------  设置地址      -------*/
	write_command(AWRON);               /*-------  开自动写      -------*/
	for(i = 0; i < count; i++)
	{
		auto_write_data(data);      /*-----  data 设置清屏状态 -----*/
	}
	write_command(AWROFF);              /*------  自动写结束     -------*/
	
}
/*********************************************************/

/*----------------     显示CGROM字符    -----------------*/
/*********************************************************/
void disp_CGROM(uchar ad_l,uchar ad_h,uint count ,uchar flash *p)
{
	uint i;
	ComTwoData(ad_l,ad_h,ADPSET);        /*-------  设置地址       -------*/
	write_command(AWRON);                /*-------  开自动写       -------*/
	for(i = 0; i < count; i++)
	{
		auto_write_data(p[i]);        /*------  写字符    ------------*/
	}
	write_command(AWROFF);                /*------  自动写结束     -------*/
}
/*********************************************************/

/*----------------     显示函数        ------------------*/
/*********************************************************/
void lcd_disp()
{
	full_clr(0,0,128,0);
	delay_ms(500);
	disp_CGROM(0,0,128,TAB);
	delay_ms(800);
	delay_ms(800);
	delay_ms(800);
}
/*********************************************************/
void main(void)
{

PORTA = 0x00;
DDRA  = 0xff;

PORTB = 0x00;
DDRB  = 0xFF;

PORTC = 0x00;
DDRC  = 0x00;

PORTD = 0x00;
DDRD  = 0x00;

TCCR0 = 0x00;
TCNT0 = 0x00;
OCR0  = 0x00;

TCCR1A = 0x00;
TCCR1B = 0x00;
TCNT1H = 0x00;
TCNT1L = 0x00;
OCR1AH = 0x00;
OCR1AL = 0x00;
OCR1BH = 0x00;
OCR1BL = 0x00;

ASSR   = 0x00;
TCCR2  = 0x00;
TCNT2  = 0x00;
OCR2   = 0x00;

MCUCR  = 0x00;
MCUCSR = 0x00;

TIMSK  = 0x00;

ACSR   = 0x80;
SFIOR  = 0x00;

//SP = 0x5f;
lcd_RST = 0;
delay_us(2);
lcd_RST = 1; 
lcd_CE  = 0;
lcd_WR  = 1;
lcd_RD  = 1;
lcd_init();
while (1)
      {
            //lcd_disp();
            //full_clr(0,0,128,0xff); 
            ComTwoData(0x01,0x00,0x21); 
            ComTwoData(0x01,0x00,0x24);
            ComTwoData(0x01,0x00,0xa6);
            //write_command(0xa6);
            
      };
}

⌨️ 快捷键说明

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