51单片机控制数码管显示时间代码 - 基于P0口位选和P2口段选
这里提供一个基于51单片机的控制数码管显示时间的代码:
#include<reg52.h> //51单片机头文件
sbit D1=P2^0; //定义数码管'a'段连接的P2.0口
sbit D2=P2^1; //定义数码管'b'段连接的P2.1口
sbit D3=P2^2; //定义数码管'c'段连接的P2.2口
sbit D4=P2^3; //定义数码管'd'段连接的P2.3口
sbit D5=P2^4; //定义数码管'e'段连接的P2.4口
sbit D6=P2^5; //定义数码管'f'段连接的P2.5口
sbit D7=P2^6; //定义数码管'g'段连接的P2.6口
sbit D8=P2^7; //定义数码管'dp'段连接的P2.7口
sbit LSA=P0^0; //定义数码管第一位的选择端LSA连接的P0.0口
sbit LSB=P0^1; //定义数码管第二位的选择端LSB连接的P0.1口
sbit LSC=P0^2; //定义数码管第三位的选择端LSC连接的P0.2口
unsigned char code table[] = { //定义显示0~9的编码表
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
void delay(unsigned int x) { //延时函数
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<110;j++);
}
void main() {
unsigned char hour=0,minute=0,second=0; //时分秒变量
while(1) {
LSA=0;LSB=0;LSC=1; //选择第一位数码管
P2=table[hour/10]; //显示十位数
delay(5); //延时一段时间
P2=0x00; //清空数码管
LSA=0;LSB=0;LSC=1; //选择第一位数码管
P2=table[hour%10]; //显示个位数
delay(5); //延时一段时间
P2=0x00; //清空数码管
LSA=0;LSB=1;LSC=0; //选择第二位数码管
P2=table[minute/10]; //显示十位数
delay(5); //延时一段时间
P2=0x00; //清空数码管
LSA=0;LSB=1;LSC=0; //选择第二位数码管
P2=table[minute%10]; //显示个位数
delay(5); //延时一段时间
P2=0x00; //清空数码管
LSA=1;LSB=0;LSC=0; //选择第三位数码管
P2=table[second/10]; //显示十位数
delay(5); //延时一段时间
P2=0x00; //清空数码管
LSA=1;LSB=0;LSC=0; //选择第三位数码管
P2=table[second%10]; //显示个位数
delay(5); //延时一段时间
P2=0x00; //清空数码管
second++; //秒数加1
if(second==60) { //如果秒数达到60,则分钟加1
second=0;
minute++;
if(minute==60) { //如果分钟达到60,则小时加1
minute=0;
hour++;
if(hour==24) //如果小时达到24,则清零
hour=0;
}
}
}
}
该代码通过P0口控制数码管的位选,P2口控制数码管的段选,实现了显示当前时间的功能。需要注意的是,该代码中的延时时间需要根据具体硬件环境进行调整,以保证数码管的显示效果。
原文地址: https://www.cveoy.top/t/topic/l3aW 著作权归作者所有。请勿转载和采集!