云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 51开发板使用手册 - 图文

51开发板使用手册 - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/5/23 6:24:52

AT89S5X Demo Board User’s Manual Owen Studio P3_3=1; /*关喇叭*/

P2=0x00; /*熄灭8个发光二极管*/ while(1) {

IdleForLogin(); } }

/********************************************************************/ void IdleForLogin() /*登陆系统前的密码检测模块*/ {

static uint s_UARTSendCounter; uchar keyPtr;

keyPtr=KeyJudge(); /*键盘扫描判断*/ if(keyPtr!=0x55) {

switch(c_keyCode[keyPtr]) {

case 0x0a: ReadPassword(); /*按A键:读取24C02中的密码并显示*/ for(i=0;i<5;i++) /*显示密码1秒后恢复*/ {

Delay(20000); } ClearScr(); break;

case 0x0b: WritePassword(); /*按B键:将屏幕中的六位数字设为密码*/ ClearScr(); break;

case 0x0c: ClearScr(); /*按C键:清屏*/ break;

case 0x0d: Login(); /*按D键:比较密码,如果密码正确则进入系统*/ break; case 0x0e: break; /*按*键:保留*/

case 0x0f: break; /*按#键:保留*/

default: ScrShift(keyPtr); /*以上均不是则为数字键,六位数码管顺序左移*/ break; }

UARTKeyFlag=0xaa; /*清串口命令标志位*/ }

if(++s_UARTSendCounter>200) /*定期上传系统状态*/ {

s_UARTSendCounter=0; StatusSend(); } }

- 24 -

AT89S5X Demo Board User’s Manual Owen Studio /********************************************************************/ void Login(void) /*系统登录模块*/ { for(i=0;i<6;i++) /*比较密码是否正确*/ {

if(DisplayArray[i]!=password[i]) { return;

} }

TR1=1; /*启动系统时基Timer1,中断周期10ms*/ ClearScr(); /*清屏*/ s_musicCounter=0x01; LEDFlag=0x01;

ModifyTime(); /*初始设定时间*/ while (1) {

MainSystem(); /*进入系统主程序*/ } }

/********************************************************************/ void MainSystem(void) /*系统主程序*/ {

static uint s_UARTSendCounter; uchar keyPtr;

keyPtr=KeyJudge(); /*键盘扫描判断*/

if(keyPtr!=0x55) /*如果按某键则进行相应处理*/ {

KeyHandle(keyPtr); }

LEDHandle(); /*流水灯处理模块*/

if(++s_UARTSendCounter>200) /*定期上传系统状态*/ {

s_UARTSendCounter=0; StatusSend(); }

if(modifyTimeFlag==1) {

ModifyTime(); /*根据新秒值调整时间*/ modifyTimeFlag=0; } }

/********************************************************************/ void ScanKeys(void) /*扫描键盘模块*/ {

- 25 -

AT89S5X Demo Board User’s Manual Owen Studio uchar scanValue=0xef,iScan,scanTempUchar; for(iScan=0;iScan<4;iScan++) {

P1=scanValue; /*发扫描值*/ scanTempUchar=P1; /*读入扫描值*/ if((scanTempUchar&0x01)==0x00) /*第一列被按*/ {

keyFlag|=(0x0001<<(iScan*4+0)); /*置此键的标志位*/ } else {

keyFlag&=~(0x0001<<(iScan*4+0)); /*清此键的标志位*/ }

if((scanTempUchar&0x02)==0x00) /*第二列被按*/ {

keyFlag|=(0x0001<<(iScan*4+1)); /*置此键的标志位*/ } else {

keyFlag&=~(0x0001<<(iScan*4+1)); /*清此键的标志位*/ }

if((scanTempUchar&0x04)==0x00) /*第三列被按*/ {

keyFlag|=0x0001<<(iScan*4+2); /*置此键的标志位*/ } else {

keyFlag&=~(0x0001<<(iScan*4+2)); /*清此键的标志位*/ }

if((scanTempUchar&0x08)==0x00) /*第四列被按*/ {

keyFlag|=0x0001<<(iScan*4+3); /*置此键的标志位*/ } else {

keyFlag&=~(0x0001<<(iScan*4+3)); /*清此键的标志位*/ }

scanValue=scanValue<<1|0x01; /*置下一次扫描值*/ } }

/********************************************************************/ uchar KeyJudge(void) /*按键预处理*/ {

uchar j,counterKeyPressedNum;

- 26 -

AT89S5X Demo Board User’s Manual Owen Studio uchar keyRet=0x55; /*初始按键返回码设定为无按码0x55*/ uint uintTemp;

ScanKeys(); /*扫描键盘*/ if(keyFlag!=0) {

Delay(1000); /*延时10ms以消除抖动*/ ScanKeys(); P1=0x0f;

while((P1&0x0f)!=0x0f); /*没松开按键就等按键松开*/ counterKeyPressedNum=0; for(j=0;j<16;j++) {

uintTemp=((uint)0x0001)<

if((keyFlag&uintTemp)==uintTemp) /*依次检测键盘扫描标志KeyFlag*/ { /*如某位置一则按键个数寄存器加一*/ counterKeyPressedNum++; keyRet=j; } }

if(counterKeyPressedNum>1) /*如果不止一个键被按则返回无按码0x55*/ {

return 0x55; }

else /*某键被按,返回此键的标识码*/ {

return(keyRet); } }

if(UARTKeyFlag!=0xaa) {

return(UARTKeyFlag); }

return(0x55); }

/********************************************************************/ void KeyHandle(uchar keyIndex) /*按键处理模块*/ {

switch(c_keyCode[keyIndex]) /*按数字键N:循环播放第N首音乐*/ {

case 0x01: s_musicCounter=1; musicAutoFlag=0; s_tableCounter=0x00; break; case 0x02: s_musicCounter=2; musicAutoFlag=0; s_tableCounter=0x00; break; case 0x03: s_musicCounter=3; musicAutoFlag=0; s_tableCounter=0x00; break; case 0x04: s_musicCounter=4; musicAutoFlag=0; s_tableCounter=0x00; break; case 0x0a: sec++; /*按A键:调整时钟秒值*/ ModifyTime();

- 27 -

搜索更多关于: 51开发板使用手册 - 图文 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

AT89S5X Demo Board User’s Manual Owen Studio P3_3=1; /*关喇叭*/ P2=0x00; /*熄灭8个发光二极管*/ while(1) { IdleForLogin(); } } /********************************************************************/ void IdleForLogin() /*登陆系统前的密码检测模块*/ { static uint s_UARTSendCounter; uchar

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com