找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12066|回复: 2
收起左侧

8位数码管动态显示的单片机源码

[复制链接]
ID:301506 发表于 2018-4-3 15:17 | 显示全部楼层 |阅读模式
8位数码管动态显示仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png

单片机源程序如下:

  1. /* 设计题目: 基于51单片机的数码管动态扫描显示
  2. /* 功能    :让8个数码管显示不同的数字
  3. /* 说明    :每一个数码管扫描时间不要超过5ms
  4. /************************************************/

  5. #include <reg51.h>                        // 12M 晶振

  6. #define SEG P0                                  // 定义段码端口        
  7. #define SCAN P2                                // 定义位扫描端口

  8. #define uchar unsigned char
  9. #define uint  unsigned int

  10. ///////////////////////////////////////////////////////////
  11. // Name                : 段码和位选数据
  12. // In                :
  13. // Out                 :
  14. // Function : 用于段码和位选输出
  15. // Explain        : 段码为共阳型,位选时,高电平关闭,低电平选通
  16. ///////////////////////////////////////////////////////////

  17. uchar seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,
  18.                  0x92,0x82,0xf8,0x80,0x98};

  19. uchar sel[8] = {0xfe,0xfd,0xfb,0xf7,         // 从右向左选择数码管,共8个
  20.                                 0xef,0xdf,0xbf,0x7f};         // 0xfe,表示选择最右一个数码管


  21. ///////////////////////////////////////////////////////////
  22. // Name                : 延时函数
  23. // In                : uint x
  24. // Out                 :
  25. // Function : 用于延时一定时间
  26. // Explain        : 用12M晶振时,大概延时1ms,
  27. ///////////////////////////////////////////////////////////

  28. void delay_1ms(uint x)                // 用12M晶振时,延时1ms,
  29. {
  30.         uint i,j;

  31.         for(i=0; i<x; i++)
  32.            for(j=0; j<120; j++);
  33. }


  34. ///////////////////////////////////////////////////////////
  35. // Name                : 主函数
  36. // In                :
  37. // Out                 :
  38. // Function : 实现数码管的动态扫描显示
  39. // Explain        :
  40. ///////////////////////////////////////////////////////////

  41. void main(void)
  42. {

  43.    uchar cnt=0;

  44.    while(1)                                            // 无限循环
  45.      {
  46.                   
  47.                 SCAN = ~0xff;                        // 送数据时,先关闭显示,以避免重影现象
  48.                 SEG = seg[cnt];                        // 送数据
  49.                 SCAN = ~sel[cnt];                // 送出数据后,选择对应的数码管
  50.                 delay_1ms(1);                        // 延时1ms(延时时间不能太长,最好不要超过5ms)

  51.                 cnt++;                                        // 指向下一个状态               
  52.                 if(cnt == 8)                        // 判断是否取完所有状态
  53.                    cnt = 0;                                                   
  54.          }
  55. }
复制代码

所有资料51hei提供下载:
prj3_SEG7.rar (42.84 KB, 下载次数: 67)
回复

使用道具 举报

ID:341459 发表于 2019-6-13 23:11 | 显示全部楼层
感谢,值得学习

回复

使用道具 举报

ID:564279 发表于 2019-6-17 10:22 | 显示全部楼层
感谢,值得学习
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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