OpenEdv-开源电子网

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

Tm1638的STM32F103ZET6驱动程序 参考网上程序改了一下 下载到单片机里 用LED检测 发现IO都控制不了 找不到哪里的问题 求助!!

[复制链接]

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-7-10
在线时间
0 小时
发表于 2015-8-7 14:49:36 | 显示全部楼层 |阅读模式
5金钱
tm1638.h

#ifndef _TM1638_H
#define _TM1638_H
#include "stm32f10x.h"

#define DATA_COMMAND 0X40     //0100 0000 ?????ü??????
#define DISP_COMMAND 0x80 //1000 0000 ?????ü??????
#define ADDR_COMMAND 0XC0     //1100 0000 ???·?ü??????

#define STB1 GPIO_SetBits(GPIOF,GPIO_Pin_0)              
#define STB0 GPIO_ResetBits(GPIOF,GPIO_Pin_0)

#define CLK1 GPIO_SetBits(GPIOF,GPIO_Pin_1)              
#define CLK0 GPIO_ResetBits(GPIOF,GPIO_Pin_1)         

#define DIO1 GPIO_SetBits(GPIOF,GPIO_Pin_2)              
#define DIO0 GPIO_ResetBits(GPIOF,GPIO_Pin_2)         
#define DIO2 GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_2)==SET

void TM1638_Write(unsigned char DATA); //??????????
unsigned char TM1638_Read(void);           //??????????
void Write_COM(unsigned char cmd);         //·????ü??×?
unsigned char Read_key(void);             //????°??ü???????? 
void Write_DATA(unsigned char add,unsigned char DATA);//???¨???·????????  addr?????????????? DATA????????????
void Write_DATA(unsigned char add,unsigned char DATA);//???¨???·????????  addr?????????????? DATA????????????
void Write_allLED(unsigned char LED_flag);//????????LED??????LED_flag±í???÷??LED×???
void Write_oneLED(unsigned char num,unsigned char flag);
void TM1638_Init(void); //TM1638??????????
void GPIO1_Init(void);

#endif


tm1638.c

#include "tm1638.h"
#include "stm32f10x.h"

void GPIO1_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  //?ò??PB???±??
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
//PB5,PE5?????è??
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
//????????
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//?????????????????????ì????
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//????????????????
  GPIO_Init(GPIOF, &GPIO_InitStructure);
}

void TM1638_Write(unsigned char DATA) //??????????
{
unsigned char i=0;
for(i=0;i<8;i++)
{
CLK0; 
if(DATA&0X01)                         //??DATA????8???ò×ó??????,??×???????1??????????
DIO1;
else
DIO0;
DATA>>=1;                           
CLK1;
}
}


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


void Write_COM(unsigned char cmd)         //·????ü??×?
{

STB0;
TM1638_Write(cmd);
STB1;
}

unsigned char Read_key(void)             //????°??ü???????? 
{
unsigned char c[4],i,key_value=0;
STB0;             //????
TM1638_Write(0x42);                 //???ü?¨?????ü??
for(i=0;i<4;i++)
c=TM1638_Read();             //????????×?????????4??
STB1;                       //????????
for(i=0;i<4;i++)
key_value|=c<<i;                  //4??×???????????????×???
for(i=0;i<8;i++)
if((0x01<<i)==key_value)             //KEY_VALUE????I????1
break;
return i;             //·???I????????????°??ü°???
}

void Write_DATA(unsigned char add,unsigned char DATA)//???¨???·????????  addr?????????????? DATA????????????
{
Write_COM(0x44);                       //?????ü??0100 0100 ???·?????????????¨???·
TM1638_Write(0xc0|add);                //???·??1100 0000???????ò???? ????
TM1638_Write(DATA);       //????DATA
STB1;                                 //??±?????
}

void Write_oneLED(unsigned char num,unsigned char flag) //????????????LED??????num???è????????led?ò????flag??0?±?¨????????0?±????
{
if(flag)
Write_DATA(2*num+1,1);
else
Write_DATA(2*num+1,0);
}

void Write_allLED(unsigned char LED_flag)//????????LED??????LED_flag±í???÷??LED×???
{
unsigned char i;
for(i=0;i<8;i++)
{
if(LED_flag&(1<<i))
//Write_DATA(2*i+1,3);
Write_DATA(2*i+1,1);             //2*i+1?????· 1????????????
else
Write_DATA(2*i+1,0);              
}
}

void TM1638_Init(void) //TM1638??????????
{
unsigned char i;
Write_COM(0x8b);       //???? (0x88-0x8f)8?????????÷
Write_COM(0x40);       //???????·×?????1
STB0;          //????????
TM1638_Write(0xc0);     //?è?????????·
for(i=0;i<16;i++)   //????16??×?????????
TM1638_Write(0x00);
STB1;               //????????
}

main.c
#include <stdio.h>
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "timer.h"
#include "beep.h"
#include "usart.h"
#include "adc.h"
#include "lcd.h"
#include "tm1638.h"

int main(void)
{
u8 t;
LED_Init();//LED??????
  KEY_Init();//°??ü??????
  SysTick_Init();//???±??????
  USART1_Int(9600);
LCD_Init();
GPIO1_Init();
POINT_COLOR=RED;
STB1;
DIO1;
CLK1;
  while(1) 
{  
t=Read_key();
    LCD_ShowString(30,150,200,16,16,"abcdefgABCDEFG");
LCD_ShowxNum(90,220,t,2,16,0);
Write_oneLED(5,1);
STB1;
DIO1;
CLK1;

}

哪位大侠有tm1638 的32驱动程序分享下也行

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

使用道具 举报

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-7-10
在线时间
0 小时
 楼主| 发表于 2015-8-7 15:21:05 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 22:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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