#include"tm1650.h" #include"delay.h" unsigned char code tab[]= // 0 1 2 3 4 5 6 7 8 9 {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0x00,/*10 No display*/ 0x40,/*11 - c*/ 0x58,/*12 temp c*/ 0x79,/*13 E*/ 0x50,/*14 r*/ 0x74,/*15 h*/ 0xff,/*16 all display*/ 0x5e,/*17 d*/ 0x80,/*18 .*/ 0x71,/*19 F*/ 0x39,/*20[*/ 0x0f,/*21]*/ 0x46,/*22 -|*/ 0x70,/*23 |-*/ 0x21,/*24 上箭头*/ 0x0c,/*25 下箭头*/ 0x3e,/*26 U*/ 0x37,/*27 N*/ 0x3e,/*28 U*/ 0x14,/*29 下双杠 ||*/ 0x54,/*30 n*/ 0x48,/*31 =*/ 0x04,/*32 i*/ 0x49,/*33 三*/ 0x08,/*34 一*/ 0x7c,/*35 b*/ 0x38,/*36 L*/ 0x76,/*37 H*/ 0x78,/*38 t*/ 0x73,/*39 P*/ 0x77,/*40 A*/ }; void SMG1_INIT() { Write_DATA_SMG_1(0x48,0x11); } void TM1650_stop_SMG_1(void) { SMG_1_SCL=1; SMG_1_SDA=0; delayUs(1); SMG_1_SDA=1; delayUs(1); } void TM1650_start_SMG_1(void) { SMG_1_SCL=1; SMG_1_SDA=1; delayUs(1); SMG_1_SDA=0; delayUs(1); } void TM1650_ACK_SMG_1(void) { unsigned char timeout=0; SMG_1_SCL=1; // pinMode(SMG_1_SDA,INPUT); //set SMG_1_SDA input delayUs(1); SMG_1_SCL=0; delayUs(1); do timeout++; while((SMG_1_SDA==1)&&(timeout<255)); SMG_1_SCL=0; //pinMode(SMG_1_SDA,OUTPUT); delayUs(1); } void TM1650_Write_SMG_1(unsigned char DATA) { unsigned char i; delayUs(1); SMG_1_SCL=0; for(i=0;i<8;i++) { if(DATA&0X80) SMG_1_SDA=1; else SMG_1_SDA=0; DATA<<=1; SMG_1_SCL=0; delayUs(1); SMG_1_SCL=1; delayUs(1); SMG_1_SCL=0; delayUs(1); } } void Write_DATA_SMG_1(unsigned char add,unsigned char DATA) { TM1650_start_SMG_1(); TM1650_Write_SMG_1(add); TM1650_ACK_SMG_1(); TM1650_Write_SMG_1(DATA); TM1650_ACK_SMG_1(); TM1650_stop_SMG_1(); } void SMG1x4(unsigned char a,unsigned char b,unsigned char c,unsigned char d) { SMG1_INIT(); Write_DATA_SMG_1(0x68+0,tab[a]); Write_DATA_SMG_1(0x68+2,tab[b]); Write_DATA_SMG_1(0x68+4,tab[c]); Write_DATA_SMG_1(0x68+6,tab[d]); } void SMG1x4_B(unsigned char a,unsigned char b,unsigned char c,unsigned char d,unsigned char e) { SMG1_INIT(); Write_DATA_SMG_1(0x68+0,e==1?tab[a]|0x80:tab[a]); Write_DATA_SMG_1(0x68+2,e==2?tab[b]|0x80:tab[b]); Write_DATA_SMG_1(0x68+4,e==3?tab[c]|0x80:tab[c]); Write_DATA_SMG_1(0x68+6,e==4?tab[d]|0x80:tab[d]); } void SMG1(unsigned int a) { SMG1_INIT(); Write_DATA_SMG_1(0x68+0,tab[a%10000/1000]); Write_DATA_SMG_1(0x68+2,tab[a%1000/100]); Write_DATA_SMG_1(0x68+4,tab[a%100/10]); Write_DATA_SMG_1(0x68+6,tab[a%10]); } void SMG1_BL(unsigned char b) { // Write_DATA_SMG_1(0x48,0x01|b<<4); switch(b) { case 0:Write_DATA_SMG_1(0x48,0x00);break; case 1:Write_DATA_SMG_1(0x48,0x11);break; case 2:Write_DATA_SMG_1(0x48,0x21);break; case 3:Write_DATA_SMG_1(0x48,0x31);break; case 4:Write_DATA_SMG_1(0x48,0x41);break; case 5:Write_DATA_SMG_1(0x48,0x51);break; case 6:Write_DATA_SMG_1(0x48,0x61);break; case 7:Write_DATA_SMG_1(0x48,0x71);break; case 8:Write_DATA_SMG_1(0x48,0x01);break; } } void SMG1_dp(unsigned long datax) { unsigned long smgData; unsigned char dp_x; if(datax<=999) { smgData=datax; dp_x=0; } else if(datax>999&&datax<=9999) { smgData=datax; dp_x=1; } else if(datax>9999&&datax<=99999) { smgData=datax/10; dp_x=2; } else if(datax>99999&&datax<=999999) { smgData=datax/100; dp_x=3; } else if(datax>999999&&datax<=9999999) { smgData=datax/1000; dp_x=4; } else if(datax>9999999) { smgData=0; dp_x=5; } if(dp_x<5) { Write_DATA_SMG_1(0x68+0,dp_x==1?tab[smgData%10000/1000]|0x80:tab[smgData%10000/1000]); Write_DATA_SMG_1(0x68+2,dp_x==2?tab[smgData%1000/100]|0x80:tab[smgData%1000/100]); Write_DATA_SMG_1(0x68+4,dp_x==3?tab[smgData%100/10]|0x80:tab[smgData%100/10]); Write_DATA_SMG_1(0x68+6,dp_x==4?tab[smgData%10]|0x80:tab[smgData%10]); } else { Write_DATA_SMG_1(0x68+0,tab[13]); Write_DATA_SMG_1(0x68+2,tab[14]); Write_DATA_SMG_1(0x68+4,tab[14]); Write_DATA_SMG_1(0x68+6,tab[10]); } }