OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4109|回复: 4

tm1638与STM32

[复制链接]

12

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-11-2
在线时间
4 小时
发表于 2015-12-22 13:35:45 | 显示全部楼层 |阅读模式
5金钱
显示的程序一切正常,也就输入的程序正确,但读取数据没有一直为零
高人给指点一下。

//=======================================================================================
void TM1638_Init()  
{   int i=0;
RCC->APB2ENR|=1<<2;    //使能PORTA时钟      
    GPIOA->CRL&=0XFFFFF000; 
    GPIOA->CRL|=0X00000333;//PA8 推挽输出    
    GPIOA->ODR|=7;      //PA8 输出高    Write_Cmd(0x8a);  
    Write_Cmd(0x8a);  
    Write_Cmd(0x40);   
    for(i=0;i<16;i++){  
       Write_Byte(0x00);  
    }  
}  
//=======================================================================================

void Write_Cmd(u8 cmd)
{    STB=1;  
     STB=0;  
     Write_Byte(cmd);  

}  
//=======================================================================================
void Write_Byte(u8 byte)
{    u8 i=0;  
    for(i=0;i<8;i++){  
        CLK=0;  
        if(byte&0x01){  
            DI=1;  
        }else{  
            DI=0;  
        }  
        CLK=1;  
       byte>>=1;  
    }  
}  

//=======================================================================================
unsigned char TM1638_Read(void) 
{  
unsigned char i=0;  
unsigned char temp=0x00;  
for(i=0;i<8;i++)
{ CLK=1;  
        temp>>=1;  
        if(DO)
{ temp|=0x80;  
        }  
        CLK=0; 
}
   return temp;  
}  


unsigned char Read_key(void)             
{
unsigned char c[4],i;
  STB=1;  
     STB=0;              
Write_Byte(0x42);
RCC->APB2ENR|=1<<2;    //使能PORTA时钟  
    GPIOA->CRL&=0XFFFFF000; 
    GPIOA->CRL|=0X00000833;//PA8 推挽输出    
    GPIOA->ODR|=3;      //PA8 输出高    Write_Cmd(0x8a);  

                
for(i=0;i<4;i++) 
{ c=TM1638_Read();            
}
// STB=1;                     
return i;            
}





//=======================================================================================
    
void Write_Dat(u8 addr,u8 dat)
{    Write_Cmd(0x44);  
     Write_Cmd(0xc0|addr);  
     Write_Byte(dat);  
}  
//=======================================================================================
u8 dat[10]= {0,1,2,3,4,5,6,7,8,9} ;
u8 const tm_dat[10]= {0xEB,0x28,0x73,0x7A,0xB8,0xDA,0XDB,0x68,0XFB,0XFA} ;
void H_L(void)
{   
     u8 P=0;
     u8 C=0,b;
for (C=0;C<8;C++)
{ for (b=0;b<8;b++)
        {   P=((tm_dat[dat[9]]>>C)&0x01)+((tm_dat[dat[8]]>>C)&0x01)*2+((tm_dat[dat[7]]>>C)&0x01)*4+((tm_dat[dat[6]]>>C)&0x01)*8;
P=P+((tm_dat[dat[5]]>>C)&0x01)*16+((tm_dat[dat[4]]>>C)&0x01)*32+((tm_dat[dat[3]]>>C)&0x01)*64+((tm_dat[dat[2]]>>C)&0x01)*128;

Write_Dat(C*2,P) ;    

for (C=0;C<8;C++)
{ for (b=0;b<2;b++)
        {   P=((tm_dat[dat[1]]>>C)&0x01)+((tm_dat[dat[0]]>>C)&0x01)*2;

Write_Dat(C*2+1,P) ;    

}
//=======================================================================================

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-12-24 22:31:06 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-12-4
在线时间
0 小时
发表于 2016-10-14 15:47:42 | 显示全部楼层
请问原子,这个问题解决了吗,最近在调试,也出现了这个问题,可以显示不能读取键值?
回复

使用道具 举报

22

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
493
金钱
493
注册时间
2013-12-19
在线时间
111 小时
发表于 2016-11-24 13:43:17 | 显示全部楼层
TM1638可以用3.3V供电吗?
回复

使用道具 举报

28

主题

218

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2013-11-19
在线时间
92 小时
发表于 2016-11-24 16:55:21 | 显示全部楼层
但读取数据没有一直为零???可以详细说说吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 10:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表