首页 新闻 会员 周边

TT1628驱动芯片数码管怎么读键

0
悬赏园豆:40 [已解决问题] 解决于 2023-02-09 16:46
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;
    }

显示函数代码如上 如果想读取按键并处理 应该怎么做?

香草味的薄荷糖的主页 香草味的薄荷糖 | 初学一级 | 园豆:137
提问于:2023-02-09 13:19
< >
分享
最佳答案
1

先发读按键命令0x42,然后再连续读5个字节的按键数据。

收获园豆:40
hbchen | 菜鸟二级 |园豆:242 | 2023-02-09 15:14
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 上升沿 读键数据 之后一次性存入数组 但是却没有读到键值

香草味的薄荷糖 | 园豆:137 (初学一级) | 2023-02-09 15:30

@香草味的薄荷糖: 你的command函数贴出来看看,写命令时ENABLE拉低试试

hbchen | 园豆:242 (菜鸟二级) | 2023-02-09 15:39

@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;
	}
}

以上是发送命令函数以及发送数据函数

香草味的薄荷糖 | 园豆:137 (初学一级) | 2023-02-09 15:45

@香草味的薄荷糖: 读按键的时候,你SDA方向有没有切换到输入状态

hbchen | 园豆:242 (菜鸟二级) | 2023-02-09 15:50

@hbchen: 刚才没有写切换代码,加上后 我应该如何测试呢 单步调试到read_key函数内嘛 一边调试一遍按键嘛 这次调试还是没有读到键值

香草味的薄荷糖 | 园豆:137 (初学一级) | 2023-02-09 16:03

@香草味的薄荷糖: 直接正常测试,把读回来的键值显示或者打印出来,还是不行的的话,把读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 | 园豆:242 (菜鸟二级) | 2023-02-09 16:13

@hbchen:

已修改,key数组与k的值没有被显示,真是太奇怪了

香草味的薄荷糖 | 园豆:137 (初学一级) | 2023-02-09 16:29

@香草味的薄荷糖: 不要在线仿真,实时显示key数组到显示屏上或者串口打印出来呢。

这是我读一个按键字节的示例

hbchen | 园豆:242 (菜鸟二级) | 2023-02-09 16:36

@hbchen: 这个板子只有一个串口,被接到了温湿度传感器上了,只能仿真调试了,谢谢了哈 我在自己调调看

香草味的薄荷糖 | 园豆:137 (初学一级) | 2023-02-09 16:55

@hbchen: 这个瑞萨单片机,串口一直没搞通,您有玩过瑞萨嘛

香草味的薄荷糖 | 园豆:137 (初学一级) | 2023-02-09 17:50

@香草味的薄荷糖: RL78用的比较多

hbchen | 园豆:242 (菜鸟二级) | 2023-02-10 14:52

@hbchen: 我也是 我刚入门 瑞萨单片机的资料真是太少了 如果您不介意的话 希望能多向您请教

香草味的薄荷糖 | 园豆:137 (初学一级) | 2023-02-11 09:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册