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

📄 ch452_lcd.c~

📁 键盘扫描及LED驱动芯片CH452的例子程序
💻 C~
📖 第 1 页 / 共 3 页
字号:
}


/*******************************************************************
函 数 名:ext_int0_isr
入口参数:
出口参数:
建立日期:2007年8月15日
修改日期:
函数作用:用于处理按键的中断服务程序。
说    明:
********************************************************************/ 
interrupt [EXT_INT0] void ext_int0_isr(void)
{       
        uchar key_press;
        
        postion=0;
        
        CH452_I2C_Write(CH452_GET_KEY);  		//发出获取键值命令
        key_press=CH452_I2C_Read(); 			//读出键值
        
        if(key_press==0xC0)						//0号按键
        {
          if(input_position==1)
                postion=0;
        }
        
        if(key_press==0xC1)						//1号按键
        {
          if((input_position==1)||(input_banjing==1))
                postion=1;
          else
          {
            switch (menu_statu)
            {
                case  100 :
                        menu_statu=110;
                        print_sub1_page();//显示主菜单1的子菜单
                        break;
                case  110 :
                        menu_statu=111;
                        print_sub1_1_page();//显示主菜单1子菜单1的子菜单或功能界面
                        break;
                case  111 :
                        //print_sub1_1_1_page();
                        break;
                case  120 :
                        menu_statu=121;
                        //print_sub1_2_0_page();
                        break;
                case  121 :
                        //print_sub1_2_1_page();
                        break;
                case  130 :
                        menu_statu=131;
                        //print_sub1_3_0_page();
                        break;
                case  131 :
                        //print_sub1_3_1_page();
                        break;
                case  140 :
                        menu_statu=141;
                        monitor=1;
                        LCD_Clear();//清屏
                        //print_sub4_1_0page();//显示主菜单4子菜单1的子菜单
                        break;
                case  141 :
                        //print_sub1_4_1_page();//显示主菜单1子菜单1子菜单1的子菜单
                        break;
            }
          }
        } 
        
        if(key_press==0xC2)						//2号按键
        {
          if((input_position==1)||(input_banjing==1))
                postion=2;
          else
          {
            switch (menu_statu)
            {
                case  100 :
                        menu_statu=120;
                        print_sub2_page();//显示主菜单2的子菜单
                        break;
                case  110 :
                        menu_statu=112;
                        print_sub1_2_page();//显示主菜单1子菜单2的子菜单或功能界面
                        break;
                case  112 :
                        //print_sub1_1_1_page();
                        break;
                case  120 :
                        menu_statu=122;
                        //print_sub1_1_1_page();
                        break;
                case  122 :
                        //print_sub1_1_1_page();
                        break;
                case  130 :
                        menu_statu=132;
                        //print_sub1_1_1_page();
                        break;
                case  132 :
                        //print_sub1_1_1_page();
                        break;
            }
          }
        }
        
        if(key_press==0xC3)						//3号按键
        {
          if((input_position==1)||(input_banjing==1))
                postion=3;
          else
          {
            switch (menu_statu)
            {
                case  100 :
                        menu_statu=130;
                        print_sub3_page();//显示主菜单3的子菜单
                        break;
                case  110 :
                        menu_statu=113;
                        //print_sub1_1_page();//显示主菜单1子菜单3的子菜单或功能界面
                        break;
                case  113 :
                        //print_sub1_1_1_page();
                        break;
                case  120 :
                        menu_statu=123;
                        //print_sub1_1_1_page();
                        break;
                case  123 :
                        //print_sub1_1_1_page();
                        break;
                case  130 :
                        menu_statu=133;
                        //print_sub1_1_1_page();
                        break;
                case  133 :
                        //print_sub1_1_1_page();
                        break;
            }
          }  
        }
        
        if(key_press==0xC8)						//4号按键
        {
          if((input_position==1)||(input_banjing==1))
                postion=4;
          else
          {
            switch (menu_statu)
            {
                case  100 :
                        menu_statu=140;
                        print_sub4_page();//显示主菜单4的子菜单
                        break;
            }
          }
        }
        
        if(key_press==0xC9)						//5号按键
        {
          if((input_position==1)||(input_banjing==1))
                postion=5;     
        }
         
        if(key_press==0xCA)						//6号按键
        {
          if((input_position==1)||(input_banjing==1))
                postion=6;     
        }
        
        if(key_press==0xCB)						//7号按键
        {
          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(uchar RW, uchar RS, uchar W_data)
{
    uint 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格式
    Set_CS();
    Write_8bits(S_ID);      //发送S_ID
    Write_8bits(H_data);    //发送H_data
    Write_8bits(L_data);    //发送L_data
    Clr_CS(); 
}


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

/*******************************************************************
函 数 名: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(uchar y, uchar x)  
{
    uchar 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(uchar *message)  
{
    uchar 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(uchar x, uchar y, flash uchar *Draw)
{
    uchar 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日
修改日期:
函数作用:绘图模式下的清屏
说    明:

⌨️ 快捷键说明

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