找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机数码管显示数值,按键设置数值 源码加proteus仿真

[复制链接]
跳转到指定楼层
楼主
简单的51练手,下面是proteus仿真原理图:


单片机源程序:
  1.   #include<reg52.h>
  2.   #define uchar unsigned char
  3.   #define uint unsigned int
  4.   sbit key1=P3^4;
  5.   sbit key2=P3^5;
  6.   sbit wei4=P2^0;
  7.   sbit wei3=P2^1;
  8.   uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};
  9.   void delayms(uint);
  10.   uchar numt0,num,flat;
  11.    void delayms(uint xms)
  12.    {   
  13.        uint i,j;
  14.            for(i=xms;i>0;i--)
  15.              for(j=110;j>0;j--);
  16.           }
  17.    void display(uchar numdis)
  18.   {
  19.     uchar shi,ge;
  20.         shi=numdis/10;
  21.         ge=numdis%10;
  22.         wei4=1;
  23.         wei3=1;
  24.         P1=table[shi];
  25.         wei4=1;
  26.         wei3=0;
  27.         delayms(5);
  28.         wei4=1;
  29.         wei3=1;
  30.         P1=table[ge];
  31.         wei4=0;
  32.         wei3=1;
  33.         delayms(5);
  34.         }
  35.         void init()
  36.         {
  37.        TMOD=0x01;
  38.            TH0=(65536-45872)/256;
  39.            TL0=(65536-45872)%256;
  40.            EA=1;
  41.            ET0=1;
  42.            }
  43.    void keyscan()
  44.    {
  45.       if(key1==0)
  46.           {
  47.             delayms(10);
  48.                 if(key1==0)
  49.                 {
  50.              num++;
  51.                  flat++;
  52.                  if(num==99)
  53.                      num=0;
  54.                 while(!key1);
  55.           }
  56.         }
  57.    if(key2==0);
  58.    {
  59.       delayms(10);
  60.           if(key2==0)
  61.           {
  62.              if(num==0)
  63.                    num=99;
  64.                    flat=99;
  65.                    flat--;
  66.                    num--;
  67.                    while(!key2);
  68.                    }
  69.         }
  70.   }
  71.   void main()
  72.   {init();
  73.    while(1)
  74.    {
  75.      keyscan();
  76.          display(num);
  77.          }}
  78.         void T0_time() interrupt 1
  79.         {TH0=(65536-45872)/256;
  80.          TL0=(65536-45872)%256;
  81.          numt0++;
  82.          if(numt0==20)
  83.          {numt0=0;
  84.          num++;
  85.          if(num==60)
  86.             num=0;

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

下载:
按键控制数码管显示.rar (55.45 KB, 下载次数: 25)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:149451 发表于 2017-5-10 07:19 | 只看该作者
LZ没认真跑过这个程序吧?怎的不能显示99能,当显示98后再按一次就变00了。其次,每当按键按下不抬起,十位就熄灭不亮,觉得不爽,
回复

使用道具 举报

板凳
ID:192419 发表于 2017-5-10 12:42 | 只看该作者
支持一下!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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