|
在網(wǎng)上找了兩個程序,“拼接”了下,能滿足你目前提出的要求(P1口每次設(shè)置后,需重新啟動proteus)。
無標(biāo)題.jpg (251.19 KB, 下載次數(shù): 147)
下載附件
2017-2-9 10:04 上傳
//U1串口接收數(shù)據(jù)加上P1開關(guān)設(shè)置的值,在P0口用16進(jìn)制數(shù)碼顯示。
//數(shù)碼管動態(tài)掃描顯示。
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit D1=P2^0;
sbit D2=P2^1;
sbit D3=P2^2;
sbit D4=P2^3;
char n=0;
unsigned char code LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(unsigned char us) //延遲函數(shù)
{
for(;us!=0;us--);
}
void init() //初始化函數(shù)
{
TMOD=0x20; //設(shè)置定時器T1工作于方式2
SCON=0x50; //串口工作方式1,允許接收數(shù)據(jù)
TH1=0xfd; //波特率為2400b/s
TL1=0xfd;
TR1=1; //啟動定時器T1
REN=1; //允許接收數(shù)據(jù)
D1=0; //上電默認(rèn)是高電平,所以先初始化為低電平
D2=0;
D3=0;
D4=0;
}
void Led_display(unsigned int temp) //數(shù)碼管顯示函數(shù)
{
P0=LED[temp%16]; //a的各位數(shù)
D4=1; //打開D4,顯示
delay(20); //延遲,給硬件有響應(yīng)時間
D4=0; //關(guān)閉D4
P0=0xff; //P2全部為高電平,以免下次顯示出錯,稱為“消隱”
delay(20);
P0=LED[temp/16%16]; //a的十位數(shù)
D3=1; //打開D3
delay(20);
D3=0; //關(guān)閉D3
P0=0xff;
delay(20);
P0=LED[temp/256%16]; //a的百位數(shù)
D2=1; //打開D2
delay(20);
D2=0; //關(guān)閉D2
P0=0xff;
delay(20);
P0=LED[temp/4096]; //a的千位數(shù)
D1=1; //打開D1
delay(20);
D1=0; //關(guān)閉D1
P0=0xff;
delay(20);
}
unsigned char receive(void) //數(shù)據(jù)接收函數(shù)
{
unsigned char dat;
while(RI==0); //數(shù)據(jù)沒有接收完畢時等待接收
RI=0; //接收完畢時清零
dat=SBUF; //將接收緩沖器中的數(shù)據(jù)存入dat
return dat; //將接收到的數(shù)據(jù)返回
}
void main(void)
{
unsigned int temp=0;
init(); //初始化
temp=receive()+P1; //將接收到的數(shù)據(jù)送到P1口顯示
while(1)
{
Led_display(temp); //數(shù)碼管顯示
}
}
//U2程序如下:
//串口通信,接收、發(fā)送數(shù)據(jù) 這是U2的程序
//U2發(fā)送數(shù)據(jù)給U1,U3\U4控制LED顯示P1口輸入數(shù)
//根據(jù)U2的P1端口開關(guān)閉合情況,發(fā)送相應(yīng)數(shù)據(jù)
#include <reg51.h>
unsigned char temp=0;
void main()
{
//設(shè)置定時器1
TMOD=0x20;//8位自動重裝在
TH1=0xFD;
TL1=0xFD;//波特率為9600
SCON=0x50;//1位啟動位,8位數(shù)據(jù)位,1位停止位,REN開啟,可以接收
TR1=1;//啟動定時器,開始產(chǎn)生波特率
while(1)
{
if(temp!=P1)//如果P1口開關(guān)發(fā)生變化
{
temp=P1;//賦值
SBUF=P1;//寫入數(shù)據(jù)
while(0==TI);//等待發(fā)送完成
TI=0;//清除中斷標(biāo)志
}
}
}
|
|