diff --git a/homework4/src/homework4.h b/homework4/src/homework4.h index 5b0803b..ef5919a 100644 --- a/homework4/src/homework4.h +++ b/homework4/src/homework4.h @@ -43,4 +43,125 @@ void set_38_2SEG() ADDR2 = 1; ADDR3 = 1; ENLED = 0; +} + +// 7SEG number display function: +// 0-9 +void show_number(unsigned char number) +{ + switch (number) { + case 0: { + BUS1A = 0; + BUS2B = 0; + BUS3C = 0; + BUS4D = 0; + BUS5E = 0; + BUS6F = 0; + BUS7G = 1; + BUS8DP = 1; + break; + } + case 1: { + BUS1A = 1; + BUS2B = 0; + BUS3C = 0; + BUS4D = 1; + BUS5E = 1; + BUS6F = 1; + BUS7G = 1; + BUS8DP = 1; + break; + } + case 2: { + BUS1A = 0; + BUS2B = 0; + BUS3C = 1; + BUS4D = 0; + BUS5E = 0; + BUS6F = 1; + BUS7G = 0; + BUS8DP = 1; + break; + } + case 3: { + BUS1A = 0; + BUS2B = 0; + BUS3C = 0; + BUS4D = 0; + BUS5E = 1; + BUS6F = 1; + BUS7G = 0; + BUS8DP = 1; + break; + } + case 4: { + BUS1A = 1; + BUS2B = 0; + BUS3C = 0; + BUS4D = 1; + BUS5E = 1; + BUS6F = 0; + BUS7G = 0; + BUS8DP = 1; + break; + } + case 5: { + BUS1A = 0; + BUS2B = 1; + BUS3C = 0; + BUS4D = 0; + BUS5E = 1; + BUS6F = 0; + BUS7G = 0; + BUS8DP = 1; + break; + } + case 6: { + BUS1A = 0; + BUS2B = 1; + BUS3C = 0; + BUS4D = 0; + BUS5E = 0; + BUS6F = 0; + BUS7G = 0; + BUS8DP = 1; + break; + } + case 7: { + BUS1A = 0; + BUS2B = 0; + BUS3C = 0; + BUS4D = 1; + BUS5E = 1; + BUS6F = 1; + BUS7G = 1; + BUS8DP = 1; + break; + } + case 8: { + BUS1A = 0; + BUS2B = 0; + BUS3C = 0; + BUS4D = 0; + BUS5E = 0; + BUS6F = 0; + BUS7G = 0; + BUS8DP = 1; + break; + } + case 9: { + BUS1A = 0; + BUS2B = 0; + BUS3C = 0; + BUS4D = 0; + BUS5E = 1; + BUS6F = 0; + BUS7G = 0; + BUS8DP = 1; + break; + } + default: { + break; + } + } } \ No newline at end of file diff --git a/homework4/src/test3.c b/homework4/src/test3.c index 942e525..5d02048 100644 --- a/homework4/src/test3.c +++ b/homework4/src/test3.c @@ -3,9 +3,35 @@ #include "homework4.h" +unsigned char cnt = 0; // 定时器溢出计数 +unsigned char second = 0; // 秒计数 + void test3() { set_38_2SEG(); + TMOD = 0x01; + TH0 = 0x3C; + TL0 = 0xB0; + TR0 = 1; + + // 初始化时立即显示0 + second = 0; + show_number(0); + + while (1) { + if (TF0 == 1) { + TF0 = 0; + TH0 = 0x3C; + TL0 = 0xB0; + if (++cnt >= 20) { + cnt = 0; + + second = (second < 9) ? ++second : 0; + + show_number(second); // 调用显示函数 + } + } + } } void main()