| 最开始所有代码都写在main.c中,发现实在太乱套了,于是,数码管设置相关的函数被抽离出来,写到了seg.h中 
 复制代码#ifndef SEG_H
#define SEG_H
#include "STC8H.h"
#define SEG_NULL 0xff
//led数字
uchar xdata seg_led_data[]={ 
                0xC0,  //"0"
                0xF9,  //"1"
                0xA4,  //"2"
                0xB0,  //"3"
                0x99,  //"4"
                0x92,  //"5"
                0x82,  //"6"
                0xF8,  //"7"
                0x80,  //"8"
                0x90,  //"9"
                0x88,  //"A"
                0x83,  //"B"
                0xC6,  //"C"
                0xA1,  //"D"
                0x86,  //"E"
                0x8E,  //"F"
                0x89,  //"H"
                0xC7,  //"L"
                0xC8,  //"n"
                0xC1,  //"u"
                0x8C,  //"P"
                0xA3,  //"o"
                0xBF,  //"-"
                0xFF,  //熄灭
};
//4位数码管的具体数据
uchar seg_4bit_data[4] = {SEG_NULL,SEG_NULL,SEG_NULL,SEG_NULL};
//设置前2个数码管,show_dot为是否显示冒号
void SetSeg4BitData_1(uchar d,uchar show_dot)
{
    if(d == SEG_NULL)
    {
        seg_4bit_data[0] = 0xff;
        if(show_dot)
            seg_4bit_data[1] = 0x7f;
        else
            seg_4bit_data[1] = 0xff;
    }
    else
    {
        seg_4bit_data[0] = seg_led_data[d/10];
        if(show_dot)
            seg_4bit_data[1] = seg_led_data[d%10] & 0x7f;
        else
            seg_4bit_data[1] = seg_led_data[d%10];
    }
}
//设置后2个数码管
void SetSeg4BitData_2(uchar d)
{
    if(d == SEG_NULL)
    {
        seg_4bit_data[2] = 0xff;
        seg_4bit_data[3] = 0xff;
    }
    else
    {
        seg_4bit_data[2] = seg_led_data[d/10];
        seg_4bit_data[3] = seg_led_data[d%10];
    }
}
#endif  //SEG_H
 外部直接调用SetSeg4BitData_1,SetSeg4BitData_2来设置前2位数码管和后2位数码管所显示的内容,也就是seg_4bit_data的内容
 |