三、单片机学习——数码管实验(共阳)

实验目的:理解并掌握共阳数码管的显示原理;
     理解并掌握数码管静态显示和动态显示的原理;
实验模块:   核心板+独立按键模块+数码管模块
实验内容:(1)数码管静态显示,8 位数码管显示同一个数字;
        (2)数码管动态显示,8 位数码管显示不同的数字;

模块连接图:

 

电路原理图:
   

 

数码管内部结构图:

功能描述: 控制数码管8位动态扫描显示01234567
硬件连接:  用8位杜邦线将J8与J12连接,2位杜邦线分别将J11_0与J15_DS1、J11_1与J15_DS2连接。

#include "reg51.h"       //包含头文件
sbit LE1=P2^0;           //位选573锁存器使能
sbit LE2=P2^1;           //段选573锁存器使能

#define uchar unsigned char
#define uint  unsigned int
uchar wei;
uchar   i;
uchar code dis[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
                   //  0    1    2    3    4    5    6    7   
                     0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//0~F的段码
                   //  8    9    A    B    C    D    E    F 

//**************************************************************************************************
//延时函数
//**************************************************************************************************
delay(uint time)              //int型数据为16位,所以最大值为65535           
 {
  uint  i,j;                  //定义变量i,j,用于循环语句
  for(i=0;i<time;i++)         //for循环,循环50*time次
     for(j=0;j<50;j++);       //for循环,循环50次
 }
//**************************************************************************************************
//动态扫描函数
//**************************************************************************************************
scan()
{
     P1=~wei;                 //由于共阴,低电平来选通某1位,所以需取反
     LE1=1;                   //锁存位
     LE1=0;                   //断开锁存,位选573的Q7~Q0仍保持
     wei<<=1;                 //左移一位
     P1=dis[i];               //0~7的编码
     LE2=1;                   //锁存段码
     LE2=0;                   //断开锁存,段选573的Q7~Q0仍保持
     i++;                     //i加1
     delay(10);               //延时保持一下,延时过大会闪动,延时过小会有暗影   
    
     if(i==8){i=0;wei=0x01;}  //共8位,扫描到第8位时,重新扫描
     
}
//**************************************************************************************************
//主函数
//**************************************************************************************************
void main()                   //主函数
{
     wei=0x01;                //初始化位为0x01,即为最高位
     i=0;                     //初始化段码为0
     while(1)                 //进入while死循环
      {
        scan();               //数码管扫描函数
      }        
}

 

posted @ 2020-04-14 13:06  小豪、精神。  阅读(818)  评论(0编辑  收藏  举报