3.单片机 数码管显示

目录

3.1 静态数码管显示

3.2 动态数码管显示

本专栏所有引脚及端口 代码及注解 选择的是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 动态数码管显示

 

 1 #include <STC89C5xRC.H>
 2 #include <DELAYMS.H>
 3 char leddate[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };//定义数组 0-9 的数码管显示
 4 void ShuMaGuan(unsigned int choose,int number){
 5     switch(choose){
 6         case 1:P0 = 0xfe;P27 = 1;P27 = 0;break;
 7         case 2:P0 = 0xfd;P27 = 1;P27 = 0;break;
 8         case 3:P0 = 0xfb;P27 = 1;P27 = 0;break;
 9         case 4:P0 = 0xf7;P27 = 1;P27 = 0;break;
10         case 5:P0 = 0xef;P27 = 1;P27 = 0;break;
11         case 6:P0 = 0xdf;P27 = 1;P27 = 0;break;
12         case 7:P0 = 0xbf;P27 = 1;P27 = 0;break;
13         case 8:P0 = 0x7f;P27 = 1;P27 = 0;break;
14         default: P10 = 0; delay_ms(500);P10 = 1; break;//如果没有选中数码管则点亮红灯 500ms
15     }
16     P0 = leddate[number]; 
17     P26 = 1;    P26 = 0;
18 //数码管实现消影(避免出现错乱) 段码清 0,消影
19 //位选 段选(中间需要将段选清零 P26 = 0) 位选 段选 清零 位选 段选
20 //清零:消除影响
21 }
22 void LiuDong(){
23     unsigned int i;
24     for(i = 8;i>=0;i-- ){
25         ShuMaGuan(i,i);
26         delay_ms(300);
27         if(i == 0){ 
28             i = 9;
29         } 
30     }      
31 }
32 int main(){
33     while(1){
34         LiuDong();  
35     }  
36 }

我目前是一名计算机专业的学生,我会不断地在各大平台分享我的所学,让知识得到共享,希望大家多多关注,一起从学习计算机基础直到计算机的深入式学习,让我们共同进步吧。

转载于: https://zhuanlan.zhihu.com/p/508409286

posted @ 2022-05-02 14:17  xiaoxie001  阅读(246)  评论(0编辑  收藏  举报