0
点赞
收藏
分享

微信扫一扫

STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字

手动显示

#include <reg52.h>//包含51头文件
#include <intrins.h>//包含移位标准库函数头文件

#define uint unsigned int
#define uchar unsigned char

sbit&nbsp;DU&nbsp;=&nbsp;P2^6;//数码管段选
sbit&nbsp;WE&nbsp;=&nbsp;P2^7;//数码管段选

//共阴数码管段选表0-9
uchar&nbsp;code&nbsp;tabel[]=&nbsp;{0x3F,&nbsp;0x06,&nbsp;0x5B,&nbsp;0x4F,&nbsp;0x66,&nbsp;0x6D,&nbsp;0x7D,&nbsp;0x07,&nbsp;0x7F,&nbsp;0x6F,};

/*====================================
函数 : delay(uint z)
参数 :z 延时毫秒设定,取值范围0-65535
返回值 :无
描述 :12T/Fosc11.0592M毫秒级延时
====================================*/
void&nbsp;delay(uint&nbsp;z)
{
uint&nbsp;x,y;
for(x&nbsp;=&nbsp;z;&nbsp;x&nbsp;&gt;&nbsp;0;&nbsp;x--)
for(y&nbsp;=&nbsp;114;&nbsp;y&nbsp;&gt;&nbsp;0&nbsp;;&nbsp;y--);&nbsp;
}&nbsp;

/*====================================
描述 :两位共阴数码管动态显示
====================================*/
void&nbsp;display(uchar&nbsp;num1,&nbsp;uchar&nbsp;num2)
{

/*第一位显示*/&nbsp;
P0&nbsp;=&nbsp;0XFF;//清除断码
WE&nbsp;=&nbsp;1;//打开位选锁存器
P0&nbsp;=&nbsp;0XFE;&nbsp;//1111 1110
WE&nbsp;=&nbsp;0;//锁存位选数据

DU&nbsp;=&nbsp;1;//打开段选锁存器
P0&nbsp;=&nbsp;tabel[num1];//
DU&nbsp;=&nbsp;0;//锁存段选数据
delay(1);

/*第二位显示*/
P0&nbsp;=&nbsp;0XFF;//清除断码
WE&nbsp;=&nbsp;1;//打开位选锁存器
P0&nbsp;=&nbsp;0XFD;&nbsp;//1111 1101
WE&nbsp;=&nbsp;0;//锁存位选数据

DU&nbsp;=&nbsp;1;//打开段选锁存器
P0&nbsp;=&nbsp;tabel[num2];//
DU&nbsp;=&nbsp;0;//锁存段选数据
delay(1);

}

void&nbsp;main()//main函数自身会循环
{
while(1)
{
display(0,&nbsp;0);&nbsp;//数码管显示函数
}
}

说明:

由于传参的缘故,显示 00——10 共 11 个数字只需要调用
自定义的函数void display(uchar num1, uchar num2)
依次传入:

display(0&nbsp;,1);
display(0&nbsp;,2);
display(0&nbsp;,3);
display(0&nbsp;,4);
display(0&nbsp;,5);
display(0&nbsp;,6);
display(0&nbsp;,7);
display(0&nbsp;,8);
display(0&nbsp;,9);
display(1&nbsp;,0);

所以以上其它代码不再复制。

自动显示

#include <reg52.h>//包含51头文件
#include <intrins.h>//包含移位标准库函数头文件

#define uint unsigned int
#define uchar unsigned char

sbit&nbsp;DU&nbsp;=&nbsp;P2^6;//数码管段选
sbit&nbsp;WE&nbsp;=&nbsp;P2^7;//数码管段选
uchar&nbsp;count&nbsp;=&nbsp;0;&nbsp;// 控制数码管显示的变量
uchar&nbsp;i&nbsp;=&nbsp;0;&nbsp;&nbsp;// 控制循环次数的变量

//共阴数码管段选表0-9
uchar&nbsp;code&nbsp;tabel[]=&nbsp;{0x3F,&nbsp;0x06,&nbsp;0x5B,&nbsp;0x4F,&nbsp;0x66,&nbsp;0x6D,&nbsp;0x7D,&nbsp;0x07,&nbsp;0x7F,&nbsp;0x6F,};

/*====================================
函数 : delay(uint z)
参数 :z 延时毫秒设定,取值范围0-65535
返回值 :无
描述 :12T/Fosc11.0592M毫秒级延时
====================================*/
void&nbsp;delay(uint&nbsp;z)
{
uint&nbsp;x,y;
for(x&nbsp;=&nbsp;z;&nbsp;x&nbsp;&gt;&nbsp;0;&nbsp;x--)
for(y&nbsp;=&nbsp;114;&nbsp;y&nbsp;&gt;&nbsp;0&nbsp;;&nbsp;y--);&nbsp;
}&nbsp;

/*====================================
描述 :两位共阴数码管动态显示
====================================*/
void&nbsp;display(uchar&nbsp;num1,&nbsp;uchar&nbsp;num2)
{

/*第一位显示*/&nbsp;
P0&nbsp;=&nbsp;0XFF;//清除断码
WE&nbsp;=&nbsp;1;//打开位选锁存器
P0&nbsp;=&nbsp;0XFE;&nbsp;//1111 1110
WE&nbsp;=&nbsp;0;//锁存位选数据

DU&nbsp;=&nbsp;1;//打开段选锁存器
P0&nbsp;=&nbsp;tabel[num1];//
DU&nbsp;=&nbsp;0;//锁存段选数据
delay(1);

/*第二位显示*/
P0&nbsp;=&nbsp;0XFF;//清除断码
WE&nbsp;=&nbsp;1;//打开位选锁存器
P0&nbsp;=&nbsp;0XFD;&nbsp;//1111 1101
WE&nbsp;=&nbsp;0;//锁存位选数据

DU&nbsp;=&nbsp;1;//打开段选锁存器
P0&nbsp;=&nbsp;tabel[num2];//
DU&nbsp;=&nbsp;0;//锁存段选数据
delay(1);

}


/*====================================
变量 count:负责控制点亮哪2个数码管,例如count 为1 则点亮 01 数码管
描述 :由于同时点亮2个数码管,需要2个数码管不断的循环才能实现2个数码管同时点亮
所以在这里将数码管显示在单片机的代码封装起来,来让我们调用。
====================================*/
void&nbsp;singlechip_show_num(uchar&nbsp;count){ &nbsp;
switch(count){ // 通过 switch case 语句对 数码管的数值进行精准的管理
&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0&nbsp;,&nbsp;0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0&nbsp;,&nbsp;1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
case&nbsp;2&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0&nbsp;,&nbsp;2);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
case&nbsp;3&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0&nbsp;,&nbsp;3);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
case&nbsp;4&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0&nbsp;,&nbsp;4);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
case&nbsp;5&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0&nbsp;,&nbsp;5);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
case&nbsp;6&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0&nbsp;,&nbsp;6);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;
case&nbsp;7&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0&nbsp;,&nbsp;7);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;
case&nbsp;8&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0&nbsp;,&nbsp;8);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
case&nbsp;9&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0&nbsp;,&nbsp;9);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
case&nbsp;10&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(1&nbsp;,&nbsp;0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}

}

void&nbsp;main()//main函数自身会循环
{
while(1)
{
for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;200;&nbsp;i++){ &nbsp;&nbsp;// 使点亮的数码管循环 200 次,保证人眼能够看到的数码管是同时显示的。
singlechip_show_num(count); &nbsp;&nbsp;// 调用数码管显示函数
}

count++;&nbsp;//每次循环200次结束, count 变量自身+1,单片机显示+1后的数值

if(count&nbsp;==&nbsp;11){ // 当count 变量 等于11时,我们把变量再重新初始化为0,从0重新开始计数循环
count&nbsp;=&nbsp;0;
}
}
}

效果显示:
STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字_数据
STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字_数码管_02
STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字_头文件_03
STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字_头文件_04

STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字_头文件_05

STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字_头文件_06
STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字_头文件_07
STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字_数码管_08
STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字_数据_09
STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字_头文件_10
STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字_数码管_11


举报

相关推荐

0 条评论