单片机==数码管+蜂鸣器+炸弹(15)

来源:互联网 发布:骑士夺冠 知乎 编辑:程序博客网 时间:2024/06/14 07:39
#include <reg52.h>#include <intrins.h>#include "delay.h"#define SEGPORT P0sbit bit_select = P2^0;sbit seg_select = P2^1;sbit beep = P1^7;unsigned char bitdata[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char segdata[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char tempdata[8];unsigned char sec = 1;unsigned char min = 10;unsigned char hour = 0;unsigned char High;unsigned char Low;unsigned char code freq[][2]={   0xD8,0xF7,//00440HZ 1     0xBD,0xF8,//00494HZ 2    0x87,0xF9,//00554HZ 3    0xE4,0xF9,//00587HZ 4      0x90,0xFA,//00659HZ 5       0x29,0xFB,//00740HZ 6       0xB1,0xFB,//00831HZ 7        0xEF,0xFB,//00880HZ `1};unsigned char code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,                                                212,212,106,126,159,169,190,119,119,126,159,142,159,0};unsigned char code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,                                                9,3,12,12,12,12,12,9,3,12,12,12,24,0};void DelayMS(unsigned int x){        unsigned char t;        while(x--)for(t=0;t<120;t++);}void PlayMusic(){        unsigned int i=0,j,k;        while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)        {                for(j=0;j<SONG_LONG[i]*20;j++)                {                        beep = ~ beep;                        for(k=0;k<SONG_TONE[i]/3;k++);                }                DelayMS(10);                i++;        }}void timer0_init(void){    EA = 1;    TMOD |= 0x01;    TH0 = (65536 - 500) / 256;    TL0 = (65536 - 500) % 256;    ET0 = 1;    TR0 = 1;}void timer1_init(void){    EA = 1;    TMOD |= 0x10;    TH1 = (65536 - 1000) / 256;    TL1 = (65536 - 1000) % 256;    ET1 = 1;    TR1 = 1;}void timer0_isr() interrupt 1{    static unsigned char j = 0;    TH0 = (65536 - 500) / 256;    TL0 = (65536 - 500) % 256;    j++;    if(20 == j)    {        j = 0;        sec--;        if(sec == 0)        {            min--;            sec = 60;        }        if(min == 0)        {            min = 0;            sec = 0;            TR0 = 0;        }    }    tempdata[6] = segdata[sec / 10];    tempdata[7] = segdata[sec % 10];    tempdata[5] = 0x40;    tempdata[3] = segdata[min / 10];    tempdata[4] = segdata[min % 10];    tempdata[2] = 0x40;    tempdata[0] = segdata[hour / 10];    tempdata[1] = segdata[hour % 10];}void display(){    static unsigned char i = 0;            SEGPORT = 0x0;            seg_select = 1;            seg_select = 0;            SEGPORT = 0xff;            bit_select = 1;            bit_select = 0;            SEGPORT = tempdata[i];            seg_select = 1;            seg_select = 0;            SEGPORT = bitdata[i];            bit_select = 1;            bit_select = 0;        i++;      if(8 == i)      {            i = 0;      }}void timer1_isr() interrupt 3{    TH1 = (65536 - 1000) / 256;    TL1 = (65536 - 1000) % 256;    display();}void main(){     unsigned char i;     unsigned char cont;     timer0_init();     timer1_init();     while(1)     {       for(cont = 9; cont > 0; cont--)            {                    if(cont == min && 59 == sec)                {                        for(i = 0; i < 200; i++)                    {                        beep = ~beep;                        delay_us(100);                    }                }            }            if(0 == min)            {                    for(i = 0; i < 200; i++)                {                        PlayMusic();                        delay_us(200);                }            }     }}
0 0