找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC89C52RC数码管LED显示动态2(0-99计数)源程序注释很详细

[复制链接]
ID:246182 发表于 2017-11-5 11:21 | 显示全部楼层 |阅读模式
STC 89C52RC 数码管LED显示动态2(0-99计数)

单片机源程序如下:
  1. /***************************************************************************
  2. 标题:        数码管的显示
  3. 效果:        显示00-99,动态显示+变化显示
  4. 工作于:LY5A-L2A开发板
  5. 作者:        林洋电子吧
  6. 说明:        此例程将数码管显示内容用一个函数打包,要显示直接调用即可。
  7. ******************************************************************************/
  8. //头文件:
  9. #include "reg51.h"

  10. //变量定义:
  11. unsigned int table[]=
  12.                         {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  13.                                         //表:共阳数码管 0-9
  14. //引脚定义:               
  15. sbit SMG_q = P1^0;        //定义数码管阳级控制脚(千位)
  16. sbit SMG_b = P1^1;        //定义数码管阳级控制脚(百位)
  17. sbit SMG_s = P1^2;        //定义数码管阳级控制脚(十位)
  18. sbit SMG_g = P1^3;        //定义数码管阳级控制脚(个位)

  19. //函数声明:
  20. void display(unsigned int da);//定义显示函数,参数为显示内容,只显示两位数
  21. void delay1(void);
  22. //函数声明:
  23. void delay2(unsigned char tmp);        //延时子函数
  24. //数据定义:
  25. code unsigned char tmpled[50]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80,0X81,0X82,
  26.                                                                 0X84,0X88,0X90,0XA0,0XC0,0XC1,0XC2,0XC4,0XC8,0XD0,
  27.                                                                 0XE0,0XE1,0XE2,0XE4,0XE8,0XF0,0XF1,0XF2,0XF4,0XF8,
  28.                                                                 0XF9,0XFA,0XFC,0XFD,0XFE,0XFF,0XFF,0X00,0XFF,0X00};
  29.                                                                         //定义数组常量,前面加"code"表示常量在程序代码中存放,
  30.                                                                         //不占用RAM。该数组为发光二极管的输出数据

  31. //主函数,C语言的入口函数:                        
  32. void main(void)  
  33. {
  34.         unsigned int i=0;                //作为查表的索引号
  35.         unsigned int ldata;        //变量用作0~9999计数
  36.         unsigned int j;                        //此变量作为计数跳变刷新时间
  37.         unsigned char k;                                //定义变量
  38.         
  39.         //while(1)
  40.         //        {                                                          //无限循环

  41. //          }
  42.         
  43.         while(1)
  44.         {        
  45.                 j=800;                        
  46.                 while(j--)
  47.                         {               
  48.                         display(ldata);        //刷新5000次,约1秒,注:在C语言里是没有周期可计算的哦~~~
  49.                   }                                                
  50.                 if(ldata<9999)
  51.                         ldata++;                //刷新完成约1秒,变量做加计数
  52.                 else
  53.                         ldata=0;
  54.                
  55.                 //for(k=0;i<50;k++)
  56.                 //        {                                      //循环输出40个数据
  57.                 //        P2=~tmpled[k];                        //"~"这个符号是取反,因发光二极管采用共阳极,所以将数据取反再输出
  58.                 //        delay2(100);                                //调用延时子函数,改变参数大小,调整变化速度
  59.                 //  }
  60.         }
  61. }

  62. //显示函数,参数为显示内容,显示四位数
  63. void display(unsigned int da)
  64. {
  65.         SMG_q=0;                        //选择千位数码管
  66.         P0=table[da/1000];        //获取千位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
  67.         delay1();                        //延时
  68.         P0=0XFF;                        //清除数码管显示,因是共阳型,所以不是0
  69.         SMG_q=1;                        //关闭千位数码管
  70.         
  71.         SMG_b=0;                        //选择百位数码管
  72.         P0=table[(da%1000)/100];        //获取百位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
  73.         delay1();                        //延时
  74.         P0=0XFF;                        //清除数码管显示,因是共阳型,所以不是0
  75.         SMG_b=1;                        //关闭百位数码管
  76.         
  77.         SMG_s=0;                        //选择十位数码管
  78.         P0=table[((da%1000)%100)/10];        //获取十位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
  79.         delay1();                        //延时
  80.         P0=0XFF;                        //清除数码管显示,因是共阳型,所以不是0
  81.         SMG_s=1;                        //关闭十位数码管

  82.         SMG_g=0;                        //选择个位数码管
  83.         P0=table[((da%1000)%100)%10];        //获取个位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
  84.         delay1();                        //延时
  85.         P0=0XFF;                        //清除数码管显示,因是共阳型,所以不是0
  86.         SMG_g=1;                        //关闭个位数码管
  87.                
  88. }

  89. ……………………

  90. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
STC 89C52RC 数码管LED显示动态2(0-99计数).rar (17.51 KB, 下载次数: 37)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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