单片机==数码管+蜂鸣器+炸弹(15)
2016-10-04 21:30
253 查看
#include <reg52.h> #include <intrins.h> #include "delay.h" #define SEGPORT P0 sbit 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); } } } }
相关文章推荐
- 单片机中数码管蜂鸣器炸弹
- 【蓝桥杯单片机组】(2)锁存器、数码管、蜂鸣器、继电器
- 单片机控制流水灯 数码管显示时间 蜂鸣器报警
- 单片机学习札记4---调试蜂鸣器驱动
- 单片机数码管码段
- 单片机小白学步系列(二十二) IO口:蜂鸣器的使用/三极管的工作原理
- 基于proteus的51单片机仿真实例五十九、1位数码管显示实例
- 学习笔记 从零开始学单片机(8) 蜂鸣器唱歌
- 单片机C语言实现数码管控制
- 2015.07.25 STC15单片机学习日记-时钟与复位
- 89C52单片机之数码管中断
- 6.5 单片机数码管显示消隐
- 51单片机之外设——玩转数码管
- 关于郭天祥51单片机教程视频课后题《同时用两个定时器控制蜂鸣器发声》
- 单片机数码管动态显示
- 重拾单片机 第二天 数码管的使用 ( 按下加按键,数值增加直到最大值,按减按键,数值减小,直到最小值 )
- 单片机蜂鸣器控制程序和驱动电路
- 单片机控制蜂鸣器
- STC15系列单片机检测不到,下载不成功
- 利用单片机串口通信,使蜂鸣器发音