找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1001|回复: 2
收起左侧

单片机如何才能在按键按下后所显示的数码一直存在,再次按下才会熄灭,现在按一下...

[复制链接]
ID:995472 发表于 2022-3-23 16:25 | 显示全部楼层 |阅读模式
如何才能在按键按下后所显示的数码一直存在,再次按下才会熄灭,现在按一下就闪一下数码就灭了

单片机源程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ON 0
sbit CS=P1^0;
sbit CLK=P1^1;
sbit D0=P1^2;
sbit SW=P3^2;   
        unsigned char  led[]={0xc0,0xf9,0xa4,0xb0,
           0x99,0x92,0x82,0xf8,
        0x80,0x90,0x88,0x83,
        0xc6,0xa1,0x86,0x8e,
        0x40,0x79,0x24,0x30,0x19,0xc1};
        unsigned char look[]={0,0,0,0};
//函数名:timelms
//函数功能:在T0工作方式下定时1ms,采用查询的方式实现
//形式参数:无
//返回值:无

void time1ms()
{        
        TMOD=0x01;
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        TR0=1;
        while(!TF0);
        TF0=0;
}
//函数名:xianshi
//函数功能:实现4个led动态扫描显示一次,显示"0-f"
//形式参数:无
//返回值:无                        

void display()          //显示
{
        unsigned char m,n;
        m=0x01;                                                  
        for(n=0;n<4;n++)
        {
        P0=m;                                                                                                   
        P2=led[look[n]];
        m<<=2;                        
        time1ms();        
        P2=0xff;                                 
        }
}

void delay(uint i)         //软延时
{
while(i--);
}

uchar ADC0831()
{
uchar i,aa;
        D0=1;
        _nop_();
        _nop_();
        CS=0;
        _nop_();
        _nop_();
        CLK=0;
        _nop_();
        _nop_();
        CLK=1;
        _nop_();
        _nop_();
        CLK=0;
        _nop_();
        _nop_();
        CLK=1;
        _nop_();
        _nop_();
        CLK=0;
        _nop_();
        _nop_();
        for( i=0;i<8;i++)
        {
        CLK=1;
        _nop_();
        _nop_();

        aa<<=1;
        if(D0)
        {
                aa++;
        }
        CLK=0;
        _nop_();
        _nop_();
        }
        CS=1;
        _nop_();
        _nop_();

        return(aa);
        }

        void main()
{
           uint date;
        while(1)
        if(SW==ON)
         {
        date=ADC0831()*196;
        look[0]=(date/10000)+16;                                                 //除万位取于
    look[1]=(date/1000)%10;                                                         //除千位取于
        look[2]=(date/100)%10        ;                                             //除百位取于
        look[3]=(date/10)%10        ;                                                                                 //显示u
        display();
  delay(10);
         }
         else
         P2=0xff;
}

回复

使用道具 举报

ID:161164 发表于 2022-3-24 09:51 | 显示全部楼层
  1. bit Disp_EN = 0;
  2. void main()
  3. {
  4.         uint date;
  5.         while(1)
  6.                 if(SW==ON)
  7.                 {
  8.                         delay(10);
  9.                         if(SW==ON)
  10.                                 Disp_EN = !Disp_EN;
  11.                 }
  12.                 if(Disp_EN==1)
  13.                 {
  14.                         date=ADC0831()*196;
  15.                         look[0]=(date/10000)+16;                                                 //除万位取于
  16.                         look[1]=(date/1000)%10;                                                         //除千位取于
  17.                         look[2]=(date/100)%10;                                             //除百位取于
  18.                         look[3]=(date/10)%10;                                                                                 //显示u
  19.                         display();
  20.                         delay(10);
  21.                 }
  22.                 else
  23.                         P2=0xff;
  24. }
复制代码

回复

使用道具 举报

ID:507641 发表于 2022-3-24 12:28 | 显示全部楼层
                        display();
                        delay(10);
你这条件判断,你delay(10);这么短当然只闪显一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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