proteus與keil Cx51的單片機(jī)仿真(串行通信口)
電路圖:
本文引用地址:http://butianyuan.cn/article/201611/320719.htm
C程序:
#include
#include
#include
#define uchar unsigned char//宏定義
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P2_0=P2^0;
uchar code discode[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//串行方式下共陽極數(shù)碼管段碼表0~9
unsigned char leddis[4]={0,1,2,3};//顯存,有幾個數(shù)碼管進(jìn)行定義
void display(void)//數(shù)碼管顯示函數(shù)
{
unsigned char count;//數(shù)碼管個數(shù)
P2_0=0;//P2.0引腳輸出清零信號,對74LS164清零
_nop_();
_nop_();//延時,保證清零完成
P2_0=1;//結(jié)束對74LS164清零
for(count=4;count>0;count--)
{
SBUF=discode[leddis[count-1]];
while(TI==0);TI=0;
}
}
void main()
{
SCON=0x00;//設(shè)定UART的工作方式為方式0
leddis[0]=0;leddis[1]=1;leddis[2]=2;leddis[3]=3;//顯示內(nèi)容初始化
display();//顯示函數(shù)
while(1)
{
if(P1_1==0)//K01按下,即P1_1被按下,顯示2010
{leddis[0]=2;leddis[1]=0;leddis[2]=1;leddis[3]=0;
display();
P1_1=1;}
if(P1_2==0)//K02按下,即P1_2被按下,顯示1987
{leddis[0]=1;leddis[1]=9;leddis[2]=8;leddis[3]=7;
display();
P1_2=1;}
if(P1_3==0)//K03按下,即P1_3被按下,顯示0606
{leddis[0]=0;leddis[1]=6;leddis[2]=0;leddis[3]=6;
display();
P1_3=1;}
if(P1_4==0)//K04按下,即P1_4被按下,顯示1988
{leddis[0]=1;leddis[1]=9;leddis[2]=8;leddis[3]=8;
display();
P1_4=1;}
if(P1_5==0)//K05按下,即P1_5被按下,顯示1224
{leddis[0]=1;leddis[1]=2;leddis[2]=2;leddis[3]=4;
display();
P1_5=1;}
}
}
評論