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

📄 lcd.c

📁 一个关于AVR单片机的例程
💻 C
字号:
// Project :12864 LCD Display
// Writer : you hu
// ICC-AVR application builder :2005-7-12 
// Target : M128
// Crystal: 8.0000Mhz
// Description : display char  

#include <iom128v.h>
#include <macros.h>
#include "char.h"
#include "lcd.h"
typedef unsigned char uchar;
typedef unsigned int uint;

unsigned char flag;

void port_init(void)
{
 //访问外部ram的总线端口
 PORTA = 0x00;
 DDRA  = 0x00; 
 PORTC = 0x00; 
 DDRC  = 0xFF;
}
	  
void check_busy(uchar cs)               
{ 
  uchar temp;
  while(temp)          
   { 
     if(cs)
        temp=R_staus&0X80;               //将忙状态读到temp中进行确定
	 else
	    temp=L_staus&0X80;
	}
}

void LCD_Clean(void)
{
  unsigned char page=0,y;                //定义表示页和列的局部变量
  
  for(page=0;page<8;page++)
     {
	                                     //LCD左半屏的操作
	   check_busy(0);
	   L_command=LCD_PAGE+page;          //设置LCD左半屏页地址
	   check_busy(0);
	   L_command=LCD_Y; 
	                                     //LCD右半屏的操作
	  check_busy(1);
	   R_command=LCD_PAGE+page;          //设置LCD右半屏页地址
	  check_busy(1);
	   R_command=LCD_Y;
	   
	   for(y=0;y<64;y++)
	      {
            L_data=0x00;
			R_data=0x00;
		  }  
	 }
}
                                         
void LCD_Init(void)                     //LCD初始化子函数
{
  /*首先关闭12864的显示*/
  check_busy(0);                        //LCD左半屏正在工作,等待......
  L_command=LCD_OFF;                    //先关闭LCD左半屏的显示
  check_busy(1);                        //LCD右半屏正在工作,等待......
  R_command=LCD_OFF;                    //先关闭LCD右半屏的显示
  
  /*开启12864的显示*/
  check_busy(0);
  L_command=LCD_ON;                     //打开LCD左半屏的显示
  check_busy(1);
  R_command=LCD_ON;                     //打开LCD右半屏的显示
  
  /*设置LCD显示的起始行*/
  check_busy(0);
  L_command=LCD_X;                      //LCD左半屏起始行为0
  check_busy(1);
  R_command=LCD_X;                      //LCD右半屏起始行为0
}

void init_devices(void)
{
 XMCRA = 0x00;                          //外部存储器控制
 XMCRB = (1<<XMM2)|(1<<XMM1)|(1<<XMM0); //外存储高位地址屏蔽,释放端口C
// mapping_init();
 port_init();
 MCUCR = 0x80;                          //外部SRAM使能
}

void write_Bchar(unsigned char cs,unsigned char n)   // 大写字母显示函数
{
  unsigned char i;
  for(i=0;i<6;i++)
   {
    if(cs) R_data=big_char[n][i];             //右半屏显示
	else   L_data=big_char[n][i];             //左半屏显示
   }  
 }  	
 
 void write_Schar(unsigned char cs,unsigned char n)  // 小写字母显示函数
{
  unsigned char i;
  for(i=0;i<6;i++)
   {
    if(cs) R_data=small_char[n][i];            //右半屏显示
	else   L_data=small_char[n][i];            //左半屏显示
   }  
 }
 
 void write_Nchar(unsigned char cs,unsigned char n)  //数字显示函数
{
  unsigned char i;
  for(i=0;i<6;i++)
   {
    if(cs) R_data=num[n][i];                  //右半屏显示
	else   L_data=num[n][i];                  //左半屏显示
   }  
 }
     
 void display_char(void)                    //字符显示函数
{  
  unsigned char i;
  static unsigned char adder=0;
  write_Bchar(0, 24);
  write_Schar(0, 14);
  write_Schar(0, 20);
  for(i=0;i<4;i++){L_data=0x00;}
  write_Bchar(0, 7);
  write_Schar(0, 20);
  adder++;
  if(adder>15){flag=1;adder=0;}
}


void main(void)
{
  unsigned char i;
  init_devices();
  LCD_Clean();
  LCD_Init();
  display_char(); 
}

⌨️ 快捷键说明

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