基于51单片机的数码管显示实验
动态显示3.141
#include <REGX52.H>
sbit SegmentG1=P2^3;//定义数码管1
sbit SegmentG2=P2^2;//定义数码管2
sbit SegmentG3=P2^1;//定义数码管3
sbit SegmentG4=P2^0;//定义数码管4
static unsigned char s_arrNumber[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//定义数码管显示数字0~9
static void DelayNms(unsigned int xms);
static void DelayNms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms!=0)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
P0=0x0c; //数码管1显示为3.
SegmentG1=0; //打开数码管1
DelayNms(5); //延时5ms
SegmentG1=1; //关闭数码管1
P0=s_arrNumber[1]; //数码管2显示为数字1
SegmentG2=0; //打开数码管2
DelayNms(5); //延时5ms
SegmentG2=1; //关闭数码管2
P0=s_arrNumber[4]; //数码管3显示为数字4
SegmentG3=0; //打开数码管3
DelayNms(5); //延时5ms
SegmentG3=1; //关闭数码管3
P0=s_arrNumber[1]; //数码管4显示为数字1
SegmentG4=0; //打开数码管4
DelayNms(5); //延时5ms
SegmentG4=1; //关闭数码管4
}
按键计数器
include <REGX52.H>
sbit SegmentG1=P2^3;//定义数码管1
sbit SegmentG2=P2^2;//定义数码管2
sbit SegmentG3=P2^1;//定义数码管3
sbit SegmentG4=P2^0;//定义数码管4
sbit KEY1=P3^2; //定义按键1
static unsigned char s_arrNumber[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//定义数码管显示数字0~9
static void DelayNms(unsigned int xms);
static void DelayNms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms!=0)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
unsigned short num1=0;
unsigned short num2=0;
unsigned short key_state=1; // 记录按键状态
//
while(1)
{
P0=s_arrNumber[num1];
SegmentG3=0;
DelayNms(5); //延时5ms
SegmentG3=1; //关闭数码管3
P0=s_arrNumber[num2];
SegmentG4=0; //打开数码管4
DelayNms(5); //延时5ms
SegmentG4=1; //关闭数码管4
if(KEY1==0)
{
DelayNms(10);
while(KEY1==0); //消抖
if(key_state) //如果按键按下,state会变为0,表示按键按下
{
key_state=0;
num2++; //按下后个位数++
if(num2>9) //个位数大于9后清零并且十位数++
{
num2=0;
num1++;
if(num1>9)
{
num1=0;
}
}
}
}
else //若未按下,将state调整为1,表示按键未按下
{
key_state=1;
}
}
}