程序修改如下,因字数限制,原注释内容删掉了
#include
#include
sbit GW=P2^5;
sbit SW=P2^6;
sbit CS=P2^1;
sbit CLK=P2^3;
sbit DO=P3^4;
unsigned char shi;
unsigned char ge;
unsigned char encode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay_ms(unsigned char x)
{
unsigned int j;//延时子程序有点改动
while(x--)
for(j=500;j>0;j--);
}
void Timer0Set(void)
{
TMOD = 0x01;
TH0 = (65536-5000)/256;
TL0 = (65536-5000)%256;
ET0 = 1;EA = 1;TR0 = 1;
}
unsigned char GetVoltage(void)
{
unsigned char tmp = 0;
unsigned char i = 0;
CLK = 0;DO = 1;
CS = 0;
for(i=0;i<3;i++)
{
CLK = 1;
CLK = 0;
}
for(i=0;i<8;i++)
{
CLK = 1;_nop_();CLK = 0;
if(DO) tmp = tmp | 1<<(7-i);
}
for(i=0;i<8;i++)
{
CLK = 1;
_nop_();
CLK = 0;
}
CS = 1;return tmp;
}
void PrintToBuffer(unsigned char digit)
{
unsigned long val= 500UL*digit/256;
ge = val/10%10;
shi = val/100;
}
main(void)
{
unsigned char digit = 0;
Timer0Set();
while(1)
{
digit = GetVoltage();
PrintToBuffer(digit);
delay_ms(40);
}
}
void Timer0_Init() interrupt 1
{
static unsigned char pos = 0;
TH0 = (65536-5000)/256;
TL0 = (65536-5000)%256;
pos++;
if(pos>1)pos=0;
if(pos==0)
{
GW=1;SW=0;//注意顺序,否则显示就不对
P0 = encode[shi] | (0x80);
}//用定时器定时,显示每一位,就不能再调延时子程序了
else
{
SW=1;GW=0;//注意顺序,否则显示就不对
P0 = encode[ge];
}
}
仿真结果