实验内容:1.各用一颗独立按键控制静态数码管的亮灭、加,减和归零;
2.k1控制数码管开与关;k2控制数值加,k3控制数值减;k4控制数码管清零。
PS:1.数值显示范围为0-9,当超出 此范围时数码管将自动置0值;
2.只有当数码管开启时,k2、k3和k4才能工作,否则不工作.
采用STC89C52单片机,选择普中-单核-A2开发版上第一颗数码管用于显示。如下图。
实验效果如下:
程序:
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
sbit lm0=P0^0;
sbit lm1=P0^1;
int m=0;
u8 code smgduan[]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d,0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c,
0x39 , 0x5e , 0x79 , 0x71};
void yanshi(u16 i)
{
while(i--);
}
void keypros()
{
if(k1==0)
{
yanshi(1000);
if(k1==0)
{
if(lm0||lm1)
P0=0x00;
else
P0=0x3f;
}
while(!k1);
}
if(k2==0)
{
yanshi(1000);
if(k2==0)
{
if(lm0||lm1)
{
m=m+1;
if(m>9)
m=0;
P0=smgduan[m];
}
}
while(!k2);
}
if(k3==0)
{
yanshi(1000);
if(k3==0)
{
if(lm0||lm1)
{
m=m-1;
if(m<0)
m=0;
P0=smgduan[m];
}
}
while(!k3);
}
if(k4==0)
{
yanshi(1000);
if(k4==0)
{
if(lm0||lm1)
{
P0=0x3f;
m=0;
}
}
while(!k4);
}
}
void main()
{
LSA=0;LSB=0;LSC=0;
P0=0x00;
while(1)
{
keypros();
}
}