200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 51单片机protues仿真——按键控制数码管移位显示

51单片机protues仿真——按键控制数码管移位显示

时间:2018-07-26 07:24:09

相关推荐

51单片机protues仿真——按键控制数码管移位显示

大家好,这里是蓝影DIY电路。

这里采用的是protues软件对51单片机进行仿真,代码是利用keil进行编程,其语法格式为C语言。

主要实现的功能有:

按下K1时加1计数并增加显示位,按下K2时减1计数并减少显示位,按下K3时清零。

核心代码如下:

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

//段码

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//位码

uchar code DSY_Index[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

//待显示到各数码管的数字缓冲(开始仅在0位显示0,其他黑屏)

uchar Display_Buffer[]={0,10,10,10,10,10,10,10};

//延时

void DelayMS(uint x)

{

uchar i;

while(x--) for(i=0;i<120;i++);

}

void Show_Count_ON_DSY()

{

uchar i;

for(i=0;i<8;i++)

{

P0=0xff;

P0=DSY_CODE[Display_Buffer[i]];

P2=DSY_Index[i];

DelayMS(5);

}

}

//主程序

void main()

{

uchar i,Key_NO,Key_Counts=0;

P0=0xff;

P1=0xff;

P2=0x00;

while(1)

{

Show_Count_ON_DSY();

P1=0xff;

Key_NO=P1;

//P1口按键状态分别为K1-0xfe,K2-0xfd,K3-0xfb

switch(Key_NO)

{

case 0xfe: Key_Counts++;

if(Key_Counts>8) Key_Counts=8;

Display_Buffer[Key_Counts-1]=Key_Counts;

break;

case 0xfd: if(Key_Counts>0)Display_Buffer[--Key_Counts]=10;

break;

case 0xfb: Display_Buffer[0]=0;

for(i=1;i<8;i++) Display_Buffer[i]=10;

Key_Counts=0;

}

//若键未释放则仅刷新显示,不进行键扫描

while(P1!=0xff) Show_Count_ON_DSY();

}

}

本次代码的核心在于条件选择语句

switch(表达式){

case 值1: 表达式的值和 值1匹配上了,需要执行的代码; break;

case 值2: 表达式的值和 值2匹配上了,需要执行的代码;break;

case 值3: 表达式的值和 值3匹配上了,需要执行的代码;break;

default: 如果表达式的值和以上的case后面的值都没有匹配上,那么就执行这里的代码。 break;

}

//不写break会直接执行下一个case语句直到遇到break才终止,若是没有break语句,则一直向下执行所有语句。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。