archieve: homework5 test1

This commit is contained in:
2025-04-23 14:15:34 +08:00
parent 0e7cdd870b
commit 10051c6a18
6 changed files with 139 additions and 46 deletions
+30 -3
View File
@@ -1,10 +1,15 @@
// homework5.h
/*
* this header defines:
* variables:
* 1. pin numbers to control the LED and the Seg.
* 2. the function to control the LED and the Seg.
* 3. the function to display the number on the Seg.
* 4. the function to set the 38 transistors.
* 2. sdf for timer
* functions:
* 1. control the LED and the Seg.
* 2. to display the number on the Seg.
* 3. to set the 38 transistors.
* 4. to display the number on the Seg.
* 5. timer.
*/
#include <REG52.H>
@@ -37,4 +42,26 @@ void set38Transistors(unsigned char number) // set the 38 transistors.
ADDR2 = (number & 0x04) >> 2;
ADDR1 = (number & 0x02) >> 1;
ADDR0 = (number & 0x01);
}
// timer
int timer(unsigned int 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.
return 0;
}
+63
View File
@@ -0,0 +1,63 @@
// test1.c
// 数码管动态显示自己学号后6位
// display the last 6 digits of your student ID on the Seg.
#include "homework5.h"
unsigned char code LedChar[] = {
0xC0,
0xF9,
0XA4,
0XB0,
0X99,
0X92,
0X82,
0XF8,
0X80,
0X90,
0X88,
0X83,
0XC6,
0XA1,
0X86,
0X8E,
};
unsigned char LedBuff[6] = {
0xFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF};
unsigned char i = 0;
void test1()
{
// display the number on the Seg.
LedBuff[5] = LedChar[1];
LedBuff[4] = LedChar[3];
LedBuff[3] = LedChar[0];
LedBuff[2] = LedChar[0];
LedBuff[1] = LedChar[7];
LedBuff[0] = LedChar[1];
while (1) {
/*
* seg id on 38 transistors:
* Y0: LEDS0 the latest digit.
* Y1: LEDS1 the second digit.
* Y2: LEDS2 the third digit.
* Y3: LEDS3 the forth digit.
* Y4: LEDS4 the fifth digit.
* Y5: LEDS5 the highest digit.
* Y6: 2LED to the LED lights.
*/
set38Transistors(i);
P2 = LedBuff[i];
i++;
timer(1);
// reset the i to 0 when it reaches 6.
if (i >= 6) {
i = 0;
}
}
}
void main()
{
test1();
}