我猜你想描述的是动态显示数据的问题,用sprintf函数即可 |
1650本身就是专为数码管设计的,4位7段或8段,显示内容最多只有4*8点,要显示一个5*8的点阵都不能完整,你还要显示字符?或许可以显示经过变形的LED字体,但你不一定认识显示的是什么。![]() 如果一定要显示字符,可以考虑用更多点数的IC,比如1629,可以显示8*16点,一个IC可显示3个5*8的字符,有余下的点,还可以做其它显示内容。 |
TM1650是专门为数码管设计的驱动芯片,一般只是用来显示数字。你说的显示文字串,不明白你是何意 |
复制一个我从网上下载的程序给你看一下 /* ESP8266的SoftAP+Web Server配网功能 开源带库(带NTP数码管时钟) */ #include <Wire.h> #include <ESP8266WebServer.h> #include <TM1650.h> #include "Public.h" #include "WifiConfig.h" #include "NTP.h" /*#define SEG_A 0b00000001 #define SEG_B 0b00000010 #define SEG_C 0b00000100 #define SEG_D 0b00001000 #define SEG_E 0b00010000 #define SEG_F 0b00100000 #define SEG_G 0b01000000*/ ESP8266WebServer web(80); //WEB服务器,SoftAP默认地址为:http://192.168.4.1 #define TM_SCL 5 //GPIO5接TM1637 SCL #define TM_SDA 13 //GPIO4接TM1637 SDA TM1650 smg; //定义特殊字符 // A // --- // F | | B // -G- // E | | C // --- // D const uint8_t SEG_boot[] = { //boot SEG_F|SEG_E|SEG_G|SEG_C|SEG_D, SEG_G|SEG_C|SEG_D|SEG_E, SEG_G|SEG_C|SEG_D|SEG_E, SEG_G|SEG_C }; const uint8_t SEG_Sn[] = { //-Sn- SEG_G, SEG_A|SEG_F|SEG_G|SEG_C|SEG_D, SEG_E|SEG_G|SEG_C, SEG_G }; const uint8_t SEG_AP[] = { //-AP- SEG_G, SEG_A|SEG_B|SEG_C|SEG_E|SEG_F|SEG_G, SEG_A|SEG_B|SEG_E|SEG_F|SEG_G, SEG_G }; void setup() { //初始化调试串口 DebugBegin(74880); //74880与bootloader的一致,启动时不会出现乱码 DebugPrintln(); //打印回车换行 //打印软件版本信息 const char BuildDate[]= __DATE__ ; const char BuildTime[]= __TIME__ ; DebugPrintf("App (Build %s %s) be starting...\n",BuildTime,BuildDate); //打印系统及芯片信息 FlashMode_t ideMode = ESP.getFlashChipMode(); DebugPrint("Arduino Core For ESP8266 Version: "); DebugPrintln(ESP.getCoreVersion()); //DebugPrintln(ESP.getFullVersion()); DebugPrint("Reset reason: "); DebugPrintln(ESP.getResetReason()); //DebugPrint("Rest info: "); DebugPrintln(ESP.getResetInfo()); DEBUG_OUTPUT.printf("Chip id: %08X\n", ESP.getChipId()); DEBUG_OUTPUT.printf("Flash real id: %08X\n", ESP.getFlashChipId()); DEBUG_OUTPUT.printf("Flash real size: %u KBytes\n", ESP.getFlashChipRealSize()/1024); DEBUG_OUTPUT.printf("IDE config Flash size: %u KBytes\n", ESP.getFlashChipSize()/1024); DEBUG_OUTPUT.printf("IDE config Flash frequency: %u MHz\n", ESP.getFlashChipSpeed()/1000000); DEBUG_OUTPUT.printf("Flash ide mode: %s\n", (ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT" : ideMode == FM_DIO ? "DIO" : ideMode == FM_DOUT ? "DOUT" : "UNKNOWN")); //初始化ESP的看门狗 ESP.wdtEnable(8000); //使能软件看门狗的触发间隔MS ESP.wdtFeed(); //喂狗 Wire.begin( TM_SDA, TM_SCL ); smg.Init(); //时钟数码管显示boot smg.SetBrightness( 1 ); //设置亮度 smg.WriteNum( SEG_boot ); //显示boot //初始化配网功能,SoftAP模式下配网:http://192.168.4.1/WifiConfig;程序升级:http://192.168.4.1/update WifiConfigInit(&web); //主页跳转,默认跳转到配网页面 web.on("/", []() { web.sendHeader("Location", "/WifiConfig"); web.send(302, F("text/plain"), ""); }); //启动WebServer web.begin(); delay(100); web.client().setNoDelay(true); DebugPrintln("HTTP server started."); } bool Init = true; void loop() { ESP.wdtFeed(); //喂狗 WifiConfigTask(); //Wifi配网程序任务 web.handleClient(); //WEB服务处理数据 if(WifiConfigState()==Wifi_AP_OK) { //配网模式下 smg.SetBrightness( 7 ); //设置亮度 smg.WriteNum( SEG_AP ); //显示-AP- } if(WifiConfigState()==Wifi_STA_OK) { //联网模式下 if(Init) { Init=false; //在数码管上显示IP地址最后一段,方便浏览器输入地址 IPAddress myip=WiFi.localIP(); uint8_t fourth_octet=myip[3]; uint8_t seg[4]; seg[0]=SEG_A|SEG_B|SEG_E|SEG_F|SEG_G; //P seg[1]=d.encodeDigit(fourth_octet / 100); seg[2]=d.encodeDigit(fourth_octet % 100 / 10); seg[3]=d.encodeDigit(fourth_octet % 10); smg.SetBrightness( 1 ); //设置亮度 smg.WriteNum( seg ); //显示IP地址最后一段 unsigned long showTime = millis(); NtpInit(3600); //初始化NTP功能,每1小时对时一次 while((millis() - showTime) < 2000) delay(100); //保证IP可以显示2s } else { task(); } } //打印当前网络状态 if(WifiConfigState()==Wifi_NoLink)DebugPrintln("Wifi config state is Wifi_NoLink"); if(WifiConfigState()==Wifi_STABegin)DebugPrintln("Wifi config state is Wifi_STABegin"); if(WifiConfigState()==Wifi_STALinking)DebugPrintln("Wifi config state is Wifi_STALinking"); //if(WifiConfigState()==Wifi_STA_OK)DebugPrintln("Wifi config state is Wifi_STA_OK"); if(WifiConfigState()==Wifi_APBegin)DebugPrintln("Wifi config state is Wifi_APBegin"); //if(WifiConfigState()==Wifi_AP_OK)DebugPrintln("Wifi config state is Wifi_AP_OK"); } time_t prevDisplay = 0; void task() { if(timeStatus() == timeNotSet) { //时间更新失败 smg.SetBrightness( 1 ); //设置亮度 smg.WriteNum( SEG_Sn ); //显示-Sn- } else { //更新时间显示(时间转换为一个千位数,冒号闪烁,保留前导零) d.showNumberDecEx(hour()*100+minute(), (millis()%1000<500)?0b01000000:0, true); if(now() != prevDisplay) { prevDisplay = now(); //这里放只有在时间发生变化时才执行的程序(每秒执行一次) DebugPrintf("%.4u-%.2u-%.2u %.2u:%.2u:%.2u\n", year(), month(), day(), hour(), minute(), second()); //自动亮度调节 if(hour()>6 && hour()<22) { //白天 smg.SetBrightness( 7 ); //设置亮度 } else { //晚上 smg.SetBrightness( 1 ); //设置亮度 } } } } |