diff --git a/homework7/src/homework7.h b/homework7/src/homework7.h new file mode 100644 index 0000000..05aa9c9 --- /dev/null +++ b/homework7/src/homework7.h @@ -0,0 +1,73 @@ +/* + * name: homework7.h + * author: msksbr + * date: 2025/05/22 + * description: a header file for homework7(a 51 MCU lesson homework) + * version: 1.0 + * variables: + * 1.0: + * 1. pin numbers for BUS of leds, segs and matrix led + * 2. pin numbers for BUS of 74HC138 + * functions: + * 1.0: + * 1. 74HC138 switcher + * 2. timer by ms based on timer0 with mode 1 + */ + +#include + +// variables: +// 1. pin numbers for BUS of leds, segs and matrix led +sbit DB0 = P0 ^ 0; +sbit DB1 = P0 ^ 1; +sbit DB2 = P0 ^ 2; +sbit DB3 = P0 ^ 3; +sbit DB4 = P0 ^ 4; +sbit DB5 = P0 ^ 5; +sbit DB6 = P0 ^ 6; +sbit DB7 = P0 ^ 7; +// 2. pin numbers for BUS of 74HC138 +sbit ADDR0 = P1 ^ 0; // @param ADDR0: to A(A0) of 74HC138 +sbit ADDR1 = P1 ^ 1; // @param ADDR1: to B(A1) of 74HC138 +sbit ADDR2 = P1 ^ 2; // @param ADDR2: to C(A2) of 74HC138 + +sbit ADDR3 = P1 ^ 3; // @param ADDR3: to E1 of 74HC138 +sbit ENLED = P1 ^ 4; // @param ENLED: to E2 & E3 of 74HC138 + +// functions: +// 1. 74HC138 switcher +void switch_38(unsigned char n) +{ + // @subsection: turn n to 3 bits of binary number + bit A0 = n & 0x01; + bit A1 = (n >> 1) & 0x01; + bit A2 = (n >> 2) & 0x01; + // @subsection: turn on 74HC138 + ENLED = 0; + ADDR3 = 1; + // @subsection: add 3 bits of binary number to 74HC138 + ADDR0 = A0; + ADDR1 = A1; + ADDR2 = A2; +} +// 2. timer by ms based on timer0 with mode 1 +void timer0_mode1(unsigned int ms) +{ + unsigned int i; + // @subsection: set timer0 to mode 1 + TMOD = 0x01; + // @subsection: set timer0 to 11.0592MHz + TH0 = 0xFC; + TL0 = 0x67; + // @subsection: start timer0 + TR0 = 1; + // @subsection: wait for timer0 to count ms times + for (i = 0; i < ms; i++) { + while (!TF0); + TF0 = 0; + TH0 = 0xFC; + TL0 = 0x67; + } + // @subsection: stop timer0 + TR0 = 0; +} \ No newline at end of file