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

📄 12864.c

📁 MSP430+IR+LCD显示读出的键值
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <msp430x14x.h>
#include  "cry12864.h"
#define uchar    unsigned char
#define uint   unsigned int
#define LCD_DataIn    P2DIR=0x00    //数据口方向设置为输入
#define LCD_DataOut   P2DIR=0xff    //数据口方向设置为输出
#define LCD2MCU_Data  P2IN
#define MCU2LCD_Data  P2OUT
#define LCD_CMDOut    P6DIR|=0xff     //P6口的三位设置为输出
#define LCD_RS_H      P6OUT|=BIT3      //P6.3
#define LCD_RS_L      P6OUT&=~BIT3     //P6.3
#define LCD_RW_H      P6OUT|=BIT4      //P6.4
#define LCD_RW_L      P6OUT&=~BIT4     //P6.4
#define LCD_EN_H      P6OUT|=BIT5      //P6.5
#define LCD_EN_L      P6OUT&=~BIT5    //P6.5

/*******************************************
函数名称:Delay_1ms
功    能:延时约1ms的时间
参    数:无
返回值  :无
********************************************/
void Delay_1ms(void)
{
	uchar i;
    
	for(i = 150;i > 0;i--)  _NOP();
} 
/*******************************************
函数名称:Delay_Nms
功    能:延时N个1ms的时间
参    数:n--延时长度
返回值  :无
********************************************/
void Delay_Nms(uint n)
{
    uint i;
    
    for(i = n;i > 0;i--)    
      Delay_1ms();
}
/*******************************************
函数名称:Write_Cmd
功    能:向液晶中写控制命令
参    数:cmd--控制命令
返回值  :无
********************************************/
void Write_Cmd(uchar cmd)
{
    uchar lcdtemp = 0;
			
    LCD_RS_L;
    LCD_RW_H;
    LCD_DataIn;  
    do                       //判忙
    {    
        LCD_EN_H;
       	_NOP();					
       	lcdtemp = LCD2MCU_Data; 
       	LCD_EN_L;
        
    }
    while(lcdtemp & 0x80); 
    
    LCD_DataOut;    
    LCD_RW_L;  		
    MCU2LCD_Data = cmd; 
    LCD_EN_H;
    _NOP();						  			
    LCD_EN_L;
//    Delay_1ms();
}
/*******************************************
函数名称:Write_Data
功    能:向液晶中写显示数据
参    数:dat--显示数据
返回值  :无
********************************************/
void  Write_Data(uchar dat)
{
    uchar lcdtemp = 0;   
        
    LCD_RS_L;
    LCD_RW_H;  
    LCD_DataIn;   
    do                       //判忙
    {    
        LCD_EN_H;
        _NOP();						
        lcdtemp = LCD2MCU_Data; 
        LCD_EN_L;      
    }
    while(lcdtemp & 0x80);  
    
    LCD_DataOut; 
    LCD_RS_H;
    LCD_RW_L;  
        
    MCU2LCD_Data = dat;
    LCD_EN_H;
    _NOP();
    LCD_EN_L;
//    Delay_1ms();
}  

/**************************************************
函数名称:lcd_read_data
功    能:读取12864中一个字节的数据
参    数:无
返回值  :显示的数据
**************************************************/
unsigned char lcd_read_data(void)
{
    unsigned char Data_Temp;
    unsigned char lcdtemp;
    LCD_RS_L;
    LCD_RW_H;
    LCD_DataIn;
    do
    {
        LCD_EN_H;
        _NOP();
        lcdtemp = LCD2MCU_Data;
        LCD_EN_L;
    }
    while(lcdtemp&0x80);
    
    LCD_RS_H;
    LCD_RW_H;
    LCD_DataIn;
    
    LCD_EN_H;
    _NOP();
    Data_Temp = LCD2MCU_Data;
    LCD_EN_L;
    
    return Data_Temp;
}

/*******************************************
函数名称:Ini_Lcd
功    能:初始化液晶模块
参    数:无
返回值  :无
********************************************/
void Ini_Lcd(void)
{                  
    LCD_CMDOut;    //液晶控制端口设置为输出
    
   // Delay_Nms(500);
    Write_Cmd(0x30);   //基本指令集
    Write_Cmd(0x02);   // 地址归位
    Write_Cmd(0x0c);   //整体显示打开,游标关闭
    Write_Cmd(0x01);   //清除显示
    Write_Cmd(0x06);   //游标右移
    Write_Cmd(0x80);   //设定显示的起始地址
}
/*******************************************
函数名称:Clear_GDRAM
功    能:清除液晶GDRAM中的随机数据
参    数:无
返回值  :无
********************************************/
void Clear_GDRAM(void)
{
    uchar i,j,k;
    
	Write_Cmd(0x34);        //打开扩展指令集
	i = 0x80;            
	for(j = 0;j < 32;j++)
	{
        Write_Cmd(i++);
        Write_Cmd(0x80);
  		for(k = 0;k < 16;k++)
  		{
  		    Write_Data(0x00);
  		}
	}
	i = 0x80;
 	for(j = 0;j < 32;j++)
	{
 	    Write_Cmd(i++);
        Write_Cmd(0x88);	   
  		for(k = 0;k < 16;k++)
  		{
   		    Write_Data(0x00);
   		} 
	}   
	Write_Cmd(0x30);        //回到基本指令集
}
/*******************************************
函数名称:Draw_TX
功    能:显示一个16*16大小的图形
参    数:Yaddr--Y地址
          Xaddr--X地址
          dp--指向图形数据存放地址的指针
返回值  :无
********************************************/
void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp) 
{
    uchar j;
    uchar k=0;
 
   // Write_Cmd(0x01);  //清屏,只能清除DDRAM
    Write_Cmd(0x34);  //使用扩展指令集,关闭绘图显示
    for(j=0;j<16;j++)
    {
        Write_Cmd(Yaddr++);       //Y地址
        Write_Cmd(Xaddr);    //X地址
  	Write_Data(dp[k++]);  
  	Write_Data(dp[k++]);
    }
    Write_Cmd(0x36);  //打开绘图显示
  //  Write_Cmd(0x30);  //回到基本指令集模式
}
/*******************************************
函数名称:Disp_YGHZ
功    能:控制液晶任意位置显示一个汉字
参    数:addr--显示位置的首地址
          ptH--指向显示汉字的编码高8位
          ptL--指向显示汉字的编码低8位
返回值  :无
********************************************/
void Disp_YGHZ(uchar addr,uchar ptH,uchar ptL)
{	
    Write_Cmd(addr); 
    Write_Data(ptH); 
    Write_Data(ptL);
} 
/************************************
    显示小数点
***********************************************/
void Disp_DIAN(uchar addr,uchar data)
{	
    Write_Cmd(addr); 
    Write_Data(data); 
    
} 
/*******************************************
函数名称:Disp_HZ
功    能:控制液晶显示汉字
参    数:addr--显示位置的首地址
          pt--指向显示数据的指针
          num--显示字符个数
返回值  :无
********************************************/
void Disp_HZ(uchar addr,const uchar * pt,uchar num)
{
    uchar i;
		
    Write_Cmd(addr); 
   	for(i = 0;i < (num*2);i++) 
        Write_Data(*(pt++)); 
} 
/*****************************************
     把某一行写入空白
******************************************/
void Disp_white(uchar addr)
{   uchar i;
		
    Write_Cmd(addr); 
   	for(i = 0;i < 16;i++) 
        Write_Data(0x20); 


}
/*******************************************
函数名称:Draw_PM
功    能:在整个液晶屏幕上画图
参    数:无
返回值  :无
********************************************/
void Draw_PM(const uchar *ptr)
{
    uchar i,j,k;
    
	Write_Cmd(0x34);        //打开扩展指令集
	i = 0x80;            
	for(j = 0;j < 32;j++)
	{
        Write_Cmd(i++);
        Write_Cmd(0x80);
  		for(k = 0;k < 16;k++)
  		{
  		    Write_Data(*ptr++);
  		}
	}
	i = 0x80;
 	for(j = 0;j < 32;j++)
	{
 	    Write_Cmd(i++);
        Write_Cmd(0x88);	   
  		for(k = 0;k < 16;k++)
  		{
   		    Write_Data(*ptr++);
   		} 
	}  
    Write_Cmd(0x36);        //打开绘图显示
	Write_Cmd(0x30);        //回到基本指令集
}


/**************************************************
函数名称:lcd_setxy
功    能:设置显示位置    
参    数:X(1~16),Y(1~4)
返回值  :无
**************************************************/
void lcd_setxy(unsigned char x,unsigned char y)
{
    switch(y)
    {
        case 1:
        Write_Cmd(0x7F+x);break;
        case 2:
       Write_Cmd(0x8F+x);break;
        case 3:
       Write_Cmd(0x87+x);break;
        case 4:
       Write_Cmd(0x97+x);break;
        default:break;
    }
}

/**************************************************/
/**************************************************
函数名称:display_line
功    能:在指定位置显示字符串    
参    数:坐标x y 字符串str
返回值  :无
**************************************************/
void display_line(unsigned char x,unsigned char y,const char* str)
{
    unsigned char LCD_temp;
    lcd_setxy(x,y);
    LCD_temp=*str;
    while(LCD_temp != 0x00)
    {
        Write_Data(LCD_temp);
        LCD_temp=*(++str);
    }
}
/**************************************************/
/**************************************************
函数名称:my_abs
功    能:求绝对值   调用math。h中的abs总是有警告 于是自己写
参    数:a
返回值  :无
**************************************************/
unsigned int my_abs(int a)
{
    if(a<0)
        a=-a;
    return a;
}

/**************************************************/

/**************************************************
函数名称:clr_screen
功    能:清除显示    
参    数:无
返回值  :无
**************************************************/
void clr_screen(void)
{
   Write_Cmd(0x01);
    //delay_ms(15);
}
/**************************************************/

/**************************************************
函数名称:set_white
功    能:任意位置反白    
参    数:行数y 起始x 结束end_x  模式clear 0反白 1复原
返回值  :无
**************************************************/

⌨️ 快捷键说明

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