利用51单片机和1629A实现 双排3段数码管显示 Map中的数据 可是程序写完了 最后显示并不是数组中的数据而是随机数 求教程序该怎么改??
#include <reg51.h>
typedef unsigned char u8;
void tm1629aSendData(unsigned char a);
sbit tm1629_STB = P2^5;
sbit tm1629_CLK = P2^6;
sbit tm1629_DATA = P2^7;
unsigned char code Map[73] =
{
0x3F,0x06,0x5B,0x4F, // ;0,1,2,3 ;00,01,02,03
0x66,0x6D,0x7D,0x07, // ;4,5,6,7 ;04,05,06,07
0x7F,0x6F,0x77,0x7C, // ;8,9,A,b ;08,09,0A,0B
0x39,0x5E,0x79,0x71, // ;C,d,E,F ;0C,0D,0E,0F
0xBF,0x86,0xDB,0xCF, // ;0.,1.,2.,3. ;10,11,12,13
0xE6,0xED,0xFD,0x87, // ;4.,5.,6.,7. ;14,15,16,17
0xFF,0xEF,0x08,0x88, // ;8.,9.,_ ,_. ; 18,19,1A,1B
0x3D,0x76,0x10,0x1E, // ;G,H,I,J ;1C,1D,1E,1F
0x32,0x38,0x55,0x54, // ;K,L,M,N ;20,21,22,23
0x5C,0x73,0x67,0x50, // ;O,P,Q,R ;24,25,26,27
0x6D,0x31,0x3E,0x7E, // ;S,T,U,V ;28,29,2A,2B
0x6A,0x36,0x6E,0x49, // ;W,X,Y,Z ;2C,2D,2E,2F
0x70,0x40,0x14,0x09, // ;+,-,*,/ ;30,31,32,33
0x58,0x74,0x46,0x00, // ;c,h,-1,NIL ;34,35,36,37
0xF0,0xC0,0x94,0xD0, // ;+.,-.,*.,R. ;38,39,3A,3B
0xD8,0xF6,0xC6,0x80, // ;c.,H.,-1., . ;3C,3D,3E,3F
0x7B,0xd4,0xbE,0XB1, // ;e,n.,b.,T., ;40,41,42,43
0xFb,0xdC,0x90,0xd4, // ;e.,o.,I.,N. ;44,45,46,47
0xfC
};
void tem1629a_dis_open(void)
{
unsigned char Du;
tm1629_STB=0;Du=2;
tm1629aSendData((Du&0x07)|0x88);
tm1629_STB=1;
}
void tm1629a(void)
{
tm1629_STB=0;
tm1629aSendData(0x44);
tm1629_STB=1;
}
void tme1629aSendData(unsigned char add,unsigned char num)
{
tm1629_STB=0;
tm1629aSendData(0xc0|add);
tm1629aSendData(Map[num]);
tm1629_STB=1;
}
void DS_number(line,ge,num)
{
if(line==1)
{
switch(ge)
{
case 0:tme1629aSendData(1,num);break;
case 1:tme1629aSendData(3,num);break;
case 2:tme1629aSendData(5,num);break;
}
}
else if (line==2)
{
switch(ge)
{
case 0:tme1629aSendData(9,num);break;
case 1:tme1629aSendData(11,num);break;
case 2:tme1629aSendData(13,num);break;
}
}
}
void tm1629aSendData(u8 a)
{
u8 i;
for(i=0;i<8;i++)
{
tm1629_CLK=0;
tm1629_DATA=(a&0x01==1)?1:0;
a>>=1;
tm1629_CLK=1;
}
}
void main()
{
int buf[3]={0};
int a;
a=100;
buf[0]=a%1000/100;
buf[1]=a%100/10;
buf[2]=a%1000;
tem1629a_dis_open();
tm1629a();
DS_number(1,0,buf[2]);
DS_number(1,2,buf[9]);
DS_number(1,1,buf[1]);
DS_number(2,0,buf[2]);
DS_number(2,2,buf[0]);
DS_number(2,1,buf[1]);
}
|