目录
本专栏所有引脚及端口 代码及注解 选择的是BST-V51 单片机
需结合具体的单片机原理图进行分析
接下来的本专栏都选择该单片机及其原理图分析来进行操作
3.1 静态数码管显示
P0 可以定义控制数码管的位选和段选信号所选中的数码管
while(1){
P0 = 0xf3; //1111 0011; 选中第 3,4 号数码管
//先传入位选信号 选中其中一个数码管
P27 = 1;
P27 = 0;
P0 = 0x4f; //01001111 dpGFEDCBA ...3
//再传入段选信号 显示传入数据,然后上传
P26 = 1;
P26 = 0;
delay_ms(1);
}
P2^7 号引脚控制位选信号,P2^6 控制段选信号
3.2 动态数码管显示
#include <STC89C5xRC.H>
#include <DELAYMS.H>
char leddate[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };//定义数组 0-9 的数码管显示
void ShuMaGuan(unsigned int choose,int number){
switch(choose){
case 1:P0 = 0xfe;P27 = 1;P27 = 0;break;
case 2:P0 = 0xfd;P27 = 1;P27 = 0;break;
case 3:P0 = 0xfb;P27 = 1;P27 = 0;break;
case 4:P0 = 0xf7;P27 = 1;P27 = 0;break;
case 5:P0 = 0xef;P27 = 1;P27 = 0;break;
case 6:P0 = 0xdf;P27 = 1;P27 = 0;break;
case 7:P0 = 0xbf;P27 = 1;P27 = 0;break;
case 8:P0 = 0x7f;P27 = 1;P27 = 0;break;
default: P10 = 0; delay_ms(500);P10 = 1; break;//如果没有选中数码管则点亮红灯 500ms
}
P0 = leddate[number];
P26 = 1; P26 = 0;
//数码管实现消影(避免出现错乱) 段码清 0,消影
//位选 段选(中间需要将段选清零 P26 = 0) 位选 段选 清零 位选 段选
//清零:消除影响
}
void LiuDong(){
unsigned int i;
for(i = 8;i>=0;i-- ){
ShuMaGuan(i,i);
delay_ms(300);
if(i == 0){
i = 9;
}
}
}
int main(){
while(1){
LiuDong();
}
}
我目前是一名计算机专业的学生,我会不断地在各大平台分享我的所学,让知识得到共享,希望大家多多关注,一起从学习计算机基础直到计算机的深入式学习,让我们共同进步吧。