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

📄 ch452_lcd.i

📁 键盘扫描及LED驱动芯片CH452的例子程序
💻 I
📖 第 1 页 / 共 4 页
字号:
          if((input_position==1)||(input_banjing==1))
                postion=7;    
        }
        
        if(key_press==0xD0)						//8号按键
        {
           if((input_position==1)||(input_banjing==1))
                postion=8; 
        }
        
        if(key_press==0xD1)						//9号按键
        {
          if((input_position==1)||(input_banjing==1))
                postion=9;    
        }
        
        if(key_press==0xD2)						//10号按键
        {
        
        }
        
        if(key_press==0xD3)						//11号按键
        {

        }
        
        if(key_press==0xD8)						//12号按键
        { 
                
        }
        
        if(key_press==0xD9)						//13号按键     //设定保存键
        {     
          save();
        }
        
        if(key_press==0xDA)						//14号按键      //清屏键
        {
           W_1byte(0,0,0x0C); //关光标
           LCD_Clear();//清屏
           
           //LCD_set_xy(0,0);   
           
           input_position=0;           
        }
        
        if(key_press==0xDB)						//15号按键     //返回主菜单
        {
           monitor=0;
           input_position=0;
           W_1byte(0,0,0x0C); //关光标   
           print_root_page(); 
        }
        
        input();
}


/*******************************************************************
函 数 名:W_1byte
入口参数:RW、RS、W_data
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:写一个字节的数据到12864液晶,包括指令和数据
说    明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
   (一般RW都设为0,即只向液晶写数据,不读数据)
          RS=1,写入的是数据;RS=0,写入的是指令;
    一般模式:RW=0,RS=1;写数据
              RW=0,RS=0;写指令
********************************************************************/
void W_1byte(unsigned char RW, unsigned char RS, unsigned char W_data)
{
    unsigned int  H_data,L_data,S_ID = 0xf8;  //11111RWRS0
    if(RW == 0)
    {
        S_ID &=~ 0x04;
    }
    else     //if(RW==1)
    {
        S_ID |= 0X04;
    }
    if(RS == 0)
    {
        S_ID &=~ 0x02;
    }
    else     //if(RS==1)
    {
        S_ID |= 0X02;
    }
    H_data = W_data;
    H_data &= 0xf0;         //屏蔽低4位的数据    //为什么要这样,见SG12864J501C2.pdf第18页
    L_data = W_data;        //xxxx0000格式
    L_data &= 0x0f;         //屏蔽高4位的数据
    L_data <<= 4;           //xxxx0000格式
    DDRB.0=1;PORTB.0=1;
    Write_8bits(S_ID);      //发送S_ID
    Write_8bits(H_data);    //发送H_data
    Write_8bits(L_data);    //发送L_data
    DDRB.0=1;PORTB.0=0; 
}


/********************************************************************
函 数 名:Write_8bits
入口参数:W_bits
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:负责串行输出8个bit位
说    明:
********************************************************************/
void Write_8bits(unsigned int  W_bits)
{
    unsigned int  i,Temp_data;
    for(i=0; i<8; i++)
    {  
        Temp_data = W_bits;
        Temp_data <<= i;
        if((Temp_data&0x80)==0)  //bit7 is zero
        {
            DDRB.1=1;PORTB.1=0;
            #asm("nop");
            DDRB.2=1;PORTB.2=1;
            #asm("nop");
            #asm("nop");
            DDRB.2=1;PORTB.2=0;
            #asm("nop");
            DDRB.1=1;PORTB.1=0;
        }
        else         //bit7 is one
        {
            DDRB.1=1;PORTB.1=1;
            #asm("nop");
            DDRB.2=1;PORTB.2=1;
            #asm("nop");
            #asm("nop");
            DDRB.2=1;PORTB.2=0;
            #asm("nop");
            DDRB.1=1;PORTB.1=0;
        } 
    }
}
   

/*******************************************************************
函 数 名:LCD_Init
入口参数:无
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:液晶初始化
说    明:
********************************************************************/
void LCD_Init(void)
{
    W_1byte(0,0,0x30);  //功能设置 8位数据,基本指令
    Delay(2);
  
    W_1byte(0,0,0x0C);  //显示状态 ON,游标OFF,反白OFF
    Delay(2);
  
    W_1byte(0,0,0x01);  //清除显示
    Delay(2);
 
    W_1byte(0,0,0x02);  //地址归位
    Delay(2);
 
    W_1byte(0,0,0x80);  //设置DDRAM地址
    Delay(2);   
} 


/********************************************************************
函 数 名:LCD_set_xy
入口参数:X:0-3     Y:0-15 
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:写地址
说    明:y为字体顶行位置,x为字体的列位置 ,
********************************************************************/
void LCD_set_xy(unsigned char y, unsigned char x)  
{
    unsigned char address;    
    switch(y)
	{
	    case 0: address = 0x80 + x; break;
		case 1: address = 0x90 + x; break;
		case 2: address = 0x88 + x; break;
		case 3: address = 0x98 + x; break;
		default: break;
	}
    W_1byte(0,0,address);
}

 
/********************************************************************
函 数 名:LCD_Display
入口参数:*message
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:在LCD上显示*message所指向的内容
说    明:
********************************************************************/
void LCD_Display(unsigned char *message)  
{
    unsigned char i = 0;
    for(i=0;message[i]!='\0';i++)
    {
        W_1byte(0,1,message[i]);
    }
}
 

/*******************************************************************
函 数 名:LCD_Clear
入口参数:无
出口参数:无
建立日期:2007年8月17日
修改日期:
函数作用:清屏
说    明:
********************************************************************/
void LCD_Clear(void)
{
    #asm("nop");
    W_1byte(0,0,0x01);
    #asm("nop");
} 


/********************************************************************
函 数 名:Draw_Pic
入口参数:x, y, *Draw
出口参数:无
建立日期:2007年8月18日
修改日期:
函数作用:在LCD上(x,y)处开始显示*Draw所指向的内容
说    明:
********************************************************************/
void Draw_Pic(unsigned char x, unsigned char y, flash unsigned char *Draw)
{
    unsigned char i, j, temp_x, temp_y;
    
    W_1byte(0,0,0x34);  //8BIT控制界面,扩充指令集,,绘图显示OFF
    
    temp_x = x;
    temp_y = y;
    temp_x |= 0x80;
    temp_y |= 0x80;
    for(i=0;i<32;i++ )
    {
        W_1byte(0,0,temp_y++);//设置绘图区的Y地址坐标
        W_1byte(0,0,temp_x);//设置绘图区的X地址坐标
  
        for(j=0;j<16;j++)
        {
            W_1byte(0,1,*Draw);
            Draw++;
        }
    }
    temp_x = 0x88;
    temp_y = 0x80;
    j = 0;
    for(;i<64;i++ )
    {
        W_1byte(0,0,temp_y++);//设置绘图区的Y地址坐标
        W_1byte(0,0,temp_x);//设置绘图区的X地址坐标
        for(j=0;j<16;j++)
        {
            W_1byte(0,1,*Draw);
            Draw++;
        }
    } 
    W_1byte(0,0,0x36);//8BIT控制界面,扩充指令集,,绘图显示OFF
}


/********************************************************************
函 数 名:Draw_Pic_Clear
入口参数:无
出口参数:无
建立日期:2007年8月18日
修改日期:
函数作用:绘图模式下的清屏
说    明:
********************************************************************/
void Draw_Pic_Clear(void)
{
    unsigned char i, j, temp_x, temp_y;
    
    W_1byte(0,0,0x34);  //8BIT控制界面,扩充指令集,,绘图显示OFF
    
    temp_x = 0x80;
    temp_y = 0x80;
    for(i=0;i<32;i++ )
    {
        W_1byte(0,0,temp_y++);//设置绘图区的Y地址坐标
        W_1byte(0,0,temp_x);//设置绘图区的X地址坐标
  
        for(j=0;j<16;j++)
        {
            W_1byte(0,1,0x00);
        }
    }
    temp_x = 0x88;
    temp_y = 0x80;
    j = 0;
    for(;i<64;i++ )
    {
        W_1byte(0,0,temp_y++);//设置绘图区的Y地址坐标
        W_1byte(0,0,temp_x);//设置绘图区的X地址坐标
        for(j=0;j<16;j++)
        {
            W_1byte(0,1,0x00);
        }
    } 
    W_1byte(0,0,0x36);//8BIT控制界面,扩充指令集,,绘图显示OFF
}


/********************************************************************
函 数 名:Draw_Pic_Logo
入口参数:*Draw
出口参数:无
建立日期:2007年8月18日
修改日期:
函数作用:显示启动画面
说    明:
********************************************************************/
void Draw_Pic_Logo(flash unsigned char *Draw)
{
    unsigned char i, j, temp_x, temp_y;
 
    W_1byte(0,0,0x34);  //8BIT控制界面,扩充指令集,,绘图显示OFF
 
    temp_x = 0x80;
    temp_y = 0x80;
    for(i=0;i<32;i++ )
    {
        W_1byte(0,0,temp_y++);//设置绘图区的Y地址坐标
        W_1byte(0,0,temp_x);//设置绘图区的X地址坐标
  
        for(j=0;j<16;j++)
        {
            W_1byte(0,1,*Draw);
            Draw++;
        }
    } 
    W_1byte(0,0,0x36);//8BIT控制界面,扩充指令集,,绘图显示OFF
}


/********************************************************************
函 数 名:Draw_Pic_LogoBar
入口参数:无
出口参数:无
建立日期:2007年8月18日
修改日期:
函数作用:显示进度条
说    明:
********************************************************************/
void Draw_Pic_LogoBar(void)
{

⌨️ 快捷键说明

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