📄 ch452_lcd.i
字号:
说 明:当用虚拟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 + -