[51单片机] 数码管(第三节课)

数码管的全部显示

#include <REGX52.H>

void Delay1ms(unsigned int xms)        //@12.000MHz
{
    unsigned char i, j;
    while(xms)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        xms--;
    }
}

unsigned char NixieTable[ ]={0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x06}; 

//数码管数字显示

void Nixie(unsigned char Location,Number)
{
    switch (Location)
    {
        case 1 :
            P1_2=0; P1_1=0; P1_0=0;
            break;
        case 2 :
            P1_2=0; P1_1=0; P1_0=1;
            break;
        case 3 :
            P1_2=0; P1_1=1; P1_0=0;
            break;
        case 4 :
            P1_2=0; P1_1=1; P1_0=1;              //数码管位置选择
            break;
        case 5 :
            P1_2=1; P1_1=0; P1_0=0;
            break;
        case 6 :
            P1_2=1; P1_1=0; P1_0=1;
            break;
        case 7 :
            P1_2=1; P1_1=1; P1_0=0;
            break;
        case 8 :
            P1_2=1; P1_1=1; P1_0=1;
            break;
    }

    Delay1ms (1);
    P0 = 0x00;
}

    P0 = NixieTable[Number-1];   数字显示
}
void main()
{

    while (1)
    {
        Nixie(1,0);  Delay1ms(2);
        Nixie(2,2);  Delay1ms(2);
        Nixie(3,3);  Delay1ms(2);
        Nixie(4,4);  Delay1ms(2);
        Nixie(5,5);  Delay1ms(2);    
        Nixie(6,6);  Delay1ms(2);    
        Nixie(7,7);  Delay1ms(2);    
        Nixie(8,8);  Delay1ms(2);   

    }

51单片机数码管显示是一种常见的数字显示方法,使用51单片机来控制数码管的显示内容。以下是一个简单的示例代码,可以在51单片机实现数码管的显示: ```c #include <reg51.h> // 定义数码管段码 code unsigned char SEG_TAB[10] = { 0xC0, // "0" 0xF9, // "1" 0xA4, // "2" 0xB0, // "3" 0x99, // "4" 0x92, // "5" 0x82, // "6" 0xF8, // "7" 0x80, // "8" 0x90 // "9" }; // 定义数码管位码 code unsigned char POS_TAB[4] = { 0x01, // 第1位 0x02, // 第2位 0x04, // 第3位 0x08 // 第4位 }; // 数码管显示函数 void Display(unsigned char num) { unsigned char i; // 分离出个位、十位、百位和千位数值 unsigned char digit[4]; digit[0] = num % 10; digit[1] = num / 10 % 10; digit[2] = num / 100 % 10; digit[3] = num / 1000; // 循环显示每一位数字 for (i = 0; i < 4; i++) { P0 = SEG_TAB[digit[i]]; // 设置段码 P2 = ~POS_TAB[i]; // 设置位码(低电平有效) DelayMs(1); // 延时一段时间,调整显示的亮度和稳定性 P0 = 0xFF; // 关闭所有段 } } // 主函数 void main() { while (1) { unsigned char num = 0; // 数码管从0到9循环显示 for (num = 0; num <= 9; num++) { Display(num); DelayMs(500); // 每个数字显示时间为500毫秒 } } } ``` 这段代码通过循环控制,实现数码管从0到9的循环显示。使用P0口控制数码管的段码,使用P2口控制数码管的位码,通过设置不同的段码和位码,可以显示不同的数字。代码中还包含了一个延时函数 `DelayMs()`,用于调整显示的亮度和稳定性。 请注意,这只是一个简单的示例代码,实际应用中可能需要根据具体的硬件电路情况进行相应的修改和调试。希望对你有所帮助!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值