1. マイコンタイマーの原理と応用方法に習熟する。
1) クロックサイクル: マイコンのタイミングの最小単位で、具体的な計算方法はクロックソースの 1/3 です。
2) マシンサイクル: マイクロコントローラーが動作を完了するまでの最短時間。
3) タイマ: タイマをオンにすると、「ストレージレジスタ」の値は 1 マシンサイクル (つまり、カウント周期) ごとに自動的に 1 ずつインクリメントされます。
4)
5)
6)
7)
2. コードの実装
#include <REGX52.H>
sbit add0 = P1^0;
sbit add1 = P1^1;
sbit add2 = P1^2;
sbit add3 = P1^3;
sbit ENLED = P1^4;
unsigned int cnt = 1,i ,a = 0,arr = 1;
void main()
{
ENLED = 0;
add3 = 1;
add0 = 0;
add1 = 1;
add2 = 1;
TMOD = 0x01;//开启总开关
TH0 = 0xfc;//置高位计值
TL0 = 0x00;//置低位开始计值
TR0 = 1;//计时器开始计时
while(1)
{
if(1 == TF0)//判断是否进制
{
TF0 = 0;
TH0 = 0xfc;
TL0 = 0x00;
if(100 > cnt)
{
cnt = 0;
hans();
}
}
3.タイマーを使用して遅延を実装し、流水ランプが左右に動くプログラムを完了します。
#include <REGX52.H>
sbit add0 = P1^0;
sbit add1 = P1^1;
sbit add2 = P1^2;
sbit add3 = P1^3;
sbit ENLED = P1^4;
unsigned int cnt = 0,arr3,a = 0,arr = 0,arr2 = 0;
void main()
{
ENLED = 0;
add3 = 1;
add0 = 0;
add1 = 1;
add2 = 1;
TMOD = 0x01;
TH0 = 0xb8;
TL0 = 0x00;
TR0 = 1;
while(1)
{
if(1 == TF0)
{
TF0 = 0;
TH0 = 0xb8;
TL0 = 0x00;
arr2++;
arr++;
if(50 == arr2)
{
arr2 = 0;
P0 = ~(0x80 >> cnt);
cnt++;
}
if(cnt >= 8)
{
cnt = 0;
arr2 = 51;
}
if(arr == 400)
{
P0 = ~(0x01 << a);
a++;
arr = 350;
}
} if(a >= 8)
{
arr2 = 0;
cnt = 0;
a = 0;
arr = 0;
}
}
}
4. デジタル管の原理を理解し、デジタル管の真理値表の計算方法を習得する。
5. ストップウォッチのカウントダウンを静的に表示するようにデジタル チューブをプログラムします。
#include <REGX52.H>
sbit add0 = P1^0;
sbit add1 = P1^1;
sbit add2 = P1^2;
sbit add3 = P1^3;
sbit ENLED = P1^4;
unsigned char code LedChar[] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char i = 0x0f,a = 0;
void main()
{
ENLED = 0;
add3 = 1;
add0 = 0;
add1 = 0;
add2 = 0;
TMOD = 0x01;
TH0 = 0xb8;
TL0 = 0x00;
TR0 = 1;
while(1)
{
if(1 == TF0)
{
TF0 = 0;
TH0 = 0xb8;
TL0 = 0x00;
a++;
if(a >= 50)
{
a = 0;
P0 = LedChar[i];
if(i > 0)
{
i--;
}
else
{
i = 0x0f;
}
}
}
}
}