实验四 定时/计数器实验
一、实验目的
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;
}
}
|