# include & ltat89x52.h & gt
# include & ltintrins.h & gt
#定義?烏恰爾?未簽名?茶
#定義?uint?未簽名?(同Internationalorganizations)國際組織
烏恰爾?table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x 90 };
uint?周期=0,cycle1=0,計數=0,key=0,ACK = 0x 01;?
/*******************************/
作廢?comend();
/*********************************/
//兩位數顯示子程序
/********************************/
作廢?sent_P0(uchar?temp1,uchar?Temp)//兩位數顯示
{?
P0 =表[temp 1];
p 1 _ 6 = 0;
p 1 = 0x ff;
P0 =表[溫度];
p 1 _ 7 = 0;
p 1 = 0x ff;?
}?
/*******************************/
//調整兩位數顯示操作的子程序
/*******************************/
作廢?set_LED()
{
TR0 = 1;//啟動T0中斷需要1S。
sent_P0(cycle,cycle 1);?
TR0 = 0;
}
/***********************************/
//T0中斷子程序
/**********************************/
作廢?Timer0Int(void)?打斷?1?使用?0?
{
count++;?
if(count = = 50)count = 0;?//中斷計數時間?
if(count==10)?this的計數值不能為零,否則不允許顯示。
{
cycle++;?//根據中斷計的時間,確定時間加法的速度。
}
if(循環==10)
{?
周期= 0;?//循環是位。
cycle 1++;?//cycle1是十位數。
}
if(cycle 1 = = 10)cycle 1 = 0;//if(RB8 = = 1)RI = 1;?
TH0 =(65536-10000)/256;
TL0 =(65536-10000)% 256;
}
/*******************************/
//串行中斷子程序
/*******************************/
作廢?Out_int(void)?打斷?4?使用?三
{
烏恰爾?溫度;
if(TI = = 1)TI = 0;
否則{
if(RB8==1)
{?
RB8 = 0;
而(!RI);RI = 0;?//ES = 0;?
temp = SBUF
if(0x01==temp)?//交叉引用地址
{
SM2 = 0;
TI = 0;?
SBUF = ACK?//回復主機。
而(!TI);TI = 0;?
}
不然呢?goto?停止;
}?
而(!RI);?RI = 0;?
temp = SBUF//SBUF是從串行接收寄存器接收到的主機發送的數據。
switch(temp)//switch語句控制是顯示還是停止。
{?
案子?0x01?:?//顯示
{?
key = 1;?
打破;
}
案子?0x02:?//停止
{
key = 2;?
打破;
}
默認:?;
}?
}
停:?;?
}
/************************************/
//主函數
/***********************************/
作廢?主要(無效)
{
SCON = 0xf 0;//串行中斷的工作模式以及打開和接收寄存器的設置
PCON = 0x 80;//將波特率設置為雙倍波特率。
th 1 = 0x F9;//將T1產生的波特率設置為4800*2=9600。
TMOD = 0x 21;//設置T1產生波特率並工作在模式2,T0工作在模式1?
TH0 =(65536-10000)/256;
TL0 =(65536-10000)% 256;
IE = 0x92?//打開T0中斷ET0和串行中斷ES和總中斷EA
tr 1 = 1;//打開T1中斷
IP = 0x 10;
p 1 = 0x ff;
而(1)?//當RB8=1時,系統自動申請中斷,不僅將RI設置為1;
{
if(key = = 1)set _ LED();
if(key = = 2)P0 = 0x ff;?
}
}
主機程序:
# include & ltat89x52.h & gt
# include & ltintrins.h & gt
#定義?烏恰爾?未簽名?夏爾?
#定義?uint?未簽名?(同Internationalorganizations)國際組織
uint?address1=0x01,ACK = 0x 01;
/*void?延遲(uint?n)
{
uint?我;
for(I = 0;我& ltn;i++);
}
*/
作廢?主要(無效)
{
烏恰爾?溫度;
SCON = 0xd 0;?
PCON = 0x 80;//SMOD=1,雙倍波特率。
TMOD = 0x 20;
th 1 = 0x F9;//設置波特率為4800*2=9600,必須和從機壹致才能發送正確的數據。
tr 1 = 1;
while(1)
{?
p 1 = 0x ff;
while(p 1 _ 0 = = 1);?
TB8 = 1;
SBUF = 0x 01;?//地址
而(!TI);TI = 0;
而(!RI);RI = 0;?
temp = SBUF?
If(ACK==temp)//驗證從機地址。
{?
P2 = 0x 00;?
TB8 = 0;
SBUF = 0x 01;?//發送第壹個命令?
而(!TI);TI = 0;
}
while(p 1 _ 1 = = 1);
TB8 = 1;
SBUF = 0x 01;//發送地址,再將地址發送給從機。
而(!TI);TI = 0;
而(!RI);RI = 0;?
temp = SBUF
if(ACK==temp)
{?
P2 = 0x ff;?
TB8 = 0;
SBUF = 0x02?//發送第二個命令?
而(!TI);TI = 0;
}
}
}
我不知道妳的電路圖是什麽樣的。我給妳壹個參考電路和用HC595數碼管顯示的程序。
數字鐘不知道妳用的是什麽芯片。。不會寫字。我這裏有8563的程序。