收藏 分销(赏)

GP32闹钟.doc

上传人:xrp****65 文档编号:7592409 上传时间:2025-01-09 格式:DOC 页数:4 大小:37KB 下载积分:10 金币
下载 相关 举报
GP32闹钟.doc_第1页
第1页 / 共4页
GP32闹钟.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
#include "Includes.h" //总头文件 #define KEYP PTD #define KEYD DDRD #define KEYPEU PTDPUE unsigned char sec=0; //秒,分,小时 unsigned char minit=0; unsigned char hour=0; unsigned char k[]={0,0,0,0},s[]={0,0,0,0}; //Timer1Init:定时器初始化----------------------------------------* //功能:将定时器初始化为一秒钟一次溢出中断。 //-------------------------------------------------------------------------* void Timer1Init(void) { //不允许溢出中断、不启动计数、分频因子 = 64 T1SC=0b00100110; //计数器寄存器初值=0x0000 T1CNTH=0x00; T1CNTL=0x00; //1秒产生1次溢出中断,预置寄存器=1×(2457600/64)=9600 T1MODH=0x96; T1MODL=0x00; } void Timer1Over(void) //定时器溢出子程序 { DisableMCUInt(); sec++; //秒加1 T1SC&= ~(1<<7); //清除定时器溢出标志位 EnableMCUInt(); } void Delay(int times) { int i; for(i=0;i<times;i++); } void LEDshow(unsigned char a[]) { unsigned char i; const unsigned char Table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //显示码表 DDRB = 0xff; //数据口为输出 DDRC = 0xff; //位选口为输出 PTB = 0x0; //数据口输出全0,即全不亮 for (i=0;i<4;i++) { PTC = ~(0b00000001 << i); //送位选信号 PTB = Table[a[i]]; //取显示码并送到LED数据线 if ( (sec%2==0) &i==1) PTB= Table[a[i]]+0x80; Delay(100); } } unsigned char key_scan(void) //键盘扫描函数 { int i; unsigned char line, row, k_value; static unsigned char lastkey=0xff; const unsigned char KBTable[] = { 0xEE,'7',0xDE,'4',0xBE,'1',0x7E,'0', 0xED,'8',0xDD,'5',0xBD,'2',0x7D,'A', 0xEB,'9',0xDB,'6',0xBB,'3',0x7B,'B', 0xE7,'C',0xD7,'D',0xB7,'E',0x77,'F', 0x00,0xff }; //PTD0~PTD3输出0 KEYD =0x0f; KEYPEU=0xf0; KEYP=KEYP & 0xF0; if ((KEYP & 0xf0) == 0xf0) return 0xff; //无键按下 row = KEYP; //延时,消除抖动 for(i=0;i<100;i++); if (row != KEYP) return 0xff; //判为抖动,无键按下 line=0xFE; for (i=0;i<4;i++) { KEYP = line; //输出扫描信号 row=KEYP; //读键盘口 if ((row & 0xf0) != 0xf0) break; line=(line<<1)+1; } if (i==4) return 0xff; k_value = (row & 0xf0) | (line & 0x0f) ; for (i=0; i<32; i+=2) if (k_value == KBTable[i]) break; if(lastkey==KBTable[i+1]) return 0xff; lastkey=KBTable[i+1]; return KBTable[i+1]; } void timeset() { unsigned char j=0,m=0; unsigned char key; while(1) //设置当前时间 { LEDshow(s); if (j==4) {key=0xff; break;} key=key_scan(); if (key==0xff) continue; key = key-0x30; s[j]=key; j++; } } void alarmset() {unsigned char j=0,m=0; unsigned char key; while(1) //设置闹钟时间 { LEDshow(k); if (m==4) break; key=key_scan(); if (key==0xff) continue; key = key - 0x30; k[m]=key; m++; } } //主函数 void main() { unsigned char a[]={0,0,0,0}; unsigned char kk; DisableMCUInt(); //禁止总中断 MCUInit(); //芯片初始化 Timer1Init(); //定时器1的初始化 T1SC|=(1<<6); //令T1SC.6=1,开放Timer1溢出中断 T1SC &= ~(1<<5); //清T1SC.5,允许定时器1计数 EnableMCUInt(); //开总中断 while(1) { kk=key_scan(); if(kk=='A') { timeset(); } else if(kk=='B') { alarmset(); } else { if(sec>=60) { minit++; sec=0; if (minit>=60) {hour++;minit=0;} } a[0] =s[0]+hour/10; a[1] =s[1]+hour %10; a[2] =s[2]+minit/10; a[3] =s[3]+minit %10; LEDshow(a); if (a[0]==k[0] & a[1]==k[1] & a[2]==k[2] & a[3]==k[3]) { DDRC=0xff; PTC=PTC&&~(1<<4); } else { DDRC=0xff; PTC=PTC||~(1<<4); } } } }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服