void Display()
{
unsigned char i;
unsigned char j,k,m,n;
unsigned char Temp_Set_Dis;
unsigned char Temp_Real_Dis;
SET_DIS_SDA_OUT;
j=NUM_5;
k=NUM_5;
m=0;
n=0;
if(++dis_set_flash_cnt>=DIS_FLASH)
{
dis_set_flash_cnt=0;
Display_Step=1;
}
if(Display_Set_Time>0)
{
Display_Set_Time--;
}
for(i=0;i<7;i++)
{
digit[i*2]=(digti2[j][i]|digti1[k][i]|digti3[m][i]|digti4[n][i]); //jkmn
}
GPIO_Pin_DIS_SCL=1;
GPIO_Pin_DIS_ENABLE=1;
command(0x03);
GPIO_Pin_DIS_SDA=0;
GPIO_Pin_DIS_SCL=1;
GPIO_Pin_DIS_ENABLE=1;
delay_us(5);
command(0x40);
GPIO_Pin_DIS_SDA=0;
GPIO_Pin_DIS_SCL=1;
GPIO_Pin_DIS_ENABLE=1;
delay_us(5);
command(0xc0);
GPIO_Pin_DIS_SDA=0;
GPIO_Pin_DIS_SCL=1;
delay_us(5);
for(i=0;i<14;i++)
{
send_8bit(digit[i]);
GPIO_Pin_DIS_SDA=0;
GPIO_Pin_DIS_SCL=1;
delay_us(5);
}
command(0x8F);
GPIO_Pin_DIS_SDA=0;
GPIO_Pin_DIS_SCL=1;
GPIO_Pin_DIS_ENABLE=1;
}
显示函数代码如上 如果想读取按键并处理 应该怎么做?
先发读按键命令0x42,然后再连续读5个字节的按键数据。
void Read_Key(void)
{
u8 i=0,j=0,k=0;
SET_DIS_SDA_OUT;
GPIO_Pin_DIS_SDA=0;
GPIO_Pin_DIS_ENABLE=1;
GPIO_Pin_DIS_SCL=1;
delay_us(5);
command(0x42);
delay_us(5);
GPIO_Pin_DIS_SCL=0;
GPIO_Pin_DIS_ENABLE = 0;
//delay_us(5);
for(j=0;j<5;j++)
{
for(i=0;i<8;i++)
{
GPIO_Pin_DIS_SCL=0;
delay_us(5);
k >>= 1;
GPIO_Pin_DIS_SCL=1;
delay_us(5);
if (GPIO_Pin_DIS_SDA)
{
k |= 0x80;
}
}
GPIO_Pin_DIS_SDA=0;
GPIO_Pin_DIS_SCL=1;
delay_us(5);
key[j]=k;
}
SET_DIS_SDA_OUT;
GPIO_Pin_DIS_ENABLE=1;
}
原有代码是这样 在scl 上升沿 读键数据 之后一次性存入数组 但是却没有读到键值
@香草味的薄荷糖: 你的command函数贴出来看看,写命令时ENABLE拉低试试
@hbchen:
void command(unsigned char com)
{
GPIO_Pin_DIS_ENABLE=1;
delay_us(15);
GPIO_Pin_DIS_ENABLE=0;
delay_us(15);
send_8bit(com);
}
void send_8bit(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(dat&0x01)
{
GPIO_Pin_DIS_SDA=1;
}
else
{
GPIO_Pin_DIS_SDA=0;
}
GPIO_Pin_DIS_SCL=0;
delay_us(2);
GPIO_Pin_DIS_SCL=1;
delay_us(2);
dat=dat>>1;
}
}
以上是发送命令函数以及发送数据函数
@香草味的薄荷糖: 读按键的时候,你SDA方向有没有切换到输入状态
@hbchen: 刚才没有写切换代码,加上后 我应该如何测试呢 单步调试到read_key函数内嘛 一边调试一遍按键嘛 这次调试还是没有读到键值
@香草味的薄荷糖: 直接正常测试,把读回来的键值显示或者打印出来,还是不行的的话,把读SDA放前到SCL置高前:
GPIO_Pin_DIS_SCL=0;
delay_us(5);
k >>= 1;
if (GPIO_Pin_DIS_SDA)
{
k |= 0x80;
}
GPIO_Pin_DIS_SCL=1;
delay_us(5);
@hbchen:
已修改,key数组与k的值没有被显示,真是太奇怪了
@香草味的薄荷糖: 不要在线仿真,实时显示key数组到显示屏上或者串口打印出来呢。
这是我读一个按键字节的示例
@hbchen: 这个板子只有一个串口,被接到了温湿度传感器上了,只能仿真调试了,谢谢了哈 我在自己调调看
@hbchen: 这个瑞萨单片机,串口一直没搞通,您有玩过瑞萨嘛
@香草味的薄荷糖: RL78用的比较多
@hbchen: 我也是 我刚入门 瑞萨单片机的资料真是太少了 如果您不介意的话 希望能多向您请教