找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1553|回复: 0
收起左侧

数码管单片机驱动程序

[复制链接]
ID:257272 发表于 2017-12-4 16:53 | 显示全部楼层 |阅读模式
数码管驱动
单片机源程序如下:
Main.c
  1. #include        "reg51.h"
  2. #include        "DisplayUnit.h"
  3. void        main(void)
  4. {
  5.         DISP_Init();
  6.         DISP_Number(1234);
  7.         EA        =        1;
  8.         while(1)               
  9.         {
  10.         }
  11. }
  12. Display。C
  13. #include        "reg51.h"
  14. char        code        cSegments[16]        =       
  15. {
  16. 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
  17. 0x7F,0x6F,0x40,0x08,0x00,0x5E,0x79,0x71
  18. };
  19. char        code        cBits[4]        =       
  20. {
  21. 0xFE,0xFD,0xFB,0xF7
  22. };
  23. char        vSegValue[4];
  24. char        vIndex;

  25. void        DISP_Init(void)
  26. {
  27.         int        i;
  28.         //初始化本单元的全局变量
  29.         for(i=0;i<4;i++)
  30.         {
  31.                 vSegValue[i]        =        0;
  32.         }
  33.         vIndex        =        0;
  34.         //初始化定时器T0
  35.         TMOD        =        0x01;
  36.         ET0                =        1        ;
  37.         EA                =        1        ;
  38.         TR0                =        1        ;
  39.         TH0                =        0xEC;
  40.         TL0                =        0x78;
  41. }

  42. void          DISP_T0_ISR(void)        interrupt        1
  43. {
  44.         //重新预置初值
  45.         TH0        =        0xEC;
  46.         TL0        =        0x78;
  47.         //根据索引的值,操作端口,显示一位数字
  48.         P1        =        cBits[vIndex];
  49.         P0        =        vSegValue[vIndex];
  50.         //改变索引,当前正在显示的位的编号。0~4之间
  51.         vIndex++;
  52.         if(        vIndex        >=        4        )
  53.                 vIndex        =        0;
  54. }

  55. void        DISP_BitNum(char        WhichBit,char        WhichNum)
  56. {
  57.         //根据当前位和数字的参数
  58.         //把该数字对应的段的字模,存入指定位的数组中          vsegValue[0]        =        cSegments[1];
  59.         vSegValue[WhichBit]        =        cSegments[WhichNum];
  60. }

  61. void        DISP_Number(int        Value)
  62. {         
  63.         char        Number;
  64.         //提取Vlue的个十百千位的数字
  65.         //调用        DISP_BitNum        (调用4遍)函数,把需要显示的数字的字模,放入全局变量数组中
  66.         while        (Value        >=        1000)
  67.         {
  68.                 Number++;
  69.                 Value        -=        1000;
  70.         }
  71.         DISP_BitNum(0,Number);
  72.         Number        =        0;
  73.         while        (Value        >=        100)
  74.         {
  75.                 Number++;
  76.                 Value        -=        100;
  77.         }
  78.         DISP_BitNum(1,Number);
  79.         Number        =        0;
  80.         while        (Value        >=        10)
  81.         {
  82.                 Number++;
  83.                 Value        -=        10;
  84.         }
  85.         DISP_BitNum(2,Number);
  86.         DISP_BitNum(3,Value);
  87. }

  88. void        DISP_Low2(char        Value)
  89. {
  90.         //提取Value的个位十位
  91.         //调用 DISP_BitNum的函数两遍
  92.         char        Number=0;
  93.         while(Value        >=        10)
  94.         {
  95.         Number++;
  96.         Value        -=        10;
  97.         }
  98.         DISP_BitNum(2,Number);
  99.         DISP_BitNum(3,Value);
  100. }

  101. void        DISP_High2(char        Value)
  102. {
  103.         //提取Value的个位十位
  104.         //调用 DISP_BitNum的函数两遍
  105.         char        Number=0;
  106.         while(Value        >=        10)
  107.         {
  108.         Number++;
  109.         Value        -=        10;
  110.         }
  111.         DISP_BitNum(0,Number);
  112.         DISP_BitNum(1,Value);
  113. }


  114. D.h
  115. #ifndef                   __MY__Display__Unit_H___
  116. #define            __MY__Display__Unit_H___

  117. void        DISP_Init(void);
  118. void        DISP_BitNum(char        WhichBit,char        WhichNum);
  119. void        DISP_Number(int        Value);
  120. void        DISP_Low2(char        Value);
  121. void        DISP_High2(char        Value);

  122. #endif
复制代码

所有资料51hei提供下载:
数码管驱动.docx (16.18 KB, 下载次数: 4)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表