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

📄 ch452_lcd.i

📁 键盘扫描及LED驱动芯片CH452的例子程序
💻 I
📖 第 1 页 / 共 4 页
字号:
说    明:当用虚拟I2C总线读或写时首先调用这个函数。
********************************************************************/
void CH452_I2C_Start(void)
{                                

        CH452_SDA_PORT |= CH452_SDA_PINNum;     //SDA 输出高电平
        CH452_SCL_PORT |= CH452_SCL_PINNum;     //SCL 输出高电平

        delay_us(5); 
        
        CH452_SDA_PORT &= ~CH452_SDA_PINNum;	//SDA 输出低电平,产生启动信号;
        delay_us(5); 
   
        CH452_SCL_PORT &= ~CH452_SCL_PINNum; 	//SCL 输出低电平,启动完成;
        delay_us(5); 
}


/*******************************************************************
函 数 名:CH452_I2C_Stop
入口参数:无
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:CH452虚拟I2C总线结束部分代码。
说    明:当用虚拟I2C总线读或写完成时调用这个函数。
********************************************************************/
void CH452_I2C_Stop(void)
{
        CH452_SDA_PORT &= ~CH452_SDA_PINNum;	//SDA置低
        delay_us(5);
        CH452_SCL_PORT |= CH452_SCL_PINNum;		//SCL恢复高电平
        delay_us(5);
        CH452_SDA_PORT |= CH452_SDA_PINNum;		//SDA恢复高电平
        delay_us(5);
}
  

/*******************************************************************
函 数 名:CH452_I2C_WrOneByte
入口参数:c ------ 要写入的一个字节数据。
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:本函数用于虚拟I2C总线向外围器件写入一个字节操作。
说    明:
********************************************************************/
void CH452_I2C_WrOneByte(unsigned char c)
{                                        
        unsigned char i;
        for(i=0;i<8;i++)										//输出8位数据
        {
                if(c&0x80)
                        CH452_SDA_PORT |= CH452_SDA_PINNum;		//数据为1,置高SDA
                else
                        CH452_SDA_PORT &= ~CH452_SDA_PINNum;	//数据为0,置低SDA
                CH452_SCL_PORT |= CH452_SCL_PINNum;				//向SCL 输出高电平脉冲
                c<<=1;											//准备输出下一位
                delay_us(5);
                delay_us(5);
                CH452_SCL_PORT &= ~CH452_SCL_PINNum;
                delay_us(5);
                delay_us(5);
        }
        delay_us(5);
        CH452_SDA_PORT |= CH452_SDA_PINNum;		//将SDA 恢复为高电平
        CH452_SCL_PORT |= CH452_SCL_PINNum;		//将SCL 恢复为高电平
        delay_us(5);
        delay_us(5);
        CH452_SCL_PORT &= ~CH452_SCL_PINNum;  	//SCL置低
        delay_us(5);
        delay_us(5);
}


/*******************************************************************
函 数 名:CH452_I2C_Write
入口参数:command ------ 要写入的命令或数据。
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:本函数用于虚拟I2C总线向外围器件写入一个命令或数据操作。
说    明:
********************************************************************/
void CH452_I2C_Write(unsigned int  command)
{
        CH452_I2C_Start();										//开始向I2C总线输出
        CH452_I2C_WrOneByte(((unsigned char)(command>>7)&0x3E)|0x60);	//输出标志符
        CH452_I2C_WrOneByte((unsigned char)command);					//输出命令字节
        CH452_I2C_Stop();										//命令输出结束
}
 

/*******************************************************************
函 数 名:CH452_I2C_RdOneByte
入口参数:
出口参数:读到的数据。
建立日期:2007年8月15日
修改日期:
函数作用:本函数用于从虚拟I2C总线读入一个字节操作。
说    明:
********************************************************************/
unsigned char CH452_I2C_RdOneByte(void)
{
        unsigned char c,i;
        c=0;
        for(i=0;i<8;i++)
        {
                CH452_SDA_PORT |= CH452_SDA_PINNum;		//SDA置高
                CH452_SCL_PORT |= CH452_SCL_PINNum;		//SCL置高
                delay_us(1);
                delay_us(1);
                c<<=1;     
                CH452_SDA_DDR &= ~CH452_SDA_PINNum;		//SDA为输入
                if(PINC&CH452_SDA_PINNum)c|=0x01;		//如果输入的字符是1,c的当前位置1
                CH452_SCL_PORT &= ~CH452_SCL_PINNum;	//否则置0
                delay_us(1);
                delay_us(1);
        }
        delay_us(1);
        CH452_SDA_PORT |= CH452_SDA_PINNum;				// 发出无效应答
        CH452_SCL_PORT |= CH452_SCL_PINNum;
        delay_us(1);
        delay_us(1);
        CH452_SDA_DDR |= CH452_SDA_PINNum;
        return(c);
}


/*******************************************************************
函 数 名:CH452_I2C_Read
入口参数:
出口参数:读到的数据。
建立日期:2007年8月15日
修改日期:
函数作用:本函数用于从虚拟I2C总线读入数据操作。
说    明:
********************************************************************/
unsigned char CH452_I2C_Read()
{
        unsigned char key;	
        CH452_I2C_Start();				//开始向I2C总线输出
        CH452_I2C_WrOneByte(0x6f);		//输出标志符
        key=CH452_I2C_RdOneByte();		//从总线读取一个字节
        CH452_I2C_Stop();				//读操作完成	
        return(key);					//返回键值
}


/*******************************************************************
函 数 名:CH452_Display_Init
入口参数:
出口参数:
建立日期:2007年8月15日
修改日期:
函数作用: 数码管显示的初始化。
说    明:
********************************************************************/                
void CH452_Display_Init()
{
        CH452_SDA_DDR |= CH452_SDA_PINNum;
        CH452_SCL_DDR |= CH452_SCL_PINNum;
        CH452_INT_DDR &= ~CH452_INT_PINNum;
        CH452_INT_PORT |= CH452_INT_PINNum;
        CH452_I2C_Write(CH452_RESET);			//复位显示
        delay_us(30);
        CH452_I2C_Write(CH452_BCD);   			//设置显示方式
        CH452_I2C_Write(CH452_SYSON2);          //打开显示和键盘
        //CH452_I2C_Write(CH452_TWINKLE|0xff); 
        CH452_I2C_Write(0x0909);
}


/*******************************************************************
函 数 名:ext_int0_isr
入口参数:
出口参数:
建立日期:2007年8月15日
修改日期:
函数作用:用于处理按键的中断服务程序。
说    明:
********************************************************************/ 
interrupt [2] void ext_int0_isr(void)
{       
        unsigned char 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号按键
        {

⌨️ 快捷键说明

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