當前位置:編程學習大全網 - 編程語言 - 8563編程

8563編程

三個HC595s由89C51控制。前兩個HC595s連接八個數碼管,“0”~“9”的顯示每秒跳動壹次。第三個HC595連接八個LED燈,每1秒閃爍1次。

# 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的程序。

  • 上一篇:電氣工程師個人簡歷
  • 下一篇:計算機中級考試和計算機2級考試有什麽區別?
  • copyright 2024編程學習大全網