电子闹钟
来源:互联网 发布:js 通过元素值 查找 编辑:程序博客网 时间:2024/04/30 10:32
电子闹钟的主要原理就是,首先让单片机上八个数码管显示出相应的时间,能对时间的时分秒进行调整,到了自己设定的时间后,让蜂鸣器发出声响。由于是让数码管同时亮起,需要用到动态扫描的知识,为了避免数码管中出现较暗的情况,所以采用了定时器计数的方式让数码管正常显示,同时也用p1口接独立按键来设置闹钟的开始暂停以及修改时间,下面是实现程序代码(自己的单片机为38译码器):
#include <reg51.h>#define dataport P2#define sbitchoice P0 //位选sbit open = P1^0;sbit close = P1^1;sbit stop = P1^2;sbit Addhour = P1^3;sbit Addmin = P1^4;sbit Addsec = P1^5;sbit beel = P0^7;unsigned char code LED1[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07} ; //0-7 位选unsigned char code LED2[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40} ; //0-9unsigned char sec ;unsigned char min ;unsigned char hour = 0 ;unsigned char temp[8] ;void Delay10ms()//@12.000MHz{unsigned char i, j; i = 117;j = 184;do{while (--j);} while (--i);}void delay(unsigned char i) ;void timer_0() ;void main(){ unsigned char i ; unsigned char j ; unsigned char count = 500 ; timer_0() ; while(1) { if(!stop){Delay10ms();if(!stop){while(!stop);TR0 = 0;}}if(!close){Delay10ms();if(!close){while(!close);hour = 0;min = 0;sec = 0;TR0 = 0;}}if(!open){Delay10ms();if(!open){while(!open);TR0 = 1;}}if(!Addhour){Delay10ms();if(!Addhour){while(!Addhour);hour++;if(hour == 24){ hour = 0 ;}}}if(!Addmin){Delay10ms();if(!Addmin){while(!Addmin);min++;if(min == 60){ min = 0 ; hour++ ;}}} if(!Addsec) {Delay10ms();if(!Addsec){while(!Addsec);sec++;if(sec == 60){ sec = 0 ; min++ ;}} } temp[0] = hour/10 ; temp[1] = hour%10 ; temp[2] = 10 ; temp[3] = min/10 ; temp[4] = min%10 ; temp[5] = 10 ; temp[6] = sec/10 ; temp[7] = sec%10 ; for(i=0;i<8;i++) { sbitchoice = LED1[i] ; j = temp[i] ; dataport = LED2[j] ; delay(1) ; } if(temp[0] == 0 &&temp[1] == 0&&temp[3] == 0&&temp[4] == 0&&temp[6] == 2&&temp[7] == 0) { while(count--) //让蜂鸣器响 { beel = ~beel; delay(1) ; temp[0] = hour/10 ; temp[1] = hour%10 ; temp[2] = 10 ; temp[3] = min/10 ; temp[4] = min%10 ; temp[5] = 10 ; temp[6] = sec/10 ; temp[7] = sec%10 ; for(i=0;i<8;i++) { sbitchoice = LED1[i] ; j = temp[i] ; dataport = LED2[j] ; delay(1) ; } } } }}void timer_0(){ TMOD = 0X01 ; TH0 = 0X3C ; TL0 = 0XB0 ; EA =1 ; ET0 = 1 ; TR0 = 1 ;}void time_0_ins(void) interrupt 1{ unsigned char i ; TH0 = 0X3C ; TL0 = 0XB0 ; i++; if(i == 20) { sec++ ; i = 0 ; } if(sec == 60) { min++ ; sec = 0 ; } if(min == 60) { min = 0 ; hour ++ ; } if(hour == 24 ) { hour = 0 ; }}void delay(unsigned char i){unsigned char j,k ;for(j=0;j<150;j++){for(k=0;k<i;k++){; }}}
0 0
- 电子闹钟
- 汇编语言实现电子闹钟
- 基于汇编语言的电子闹钟小程序
- 掉电锁存可调时的电子闹钟
- 闹钟
- 闹钟
- 闹钟
- 闹钟
- 闹钟
- 闹钟
- 闹钟
- 闹钟
- 多功能电子时钟(带时区划分,闹钟,区分上午和下午)
- 电子
- 电子
- 电子
- 电子
- 电子
- 多个线程之间共享数据的方式
- Android Intent总结
- POJ1062
- 【C语言】空语句的作用(还需日后增加)
- Java 数据结构和算法 数组
- 电子闹钟
- Git SSH Key 生成步骤
- VS2015完全重置的方法
- php四种基础算法:冒泡,选择,插入和快速排序法
- 浅谈springboot
- 函数的数据传递
- android动态代理机制
- MySQL的预编译语句的转义探究
- JQuery中serialize()、serializeArray()和param()方法示例介绍