197 lines
4.1 KiB
C
197 lines
4.1 KiB
C
#include"tm1650.h"
|
||
#include"config.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 <20>ϼ<EFBFBD>ͷ*/
|
||
0x0c,/*25 <20>¼<EFBFBD>ͷ*/
|
||
0x3e,/*26 U*/
|
||
0x37,/*27 N*/
|
||
0x3e,/*28 U*/
|
||
0x14,/*29 <20><>˫<EFBFBD><CBAB> ||*/
|
||
0x54,/*30 n*/
|
||
0x48,/*31 =*/
|
||
0x04,/*32 i*/
|
||
0x49,/*33 <20><>*/
|
||
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]);
|
||
}
|
||
|
||
#if 0
|
||
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]);
|
||
}
|
||
}
|
||
#endif
|