# include & ltintrins.h & gt
#定義uint無符號整數
#定義uchar無符號字符
#定義nop _nop_()
uchar代碼WE0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x 80 };//0x40-不帶點
//無符號char碼WE1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xf0,0xef,0x 80 };//0-9帶點
uchar碼W[]={0xfe,0xfd,0xfb,0xf 7 };
無符號字符溫度[3];
sbit rx=p3^4;//接收器,回聲
sbit tx=p3^5;//控制終端,觸發器
sbit wei=p2^7;
sbit duan=p2^6;
位標誌= 0;
uint time = 0;
uint s = 0;
Void delay(int xms)//延遲大約是x毫秒。
{
int i,j;
for(I = xms;我& gt0;我-)
for(j = 110;j & gt0;j-);
}
Void start() //給出至少10us的高電平來啟動模塊。
{
TX = 1;
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
TX = 0;
}
uchar計數()
{
時間= TH0 * 256+TL0;
TH0 = 0;
TL0 = 0;//清除
s=(時間* 1.7)/100;//cm
返回s;
}
Void dispros()//數據分段
{
temp[0]= s/100% 10;//數百
temp[1]= s/10% 10;//十個人
temp[2]= s % 10;//位
}
Void display() //顯示函數
{
if(s & gt;= 500 | | s & lt=2) //進入盲區,溢出?
{
烏恰爾壹世;
s = 0;
TH0 = 0;
TL0 = 0;//清除
P0 = 0x40
段= 1;
段= 0;
for(I = 0;我& lt3;i++)
{
P0 = W[I];
魏= 1;
魏= 0;
}
}
Else //正常顯示
{
魏= 1;
P0 = 0xfe
魏= 0;
段= 1;
P0 = WE0[temp[0]];
延遲(3);
段= 0;
魏= 1;
P0 = 0xfd
魏= 0;
段= 1;
P0 = WE0[temp[1]];
延遲(2);
段= 0;
魏= 1;
P0 = 0xfb
魏= 0;
段= 1;
P0 = WE0[temp[2]];
延時(1);
}
}
void main()
{
TMOD = 0x 01;//定時器工作模式0
TH0 = 0;
TL0 = 0;
EA = 1;//打開主機中斷
ET0 = 1;//打開定時器中斷
while(1)
{
start();//啟動模塊
而(!RX);//當RX為零時等待
TR0 = 1;//開始計數
while(RX);//RX為1時計數等待。
TR0 = 0;//關閉計數器
count();//計數
dispros();//處理,劃分數據
顯示();//顯示
延時(1);
}
}