- #include <stm32f10x.h>
- #include "sys.h"
- #include "delay.h"
- #define clk PAout(11)
- #define din PAout(12)
- #define led1 PBout(0)
- #define led2 PBout(1)
- void tm1640_start()//起始指令
- {
- clk=1;
- din=1;
- delay_us(1);
- din=0;
- delay_us(1);
- clk=0;
- }
- void tm1640_end()
- {
- clk=1;
- din=0;
- delay_us(1);
- din=1;
- delay_us(1);
- }
- void tm1640_writebyte(u8 q)
- {
- u8 w;
- for(w=0;w<8;w++)
- {
- clk=0;
- delay_us(1);
- if(q&0x01)
- {
- din=1;
- delay_us(1);
- }
- else
- {
- din=0;
- delay_us(1);
- }
- q=q>>1;
- clk=1;
- delay_us(1);
- }
- clk=0;
- din=0;
- }
- void tm1640_data(u8 q,u8 w)
- {
- const u8 buff[21]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x00};//数字0~9及0~9加点显示段码表
- tm1640_start();
- tm1640_writebyte(0xc0+q);
- tm1640_writebyte(buff[w]);
- tm1640_end();
- }
- void TM1640_io_init()//初始化IO引脚
- {
- GPIO_InitTypeDef GPIO_InitTypeDef_led;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
- GPIO_InitTypeDef_led.GPIO_Mode=GPIO_Mode_Out_PP;
- GPIO_InitTypeDef_led.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12;
- GPIO_InitTypeDef_led.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&GPIO_InitTypeDef_led);
-
- GPIO_InitTypeDef_led.GPIO_Mode=GPIO_Mode_Out_PP;
- GPIO_InitTypeDef_led.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
- GPIO_InitTypeDef_led.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOB,&GPIO_InitTypeDef_led);
-
- clk=1;
- din=1;
- tm1640_start();
- tm1640_writebyte(0x44);
- tm1640_end();
- tm1640_start();
- tm1640_writebyte(0x88);
- tm1640_end();
-
- }
- int main(void)
- {
- u8 q;
- delay_init();
- TM1640_io_init();
-
-
- tm1640_start();
- tm1640_end();
- while(1)
- {
- led1=0;
- led2=1;
- delay_ms(100);
- led1=1;
- led2=0;
- delay_ms(100);
- for(q=0;q<8;q++)
- {
- tm1640_data(q,q);
- }
- }
- }
复制代码
Keil代码下载:
1-使用TM1640驱动LED.7z
(179.61 KB, 下载次数: 53)
|