微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > proteus与keil Cx51的单片机仿真(串行通信口)

proteus与keil Cx51的单片机仿真(串行通信口)

时间:11-24 来源:互联网 点击:
单片机串行口工作于方式0,通过74LS164实现串并转换,来控制共阳极数码管的显示,当按下K01按钮显示2010,按下K02键显示1987,按下K03键显示0606,按下K04键显示1988,按下K05键显示1224。其中数字显示可由自己设定.

电路图:



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};//串行方式下共阳极数码管段码表0~9
unsigned char leddis[4]={0,1,2,3};//显存,有几个数码管进行定义
void display(void)//数码管显示函数
{
unsigned char count;//数码管个数
P2_0=0;//P2.0引脚输出清零信号,对74LS164清零
_nop_();
_nop_();//延时,保证清零完成
P2_0=1;//结束对74LS164清零
for(count=4;count>0;count--)
{
SBUF=discode[leddis[count-1]];
while(TI==0);TI=0;
}
}
void main()
{
SCON=0x00;//设定UART的工作方式为方式0
leddis[0]=0;leddis[1]=1;leddis[2]=2;leddis[3]=3;//显示内容初始化
display();//显示函数
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;}
}
}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top