时钟五:用串口发送时间,实现闹钟

主文件函数:

#include <reg52.h>
#include "./delay/delay.h"

#define PORTLEN P0
#define KEYPORT P1

sbit bit_select = P2^0;
sbit seg_select = P2^1;
sbit beem = P3^2;


unsigned char code SONG_TONE[]={239,239,212,189,159,159,189,159,159,142,126,120,120,159,120,120,142,159,189,142,159,189,239,212,189,159,142,159,189,212,239};
unsigned char code SONG_LONG[]={6,6,9,3,6,6,12,6,6,6,6,6,6,12,6,6,9,3,6,6,9,3,6,3,3,6,3,3,6,6,9};
unsigned char src[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char qrc[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char second1[8];
unsigned char ch[9] = {0};
void uart_send_byte(unsigned char byte);
void uart_send_str(unsigned char *str);
unsigned char flag = 0;
unsigned char shi = 0;
unsigned char fen = 0;
unsigned char miao = 0;
unsigned char Dshi = 3;
unsigned char Dfen = 1;
unsigned char Dmiao = 0;
unsigned char j = 7;
unsigned char k = 0;


void timer0_init(void)
{
	  EA = 1;
	  TMOD |= 0x01;
	  TH0 = (65536 - 20000) / 256;
	  TL0 = (65536 - 20000) % 256;  
	  ET0 = 1;  
	  TR0 = 1;  
} 

unsigned char key_scan(void)
{
	  unsigned char keyvalue;
	  KEYPORT = 0xf0;
	  if(0xf0 != KEYPORT)
		{
			  delay_ms(10);
			  if(0xf0 != KEYPORT)
				{
					  KEYPORT = 0xfe;
					  if(0xfe != KEYPORT)
						{
							  keyvalue = KEYPORT;
							  keyvalue &= 0xf0;
							  keyvalue += 0x0e;
							  while(0xfe != KEYPORT);
						    delay_ms(10);
								while(0xfe != KEYPORT);
							  return keyvalue;
						
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
//20100222 计数中断已正常运行 //20100222 数码管基本能扫描显示,但还不能持久时间 //20100228 已经持续显示,秒点还没闪动,时间走的有点慢,任意按键,分加1 ,按键还有问题不能判断是按的哪个键 //20100302 修改完成进入闹钟不能自动退出闹铃的问题,此问题是调用delay引起,用sleep即可自动退出死循环 //20100303 完善修改时间时,正常的时间显示,不再有数码管有时间段不显示 //20100304 增加时间调整的增与减功能,即分钟的K1、K2为+、K3、K4为- //20100308 完成闹钟的闹铃时长 //20100313 增加星期参数,并设置周六、周日闹铃无效 //20100316 解决printf打印时,8位总是答应成32位 //20100317 解决4个按键的检测问题,读取端口值运算时,还有些其它未知码,判值函数中去掉打印函数也出现判值失败; 增加闹钟响铃时解除响铃功能 //20100319 完善小时调整时,星期不变的BUG? 调小时时, 在分钟位上显示星期; 调整分钟时,在小时上显示星期; 按键检测错误时,4个数码管都显示星期 //20100322 走的快,增加自动纠正时间 //20100323 校准函数有bug,校准进入死循环时间不进位 //20100428 响铃时间总时长100秒,增加小于100秒的补偿处理,即任运行响铃,但不发声 多键定义值,各按键的和,以此判断是哪几复合键按下 //20100604 新板增加到10个按键,修改按键程序,UINT UCHAR ktmp //20100605 旋转180度显示时间 //20100606 添加按键5调星期 //20100607 显示闹钟定时的时间,可手工调整定时的小时、分 。定义有3个可调闹钟 //6键显示闹钟1,7键显示闹钟2, //8键闹钟1小时++,9键闹钟1分钟++ // C51 128--->S52 256 ////20100609 //1 自检、显示星期、自动补偿秒、定时数据、 //2 显示当前指向的星期或自动调整秒的数值 菜单深度不变 menudeep_deel_B_still() //3 菜单深度百位0-1循环,星期与秒自动调整指向的焦点相互切换 menudeep_deel_B() //4 根据焦点指向,内容自- menudeep_deel_B_jian() //5 根据焦点指向,内容自+ menudeep_deel_B_jia() //6 每按一次按键菜单深度个位++,0-9循环,显示定时闹钟、当前时间 menudeep_deel_G() //7 菜单深度不变,显示当前焦点指向的定时闹钟、当前时间的的时、分 menudeep_deel_still() //8 菜单深度十位0-1循环,当前焦点指向闹钟或当前时间的时与分,循环互相切换 menudeep_deel_S() //9 根据焦点指向,内容自+ menudeep_deel_jian() //10 根据焦点指向,内容自- menudeep_deel_jia() //20100610 1-4键无定义功能,6-10已定义功能。所有定时可以修改闹钟时间,当前时间闹钟时间的修改键集中在9、10键上 //20100612 增加函数调用、按键引起的需要秒钟补偿 //20100621 增加手工调整时间的数值大小 //20100621 集成星期与秒自动调整的按键程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值