打印
[创客交流]

解决按键控制数码管带来闪灭显示问题的项目工程-初级版

[复制链接]
6812|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhamatu|  楼主 | 2020-10-25 17:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
/*****
本程序分两个程序。一个是程序一,按键控制数码管带来闪灭显示问题的程序。
另一个是程序二,解决按键控制数码管带来闪灭显示问题的程序。通过利用数码
管显示函数代替按键扫描函数内的按键延时,以及在按键扫描函数内按键松手时,
再次调用数码管显示函数。提醒:先试程序一,再试程序二,之后两者对比,找
出不同点,取最适合的。
*****/


使用特权

评论回复

相关帖子

沙发
zhamatu|  楼主 | 2020-10-25 17:15 | 只看该作者
//程序一:按键控制数码管带来闪灭显示问题的程序
//#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();
//   }
//  }

使用特权

评论回复
板凳
zhamatu|  楼主 | 2020-10-25 17:16 | 只看该作者
//程序二:解决按键控制数码管带来闪灭显示问题的程序
#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();
   }
  }

使用特权

评论回复
地板
zhamatu|  楼主 | 2020-10-25 17:16 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

504

帖子

1

粉丝