找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6959|回复: 0
收起左侧

用单片机的定时器编写程序控制蜂鸣器,实蜂鸣器响0.5S停0.5S

[复制链接]
ID:451570 发表于 2018-12-21 15:24 | 显示全部楼层 |阅读模式
实验四 定时/计数器实验
一、实验目的
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;        
    }
   
   
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表