数码管显现在51单片机里边也是很经典的进程。由于IO口有限,所以数码管的数据端口与选通端口使用了相同的IO端口,避免数据与选通信号紊乱,这儿使用了两个锁存器,用于区分选通信号与数据信号。在实践工程开发中,IO复用的状况仍是很常见的,所以把握复用IO的操控进程就显得很重要了。
原理图:
代码如下:具体阐明见注释。
//在6个数码管上面显现数字0-6,时刻距离是1s。数码管1显现1,1S封闭,数码管2显现2,1S封闭~~~~~~~~~~
#include //头文件
#define uint unsigned int //界说宏–无符号整型
#define uchar unsigned char //界说宏–无符号字符型
sbit duanxuan=P2^6; //声明P2.6端口为段选端
sbit pianxuan=P2^7; //声明P2.7端口为片(位)选端
void delay_1s(uint); //声明延时函数–延时一秒
uint xs; //延时函数用
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //C言语编码界说
void main() //主函数进口
{
xs=20; //参数越小,就可以完成6个数码管一同显现数字
while(1)
{
pianxuan=1; //翻开片选锁存器
P0=0xfe; //履行片选,挑选第1个数码管
pianxuan=0; //封闭锁存器,锁存器输出端坚持不变
P0=0x00;
duanxuan=1; //翻开段选端
P0=table[1]; //显现数字1
duanxuan=0; //封闭段选端,数字坚持
delay_1s(xs); //延时xS
pianxuan=1;
P0=0xfd; //挑选第2个数码管
pianxuan=0;
P0=0x00;
duanxuan=1;
P0=table[2]; //显现数字2
duanxuan=0;
delay_1s(xs);
pianxuan=1;
P0=0xfb; //挑选第3个数码管
pianxuan=0;
P0=0x00;
duanxuan=1;
P0=table[3]; //显现数字3
duanxuan=0;
delay_1s(xs);
pianxuan=1;
P0=0xf7; //挑选第4个数码管
pianxuan=0;
P0=0x00;
duanxuan=1;
P0=table[4]; //显现数字5
duanxuan=0;
delay_1s(xs);
pianxuan=1;
P0=0xef; //挑选第5个数码管
pianxuan=0;
P0=0x00;
duanxuan=1;
P0=table[5]; //显现数字5
duanxuan=0;
delay_1s(xs);
pianxuan=1;
P0=0xdf; //挑选第6个数码管
pianxuan=0;
P0=0x00;
delay_1s(xs);
duanxuan=1;
P0=table[6]; //显现数字6
duanxuan=0;
delay_1s(xs);
}
}
void delay_1s(uint xs) //延时函数主体
{
uint i,j;
for(i=xs;i>0;i–)
{
for(j=10;j>0;j–)
{
}
}
}
以上,数码管显现完毕。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/259173.html