From 097e654ba58c9d7cd04d53e5be48dcb4531a3ce9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=A1=E5=9D=82=E3=82=B9=E3=83=90=E3=83=AB?= Date: Sat, 24 May 2025 23:15:46 +0800 Subject: [PATCH] archieve: homework7 header --- homework7/src/homework7.h | 70 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 homework7/src/homework7.h diff --git a/homework7/src/homework7.h b/homework7/src/homework7.h new file mode 100644 index 0000000..4c3b54b --- /dev/null +++ b/homework7/src/homework7.h @@ -0,0 +1,70 @@ +/* + * @name: homework7.h + * @author: msksbr + * @date: 2025-05-24 + * @description: a header for homework7's homework tests + * @version: 1.0 + * 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 = P2 ^ 1; // @var ADDR1: to B(A1) +sbit ADDR2 = P2 ^ 2; // @var ADDR2: to C(A2) +// 2.2. sbit ADDR3 & sbit ENLED: pin number for 74HC138's enable pin +sbit ADDR3 = P2 ^ 3; // @var ADDR3: to E1 +sbit ENLED = P2 ^ 4; // @var ENLED: to E2 & E3 + +// functions: +// 1. void switch_138(unsigned char n): switch the 74HC138's address to n +void switch_138(unsigned char n) +{ + // @subsection: enable the 74HC138 + ENLED = 0; + ADDR3 = 1; + // @subsection: turn n to 3 bit binary number + bit A0 = n & 0x01; + bit A1 = (n >> 1) & 0x01; + bit 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) +{ + unsigned char i; + TMOD &= 0xF0; + TMOD |= 0x01; + for (i = 0; i < ms; i++) { + TH0 = 0xFC; + TL0 = 0x18; + TR0 = 1; + while (!TF0); + TR0 = 0; + TF0 = 0; + } +} \ No newline at end of file