zoukankan      html  css  js  c++  java
  • 51单片机 数码管的显示与译码器

    共阳极数组0~9:display[]={0xC0,0xF9,0xA4,0xB0,0x91,0xA2,0x82,0xF8,0x80,0x90}

    共阳极数组A~F:display[]={0x88,0x83,0xA6,0xC1,0x86,0x8E}

    共阴极数组0~9:display[]={0x3F,0x06,0x5B,0x4F,0x6E,0x6D,0x7D,0x07,0x7F,0x6F}

    共阴极数组A~F:display[]={0x77,0x7C,0x59,0x3E,0x79,0x71}

    共阴、两组四位一体数码管,位选接74LS138译码器,输入(位选)CBA接P20,P21,P22。段选通过74573后接P1口。

    若不使用译码器,可直接将位选段接IO口,赋值改变。

     1 /*******************************************************************************
     2 * 实 验 名         : 动态数码管显示
     3 * 实验说明         : 8位数码管依次显示0~7
     4 * 作    者         : L2
     5 * 时    间         : 2016-08-02
     6 
     7 *******************************************************************************/
     8 #include<reg51.h>
     9 
    10 #define GPIO_DIG P1         //Digitron  数码管
    11 sbit LSA= P2^0;
    12 sbit LSB= P2^1;
    13 sbit LSC= P2^2;
    14 
    15 unsigned char code DIG_CODE[10]={
    16 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //0~9的显示码
    17 void DigDisplay();
    18 
    19 void main(void)
    20 {
    21     while(1)
    22         DigDisplay();                
    23 }
    24 
    25 
    26 void DigDisplay()
    27 {
    28     unsigned char i;
    29     unsigned int j;
    30     for(i=0;i<8;i++)
    31     {
    32         switch(i)     //位选,选择点亮的数码管,
    33         {
    34             case(0):
    35                 LSA=0;LSB=0;LSC=0; break;//显示第0位
    36             case(1):
    37                 LSA=1;LSB=0;LSC=0; break;//显示第1位
    38             case(2):
    39                 LSA=0;LSB=1;LSC=0; break;//显示第2位
    40             case(3):
    41                 LSA=1;LSB=1;LSC=0; break;//显示第3位
    42             case(4):
    43                 LSA=0;LSB=0;LSC=1; break;//显示第4位
    44             case(5):
    45                 LSA=1;LSB=0;LSC=1; break;//显示第5位
    46             case(6):
    47                 LSA=0;LSB=1;LSC=1; break;//显示第6位
    48             case(7):
    49                 LSA=1;LSB=1;LSC=1; break;//显示第7位    
    50         }
    51         GPIO_DIG=DIG_CODE[i];//发送段码
    52         j=10000;                         //扫描间隔时间设定,若减少j,可观察到稳定显示的0~7 (扫描速度太快,人眼识别不了)
    53         while(j--);    
    54         GPIO_DIG=0x00;//消隐
    55     }
    56 }
     1 /*******************************************************************************
     2 * 实 验 名         : 数码管秒表显示
     3 * 实验说明         : 0~59依次显示
     4 * 作    者         : L2
     5 * 时    间         : 2016-08-03
     6 
     7 *******************************************************************************/
     8 #include<reg51.h>
     9 
    10 #define GPIO_DIG P1         //Digitron  数码管
    11 #define uchar unsigned char
    12 #define uint unsigned int
    13 sbit LSA= P2^0;
    14 sbit LSB= P2^1;
    15 sbit LSC= P2^2;
    16 
    17 uchar shi,ge,num1=0,num=0;
    18 uchar code DIG_CODE[10]={
    19 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //0~9的显示码
    20 void Delay5ms();
    21 void DigDisplay(uchar shi,uchar ge);
    22 
    23 
    24 void main()
    25 {                                                //200微秒@20MHz
    26     TMOD = 0x01;        //设置定时器模式
    27     TL0 = 0xA8;        //设置定时初值
    28     TH0 = 0xFD;    //设置定时初值
    29     EA = 1;         // 开总中断
    30     TF0 = 0;        //清除TF0标志
    31     ET0 = 1;        // 开定时器0中断
    32     TR0 = 1;        //定时器0开始计时
    33     while(1)
    34     {
    35         DigDisplay(shi,ge);
    36     }
    37 }
    38 
    39 void DigDisplay(uchar shi,uchar ge)
    40 {
    41     GPIO_DIG=DIG_CODE[shi];        //段选
    42     LSA=0;LSB=0;LSC=0; 
    43     Delay5ms();
    44     GPIO_DIG=DIG_CODE[ge];     
    45     LSA=1;LSB=0;LSC=0;
    46     Delay5ms();   
    47 }
    48 
    49 void Timer0Init(void) interrupt 1
    50 {
    51     TL0 = 0xA8;        //重装初
    52     TH0 = 0xFD;
    53     num1++;
    54     if(num1==200)         //5次200ms即为1s到
    55     {
    56          num1=0;
    57          num++;
    58          if(num==60)
    59              num=0;
    60          shi=num/10;
    61          ge = num%10;
    62     }    
    63 }
    64 
    65 
    66 void Delay5ms()        //@12.000MHz
    67 {
    68     unsigned char i, j;
    69 
    70     i = 59;
    71     j = 90;
    72     do
    73     {
    74         while (--j);
    75     } while (--i);
    76 }
  • 相关阅读:
    C#的编码规范中文版(www.idesign.net Author: Juval Lowy)
    [经典推荐]事半功倍系列之javascript(二)
    [推荐]让SQL跑得更快
    SortedList 用法
    在C#中应用哈希表(Hashtable)
    SVN配置安装
    sql事务处理回滚及保留点transaction,ROLLBACK
    启用Service Broker
    BLOB
    WebServiceBinding属性
  • 原文地址:https://www.cnblogs.com/l20902/p/5732477.html
Copyright © 2011-2022 走看看