zoukankan      html  css  js  c++  java
  • 解决按键控制数码管带来闪灭显示问题的项目工程(初级版)

    /*****
    本程序分两个程序。一个是程序一,按键控制数码管带来闪灭显示问题的程序。
    另一个是程序二,解决按键控制数码管带来闪灭显示问题的程序。通过利用数码
    管显示函数代替按键扫描函数内的按键延时,以及在按键扫描函数内按键松手时,
    再次调用数码管显示函数。提醒:先试程序一,再试程序二,之后两者对比,找
    出不同点,取最适合的。
    *****/
    //程序一:按键控制数码管带来闪灭显示问题的程序
    //#include<reg51.h>
    //#define uchar unsigned char
    //#define uint unsigned int
    //sbit add=P3^0;
    //sbit dec=P3^4;
    //uchar lingweiflag;
    //uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共阴数码管段码数字0~9字码表,高电平点亮数码管段码数字0~9。
    //uint num;
    //uint qian,bai,shi,ge;//定义拆字变量
    //  /**ms级延时子程序**/
    //  void delay(uint x)
    //{
    //   uint i,j;                       
    //   for(i=0;i<x;i++)     
    //    for(j=0;j<110;j++);
    //  }
    //  void display()
    //{
    //   qian=num/1000;//取得千位数字
    //   bai=num%1000/100;//取得百位数字
    //   shi=num%100/10;//取得十位数字
    //   ge=num%10;//取得个位数字
    //
    //   P2=0xfe;//数码管千位显示位
    //   P1=table[qian];//数码管千位数值显示
    //   delay(2);//延时
    //
    //   P2=0xfd;//数码管百位显示位
    //   P1=table[bai];//数码管百位数值显示
    //   delay(2);//延时
    //
    //   P2=0xfb;//数码管十位显示位
    //   P1=table[shi];//数码管十位数值显示
    //   delay(2);//延时
    //
    //   P2=0xf7;//数码管个位显示位
    //   P1=table[ge];//数码管个位数值显示
    //   delay(2);//延时
    // }
    //  void keyscan()
    //{
    //   if(add==0)
    // {         
    //    delay(5);
    //    if(add==0)
    //  {
    //     num++;
    //     while(!add);
    //     lingweiflag=0;
    //    }
    //   }
    //   if(dec==0&&lingweiflag==0)
    // {         
    //    delay(5);
    //    if(dec==0)
    //  {
    //     num--;
    //     while(!dec);
    //    }
    //   }
    //   if(num>9999)
    // {
    //    num=0;
    //   }
    //   if(num==0)
    // {
    //    num=0;
    //    lingweiflag=1;
    //   }
    // }
    //  void main()
    //{
    //   while(1)
    // {
    //    display();
    //    keyscan();
    //   }
    //  }
    
    
    
    //程序二:解决按键控制数码管带来闪灭显示问题的程序
    #include<reg51.h>
    #define uchar unsigned char
    #define uint unsigned int
    sbit add=P3^0;
    sbit dec=P3^4;
    uchar lingweiflag;
    uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共阴数码管段码数字0~9字码表,高电平点亮数码管段码数字0~9
    uint num;
    uint qian,bai,shi,ge;//定义拆字变量。
      /**ms级延时子程序**/
      void delay(uint x)
    {
       uint i,j;                       
       for(i=0;i<x;i++)     
        for(j=0;j<110;j++);
      }
      void display()
    {
       qian=num/1000;//取得千位数字
       bai=num%1000/100;//取得百位数字
       shi=num%100/10;//取得十位数字
       ge=num%10;//取得个位数字
    
       P2=0xfe;//数码管千位显示位
       P1=table[qian];//数码管千位数值显示
       delay(2);//延时
    
       P2=0xfd;//数码管百位显示位
       P1=table[bai];//数码管百位数值显示
       delay(2);//延时
    
       P2=0xfb;//数码管十位显示位
       P1=table[shi];//数码管十位数值显示
       delay(2);//延时
    
       P2=0xf7;//数码管个位显示位
       P1=table[ge];//数码管个位数值显示
       delay(2);//延时
     }
      void keyscan()
    {
       if(add==0)
     {         
    //  delay(5);
        display();
        if(add==0)
      {
         num++;
    //   while(!add);
         while(!add)
       { 
          display();
         }
         lingweiflag=0;
        }
       }
       if(dec==0&&lingweiflag==0)
     {         
    //  delay(5);
        display();
        if(dec==0)
      {
         num--;
    //   while(!dec);
         while(!dec)
         display();
        }
       }
       if(num>9999)
     {
        num=0;
       }
       if(num==0)
     {
        num=0;
        lingweiflag=1;
       }
     }
      void main()
    {
       while(1)
     {
        display();
        keyscan();
       }
      }

  • 相关阅读:
    Ubuntu下彻底卸载mysql
    Navicat连接Ubuntu中的MySQL,报错1130-host
    win10优化开机进程
    导入别人工程后项目报错,有个小红叉
    eclipse中的tomcat配置
    解决eclipse启动慢
    linux screen命令
    python pip install出现问题
    scala中执行shell命令
    spark 累加器
  • 原文地址:https://www.cnblogs.com/AChenWeiqiangA/p/12925859.html
Copyright © 2011-2022 走看看