ESP8266-SDK编写的TM1668程序驱动数码管
来源:互联网 发布:seo网站制作 编辑:程序博客网 时间:2024/05/16 05:19
一、配置GPIO及宏定义
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14);
#define Set_TM1668_SCLK_1() GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1)
#define Set_TM1668_SLCK_0() GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0)
定义TM1668的时钟输入 CLK 在时钟的上升沿输入数据
#define Set_TM1668_STB_1() GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 1)
#define Set_TM1668_STB_0() GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 0)
定义stb片选 stb为低后的第一个字节作为指令 stb为高时 clk被忽略 这句很重呀 我就是在这里被坑了
#define Set_TM1668_DIO_1() GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 1)
#define Set_TM1668_DIO_0() GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 0)
定义TM1668的数据输入DIO 在时钟的上升沿输入数据,从低位开始
二、编写一个写数据的函数
void ICACHE_FLASH_ATTR TM1668_Write_Data(uint8_t data)
{
uint8_t i = 0;
Set_TM1668_STB_0();//开始设置stb为低
for(i = 0;i < 8;i++)
{
Set_TM1668_SLCK_0();
os_delay_us(20);
if(data & 0x01)//低位先开始
{
Set_TM1668_DIO_1();
}
else
{
Set_TM1668_DIO_0();
}
os_delay_us(20);
Set_TM1668_SCLK_1();//时钟的上升沿输入数据
os_delay_us(20);
data = data >> 1;
os_delay_us(20);
}
Set_TM1668_DIO_1();
}
三、显示数据的函数
void ICACHE_FLASH_ATTR TM1668_Display1(uint8_t address,uint8_t *data,uint8_t num)
{
uint8_t i = 0;
//Write_74HC595_Data(Write_HC595_Data | Set_SCLK_EN_1);
TM1668_Write_Data(dissetmode);//传显示模式设置命令,设置为7个“GRID”方式
Set_TM1668_STB_1();
TM1668_Write_Data(writedatamode_g);//传数据设置命令,设置采用地址固定
Set_TM1668_STB_1();
for(i = 0;i < num;i++)
{
TM1668_Write_Data(address+2*i);//设置显示地址
//地址后面不要把stb设置为1 因为stb为低后的第一个字节为指令 第二个就是数据了 所以地址后面的stb不要设置为高
TM1668_Write_Data(ch[data[i]]);//设置显示的数据
Set_TM1668_STB_1();
}
TM1668_Write_Data(disconmode);//设置显示控制开
Set_TM1668_STB_1();
//Write_74HC595_Data(Write_HC595_Data & Set_SCLK_EN_0);
}
注意........................上面的红色字体一定要注意 ,否则容易被坑,我就坑在这里一下午
四、显示程序
void ICACHE_FLASH_ATTR callback(void)
{
static uint16_t flag=1234;
uint8_t ch[8] = {1,2,3,4,5,6,7,8};
flag++;
ch[0] = flag / 1000;
ch[2] = flag / 100 %10;
ch[3] = flag /10%10;
ch[3] = flag %10;
TM1668_Display1(0xc0,ch,4);
os_timer_arm(&timer,1000,0);
}
这里用了一个软定时器的回调函数来显示数据
读按键
/****************************************************************
* 函数名:TM1668_Write_Data
* 函数功能:写数据
* 形参:data -- 要写入的数据
* 返回值:无
*/
void ICACHE_FLASH_ATTR TM1668_Write_Data(uint8_t data)
{
uint8_t i = 0;
//ETS_INTR_LOCK();
Set_TM1668_STB_0();
for(i = 0;i < 8;i++)
{
Set_TM1668_SLCK_0();
os_delay_us(1);
if(data & 0x01)//低位在前
{
Set_TM1668_DIO_1();
}
else
{
Set_TM1668_DIO_0();
}
os_delay_us(1);
Set_TM1668_SCLK_1();//上升沿采集数据
os_delay_us(1);
data = data >> 1;
os_delay_us(1);
}
Set_TM1668_DIO_1();
//ETS_INTR_UNLOCK();
}
uint8_t ICACHE_FLASH_ATTR TM1668_Read_data(void)
{
uint8_t temp = 0;
uint8_t i = 0;
for(i = 0;i < 8;i++)
{
temp = temp >> 1;
Set_TM1668_SLCK_0();
if(Read_TM1668_DIO())
{
temp = temp | 0x80;
}
Set_TM1668_SCLK_1();
}
return temp;
}
uint8_t ICACHE_FLASH_ATTR Read_Tm1668_key(void)
{
uint8_t temp;
uint8_t i = 0;
uint8_t key = 0;
Set_TM1668_STB_0();
TM1668_Write_Data(readkeymode);
//Set_TM1668_DIO_InPut();
for(i = 0;i < 4;i++)
{
temp = TM1668_Read_data();
switch(i)
{
case 0:
if(temp == 0x01)
{
key = 0x01;
}
else if(temp == 0x10)
{
key = 0x10;
}
break;
case 1:
if(temp == 0x01)
{
key = 0x02;
}
else if(temp == 0x10)
{
key = 0x20;
}
break;
case 2:
if(temp == 0x01)
{
key = 0x04;
}
else if(temp == 0x10)
{
key = 0x40;
}
break;
case 3:
if(temp == 0x01)
{
key = 0x08;
}
else if(temp == 0x10)
{
key = 0x80;
}
break;
default:
os_printf("按键出错.........\r\n");
break;
}
}
Set_TM1668_STB_1();
return key;
}
- ESP8266-SDK编写的TM1668程序驱动数码管
- ESP8266-SDK编写的TM1668程序驱动数码管
- WIFI ESP8266的SDK实现的云服务器升级程序
- STC89C52RC数码管秒表程序编写
- esp8266的STM32驱动
- 如何直接为价廉的ESP8266 WiFi模块编写程序
- 如何直接为价廉的ESP8266 WiFi模块编写程序
- lpc2131 arm 驱动数码管 程序
- 驱动数码管的实验
- ESP8266-SDK的外部中断
- ESP8266-SDK的硬件定时器
- ESP8266的SDK开发入门教程
- ESP8266-SDK的硬件定时器
- ESP8266 SDK 编程入门 03-程序篇
- 驱动测试程序的编写
- ESP8266-使用ESP8266 NONOS SDK的JSON API
- ESP8266-使用ESP8266 NONOS SDK的driver/key API
- 【ESP8266】使用ESP8266 NONOS SDK的JSON API
- SpringMVC的基本原理
- Spring Cloud构建微服务架构—服务容错保护(Hystrix服务降级)
- 【第1112期】前端 Console 调试小技巧
- TCP协议的基本知识总结
- springmvc整合dubbo
- ESP8266-SDK编写的TM1668程序驱动数码管
- 第1138期AI100_机器学习日报(2017-10-30)
- 【C#】文件的输入与输出
- 数据结构学习笔记
- 高并发下的HashMap
- ESP8266-SDK的硬件定时器
- QT写入EXCEL
- Kafka入门经典教程
- Mysql主从复制完美配置,So easy!5分钟搞定!