只显示有效位的数码管

#include<reg52.h>

sbit HCA = P2^2;
sbit HCB = P2^3;
sbit HCC = P2^4;

unsigned char code LEDCHAR[] =  {
        0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
};
unsigned char LEDBUFF[] = {    
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
unsigned char i = 0;        
unsigned int x = 0;            
unsigned char sign = 0;
unsigned char y = 7;
void main()
{
        unsigned long sec = 0;        
        EA = 1;
        TMOD = 0x01;
        TH0 = 0xFC;
        TL0 = 0x67;
        ET0 = 1;
        TR0 = 1;
    
        while(1)
        {
                if(sign == 1)
                {
                        sign = 0;
                        sec++;
                
      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在51单片机中,数码管显示有效是通过掩码操作实现的。有效是指在显示数值时,实际上有意义的数。例如,在一个4数码管中,如果要显示的数字是“123”,那么只有前三个有效,最后一是不需要显示的。 为了实现只显示有效,需要使用一个掩码来限制数码管显示数。掩码是一个二进制数,每一表示数码管上的一个置是否需要显示。例如,如果要显示3数,那么掩码就是“1110”,也就是只有最高不需要显示。我们可以使用掩码和要显示的数值进行按与运算,这样就可以去掉不需要显示。 以下是一个示例代码,演示如何在51单片机中只显示有效: ``` unsigned char mask = 0b1110; // 定义掩码,只显示数 unsigned int value = 123; // 要显示的数值 unsigned char digit[4]; // 数码管上的四个置 digit[0] = value % 10; // 计算最低 digit[1] = value / 10 % 10; // 计算次低 digit[2] = value / 100 % 10; // 计算最高 for (int i = 0; i < 3; i++) { if ((mask >> i) & 1) { display_digit(digit[i]); // 如果该需要显示,就显示对应的数字 } } ``` 在上面的代码中,我们首先定义了一个掩码“1110”,表示只显示数。然后,我们计算要显示的数值的每一,并将它们存储在数组`digit`中。最后,我们使用一个循环来遍历掩码的每一,如果该需要显示,就调用`display_digit`函数来显示对应的数字。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值