按键控制计数,用两个数码管显示0到99。十位数为0的时候,显示为空白

来源:互联网 发布:JAVA http 多附件报文 编辑:程序博客网 时间:2024/06/18 06:07

//用两个数码管显示0到99。十位数为0的时候,显示为空白。
//用两个按键控制数值的加减,按一次K1数字加1,按一次K2数字减1,数值的范围是从0到99。
//再用一个接近开关控制数字的减小,接近开关感应一次数字减1,减到0停止。
// C语言程序如下。
/**************************************************************
* 文件 : -----.C
* 功能 : 对键盘进行读出,控制内部数值的加减,在数码管显示0到99
***************************************************************/
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit KK1 = P3^2;   //按键输入;
sbit KK2 = P3^3;   //按键输入;
sbit KK3 = P3^4;   //接近开关输入;
uchar code table[11] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff};
/**************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***************************************************************/
void Delay_1ms(uint x)
{
    uchar i, j;
    for(i = 0; i < x; i++) for(j = 0; j <= 148; j++);
}
/**************************************************************
* 名称 : Display(uchar k)
* 功能 : 将参数分成十位、个位分别显示
* 输入 : k
* 输出 : 无
***************************************************************/
void Display(uchar k)
{
    P2 = 0;                                //先消隐
    if (k / 10 == 0)   P0 = table[10];     //显示空白
    else   P0 = table[k / 10];             //显示十位
    P2 = 0x02; Delay_1ms(5);               //显示5ms
    P2 = 0;
    P0 = table[k % 10];                    //显示个位
    P2 = 0x01; Delay_1ms(5);
}
/**************************************************************
* 名称 : Main()
* 功能 : 主函数
***************************************************************/
void Main(void)
{
    uchar Value = 16;           //数值
    while(1) {
    //sbit KK1 = P3^2;   //按键输入;
    //sbit KK2 = P3^3;   //按键输入;
    //sbit KK3 = P3^4;   //接近开关输入;
      P3 = 0xff;
      if(!KK1) {                //KK1按下
        Display(Value);         //延时消抖
        // Delay_1ms(20);
        if(!KK1) {              //KK1依然按下
          while(!KK1);          //等KK1释放
          Value++;
          if (Value > 99) Value = 99;
        }
      }
      if(!KK2) {                //KK2按下
        Display(Value);         //延时消抖
        // Delay_1ms(20);
        if(!KK2) {              //KK2依然按下
          while(!KK2);          //等KK2释放
          if (Value == 0) Value = 1;
          Value--;
        }
      }
      if(!KK3) {
        Display(Value);
        // Delay_1ms(20);
        if(!KK3) {
          while(!KK3);
          if (Value == 0) Value = 1;
          Value--;
        }
      }
      Display(Value);           //显示值
    }
}
/***************************************************************
用 PROTEUS 仿真,显示 09 的画面如下:

?按键控制计数,用两个数码管显示0到99。十位数为0的时候,显示为空白 - 非著名博主 - 电子信息角落

* 图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/36e64501effe81cbe850cd58.html#

* 提问者对于答案的评价:谢谢您的帮忙
* 原文网址:http://zhidao.baidu.com/question/129605269.html
****************************************************************/

0 0
原创粉丝点击