實驗四 定時/計數器實驗
一、實驗目的
1. 了解單片機的基礎定時器的工作原理。
2. 掌握單片機的定時器的應用。
二、實驗內容
1. 用單片機的定時器編寫程序控制蜂鳴器,實蜂鳴器響0.5S停0.5S。
2.用單片機的定時器編寫程序實現一個簡單的電子時鐘。要求在四位數碼管上動態顯示時分秒,秒顯示每秒鐘閃爍一次。
//1. 用單片機的定時器編寫程序控制蜂鳴器,實蜂鳴器響0.5S停0.5S。
//#include <stc15.h>
//typedef unsigned int u16;
//u16 ms=0;
//void Timer1Init(void);
//void Timer1Init(void) //50毫秒@12.000MHz
//{
// AUXR &= 0xBF; //定時器時鐘12T模式
// TMOD &= 0x0F; //設置定時器模式
// TL1 = 0xB0; //設置定時初值
// TH1 = 0x3C; //設置定時初值
// TF1 = 0; //清除TF1標志
// ET1 = 1;
// TR1 = 1; //定時器1開始計時
//}
//void main()
//{
// P1M0 |= 0x01;
// P1M1 &= ~0x01;
// Timer1Init();
// EA=1;
// while(1)
// {
//
// }
//}
//void tm1_isr() interrupt 3
//{
// ms++;
// if(ms>=10)
// {
// ms=0;
// P10=!P10;
//
// }
//}
//2.用單片機的定時器編寫程序實現一個簡單的電子時鐘。要求在四位數碼管上動態顯示時分秒,秒顯示每秒鐘閃爍一次。
#include <stc15.h>
typedef unsigned char u8;
typedef unsigned int u16;
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
u8 code BLOCK[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
u16 ms=0;
u8 wei=1;
u8 s=59,m=59,h=23;
void Timer1Init(void) //2毫秒@11.0592MHz
{
AUXR |= 0x40; //定時器時鐘1T模式
TMOD &= 0x0F; //設置定時器模式
TL1 = 0x9A; //設置定時初值
TH1 = 0xA9; //設置定時初值
TF1 = 0; //清除TF1標志
ET1 = 1;
TR1 = 1; //定時器1開始計時
}
void main()
{
P0M0 |= 0xF0;
P0M1 &= ~0xF0;
P1M0 = 0xFF;
P1M1 = 0x00;
Timer1Init();
EA=1;
while(1)
{
}
}
void tm1_isr() interrupt 3
{
ms++;
if(ms>=500)
{
ms=0;
s++;
if(s>=60)
{
s=0;
m++;
if(m>=60)
{
m=0;
h++;
if(h>=24)
{
h=0;
}
}
}
}
switch ( wei )
{
case 1:
P07=1;
P1=BLOCK[h/10%10];
P04=0;
wei=2;
break;
case 2:
P04=1;
if(ms<250)
{
P1=BLOCK[h%10] | 0x80;
}
else
{
P1=BLOCK[h%10];
}
P05=0;
wei=3;
break;
case 3:
P05=1;
P1=BLOCK[m/10%10];
P06=0;
wei=4;
break;
case 4:
P06=1;
P1=BLOCK[m%10];
P07=0;
wei=1;
break;
}
}
|