/* * @name: homework7.h * @author: msksbr * @date: 2025-05-24 * @description: a header for homework7's homework tests * @version: 1.0f: fix errors in timer * variables: * 1.0: * 1. sbit DB_0 ~ sbit DB_7: pin number for led matrix cathodes * 2. pin number for 74HC138's address pins & enable pin * 2.1. sbit ADDR0 ~ sbit ADDR2: pin number for 74HC138's address pins * 2.2. sbit ADDR3 & sbit ENLED: pin number for 74HC138's enable pin * functions: * 1.0: * 1. void switch_138(unsigned char n): switch the 74HC138's address to n * 2. void delay_ms(unsigned char ms): a timer by ms base on timer0 mode 1 */ #include // variables: // 1. sbit DB_0 ~ sbit DB_7: pin number for led matrix cathodes sbit DB_0 = P2 ^ 0; sbit DB_1 = P2 ^ 1; sbit DB_2 = P2 ^ 2; sbit DB_3 = P2 ^ 3; sbit DB_4 = P2 ^ 4; sbit DB_5 = P2 ^ 5; sbit DB_6 = P2 ^ 6; sbit DB_7 = P2 ^ 7; // 2. pin number for 74HC138's address pins & enable pin // 2.1. sbit ADDR0 ~ sbit ADDR2: pin number for 74HC138's address pins sbit ADDR0 = P1 ^ 0; // @var ADDR0: to A(A0) sbit ADDR1 = P1 ^ 1; // @var ADDR1: to B(A1) sbit ADDR2 = P1 ^ 2; // @var ADDR2: to C(A2) // 2.2. sbit ADDR3 & sbit ENLED: pin number for 74HC138's enable pin sbit ADDR3 = P1 ^ 3; // @var ADDR3: to E2 sbit ENLED = P1 ^ 4; // @var ENLED: to E3 // functions: // 1. void switch_138(unsigned char n): switch the 74HC138's address to n void switch_138(unsigned char n) { bit A0, A1, A2; // @subsection: enable the 74HC138 ENLED = 0; ADDR3 = 0; // @subsection: turn n to 3 bit binary number A0 = n & 0x01; A1 = (n >> 1) & 0x01; A2 = (n >> 2) & 0x01; // @subsection: switch the 74HC138's address to n ADDR0 = A0; ADDR1 = A1; ADDR2 = A2; } // 2. void delay_ms(unsigned char ms): a timer by ms base on timer0 mode 1 void delay_ms(unsigned char ms) { TMOD &= 0xF0; // set the timer mode to 16-bit timer mode. TMOD |= 0x01; // set the timer mode to 16-bit timer mode. // 1ms timer definition: TH0 = 0XFC; TL0 = 0X18; // start the timer: TR0 = 1; while (ms--) { while (!TF0) {} // wait for the timer to overflow. TF0 = 0; // clear the timer flag. TH0 = 0XFC; // reload the timer value. TL0 = 0X18; // reload the timer value. } TR0 = 0; // stop the timer. }