找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1418|回复: 0
打印 上一主题 下一主题
收起左侧

0.1~9.9累加 数码管单片机代码

[复制链接]
跳转到指定楼层
楼主
ID:328560 发表于 2018-5-12 22:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码见附件部分

单片机源程序如下:

  1. /***************************************************************************************************   
  2. 工程名称:        smg_0.1~9.9
  3. 功能描述:        控制数码管低2位显示从0.1到9.9累加,步进为0.1
  4. 硬件连接:  用8位杜邦线将J8与J12连接,2位杜邦线分别将J11_0与J15_DS1、J11_1与J15_DS2连接。
  5. 维护记录:  2011-8-22
  6. ***************************************************************************************************/
  7. #include "reg51.h"       //包含头文件

  8. sbit LE1=P2^0;           //位选573锁存器使能
  9. sbit LE2=P2^1;           //段选573锁存器使能


  10. #define uchar unsigned char
  11. #define uint  unsigned int

  12. uchar wei;
  13. float num;

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


  18. //**************************************************************************************************
  19. //延时函数
  20. //**************************************************************************************************
  21. delay(uint time)              //int型数据为16位,所以最大值为65535            
  22. {
  23.   uint  i,j;                  //定义变量i,j,用于循环语句
  24.   for(i=0;i<time;i++)         //for循环,循环50*time次
  25.      for(j=0;j<50;j++);       //for循环,循环50次
  26. }
  27. //**************************************************************************************************
  28. //动态扫描函数
  29. //**************************************************************************************************
  30. scan()
  31. {
  32.   uchar i;
  33.   for(i=0;i<10;i++)
  34.    {
  35.      //显示个位
  36.      P1=0xbf;                 //0xbf=1011 1111,即选通个位
  37.      LE1=1;                   //锁存位
  38.      LE1=0;                   //断开锁存,位选573的Q7~Q0仍保持
  39.      wei=num*10;
  40.      P1=dis[wei/10] | 0x80;   //dis[wei/10]为0~9的编码,0x80为小数点
  41.      LE2=1;                   //锁存段码
  42.      LE2=0;                   //断开锁存,段选573的Q7~Q0仍保持
  43.      delay(100);              //延时保持一下,延时过大会闪动,延时过小会有重影   

  44.      P1=0x00;LE2=1;LE2=0;     //清除P1口数据,以免造重影
  45.      //显示十分位
  46.      P1=0x7f;                 //0xbf=0111 1111,即选通十分位
  47.      LE1=1;                   //锁存位
  48.      LE1=0;                   //断开锁存,位选573的Q7~Q0仍保持
  49.      wei=num*10;
  50.      P1=dis[wei%10];          //0~9的编码
  51.      LE2=1;                   //锁存段码
  52.      LE2=0;                   //断开锁存,段选573的Q7~Q0仍保持
  53.      delay(100);              //延时保持一下,延时过大会闪动,延时过小会有重影  

  54.      P1=0x00;LE2=1;LE2=0;     //清除P1口数据,以免造重影   
  55.    }

  56.     if(num==9.9)num=0;        //扫描到显示9.9时,重新开始扫描
  57.     num+=0.1;                 //num加0.1
  58. }
  59. //**************************************************************************************************
  60. //主函数
  61. //**************************************************************************************************
  62. void main()                   //主函数
  63. {
  64.      num=0;                   //初始化段码为0
  65.      while(1)                 //进入while死循环
  66.       {
  67.         scan();               //数码管扫描函数
  68.       }         
  69. }
复制代码

所有资料51hei提供下载:
EX2.6 0.1~9.9累加.zip (18.78 KB, 下载次数: 5)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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