195 lines
4.1 KiB
C
195 lines
4.1 KiB
C
#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]);
|
|
}
|
|
|
|
|
|
}
|