8051照明灯智能控制器(6)

2019-03-27 20:25

TL0=(65536-50000)%6; //赋初值定时器0给TL0

if((P1&0x0f)!=0x0f) //判断P1.0-P1.4是否有键按下 {

delaysecond(); //调用键盘延时子程序,用于消除干扰 if((P1&0x0f)!=0x0f) //判断P1.0-P1.4是否有键按下 {

scankey(); //调用键盘扫描子程序scankey() } }

count++; //计数单元count自加加 if(count==2) //如果计数单元count为2 {

count=0; //计数单元count清零 second_l++; //second_l缓冲区自加加 if(second_l==10) //如果second_l0缓冲区为10 {

second_l=0; //second_l秒缓冲区赋值为0 second++; //second缓冲区自加加

if(second==60) //如果second缓冲区的内容为24 {

second=0; ///second缓冲区赋值为0 minte++; //minte缓冲区自加加

if(minte==60) //如果minte缓冲区内容为60 {

minte=0; //minte缓冲区赋值为0 hour++; //hour缓冲区自加加

if(hour==24) //如果hour缓冲区的内容为24 {

second=0; //把second缓冲区的内容赋值为0 minte=0; //把minte缓冲区的内容赋值为0 hour=0; //把hour缓冲区的内容赋值为0 } } }

} } }

//******************************** //***********display************** //******************************** void display(void) {

uchar i; //定义字符型变量i

第 22 页 共 27 页

buffer[0]=second/10; //取出秒缓冲区(second)的高位,放入数组缓冲区buffer[0]

buffer[1]=second; //取出秒缓冲区(second)的高位,放入数组缓冲区buffer[1]

buffer[2]=minte/10; //取出分缓冲区(minte)的高位,放入数组缓冲区buffer[2]

buffer[3]=minte; //取出分缓冲区(minte)的高位,放入数组缓冲区buffer[3]

buffer[4]=hour/10; //取出时缓冲区(hour)的高位,放入数组缓冲区buffer[4]

buffer[5]=hour; //buffer[5]

buffer[6]=second_l; //if(start==0) //{

P0=0xc0;enable(); //for(i=13;i<16;i++) {

P0=table3[i]; //P0 write(); //} }

if(start==1) // {

P0=0xc0;enable(); //for(i=10;i<13;i++) {

P0=table3[i]; //P0 write(); //} }

P0=0xc3;enable(); //for(i=4;i<6;i++) {

P0=table3[buffer[i]]; //P0 write(); // }

P0=0xc6;enable(); // for(i=2;i<4;i++) {

P0=table3[buffer[i]]; //P0 write(); // }

P0=0xc9;enable(); //

取出时缓冲区(hour)的高位,放入数组缓冲区取出0.6秒,放入数组缓冲区buffer[6] 判断是否为设置标志位,start==0为假 从液晶地址(0xc0)开始写数据 口输出table3[]数组里面的数据 调用写数据子程序 判断是否为设置标志位,start==1为真 从液晶地址(0xc0)开始写数据 口输出table3[]数组里面的数据 调用写数据子程序 从液晶地址(0xc6)开始写数? 口输出table3[]数组里面的数据 调用写数据子程序 从液晶地址(0xc6)开始写数据 口输出table3[]数组里面的数据 调用写数据子程序 从液晶地址(0xc9)开始写数据

第 23 页 共 27 页

for(i=0;i<2;i++) {

P0=table3[buffer[i]]; //P0口输出table3[]数组里面的数据 write(); //调用写数据子程序 }

P0=0xcc;enable(); //从液晶地址(0xcc)开始写数据 _nop_(); //调用_nop_();函数 _nop_(); //调用_nop_();函数

P0=table3[buffer[6]]; //P0口输出table3[]数组里面的数据 write(); //调用写数据子程序 }

//******************************** //******************************** void timer1()interrupt 3 using 1 {

TH1=(65536-50000)/256; //重新赋值给定时器1的TH1 TL1=(65536-50000)%6; //重新赋值给定时器1的TL1 checktime(); checkdaytime(); }

//*************************************************** void sys_init2(void) //初始化定时器2 {

T2CON = 0x04; //*加载定时器2的控制寄存器

T2MOD = 0x00 //*加载定时器2的模式寄存器*/ TH2 = 0xFC; //*加载定时器2的高位字节*/

RCAP2H = 0xFC; //*加载定时器2的重装寄存器的高位字节*/ TL2 = 0x18; //*加载定时器2的低位字节*/

RCAP2L = 0x18; //*加载定时2器2的重装寄存器的低位字节*/ ET2 = 1; //*使能定时2中断*/ TR2 = 1; //*启动定时器2*/ }

//**************************************************** void timer2(void)interrupt 5 using 1 {

display(); //调用显示子程序 }

//********************************** void temptime(void) {

tempsecond=second; //把此时秒(second)缓冲区的值赋给tempsecond tempminte=minte; //把此时分(minte)缓冲区的值赋给tempminte temphour=hour; //把此时时(hour)缓冲区的值赋给tempdayhour temphour=temphour+4; //把此时时(temphour)缓冲区的值加4

第 24 页 共 27 页

}

//**********************************

void tempdaytime(void) {

tempdaysecond=second; //把此时秒(second)缓冲区的值赋给tempdaysecond tempdayminte=minte; //把此时分(minute)缓冲区的值赋给tempdayminte tempdayhour=hour; //把此时秒(hour)缓冲区的值赋给tempdayhour tempdayminte=tempdayminte-1; //把此时秒(second)缓冲区的值赋给tempdaysecond firstday=1; }

//********************************************************************* //********************************

void checkdaytime(void) //用于检测是否是天亮前1个小时到否 {

if(hour==temphour) //如果小时(hour)到,向下检测 {

if(minte==tempminte) //如果分钟(minute)到,再向下检测 {

if(second==tempsecond) //如果秒(second)到,执行下面指令(P3_6=0) {

P3_6=0; //灯亮 Tofirst=0; } } } }

//***************************

void checktime(void) //用于检测是否是天亮前1个小时到否 {

if(hour==temphour) //如果小时(hour)到,向下检测 {

if(minte==tempminte) //如果分钟(minute)到,向下检测 {

if(second==tempsecond) //如果秒(second)到,执行下面指令(P3_6=1) {

P3_6=1; //灯灭 Tofirst=1; } } } }

//***************************

void scankey(void) //键盘扫描程序,用于调整标准时钟的时间

第 25 页 共 27 页

{

uchar key; //定义一个字符变量,用于存放P1口的数据 key=P1; //把P1口的数据传送给key存储单元 switch(key) //应用switch语句,以便判断下面状态 {

case 0xfe: minte++; //当P1口等于0xfe时,minte++

callmusic(); //同时调用callmusic()子程序,以便识别P1.0口按下 if(minte==60) //当minte等于60时,执行minte=0 {

minte=0; //执行minte=0语句 }

break;//退出switch语句

case 0xfd: hour++; //当P1口等于0xfd时,hour++

callmusic(); //同时调用callmusic()子程序,以便识别P1.1口按下 if(hour==24) //当hour等于24时,执行hour=0 {

hour=0; //执行hour=0语句 }

break;//退出switch语句

case 0xfb:callmusic(); break;

} }

//********************** //*******delay********** //**********************

void delayfirst(void) //延时子程序1,用于液晶显示 {

uchar i,j; //定义两个字符变量i,j

for(i=1;i<30;i++) //用两个for循环语句来实现延时 for(j=1;j<19;j++); }

//**********************

void delaysecond(void) //延时子程序2,用于键盘去抖动 {

uchar i,j; //定义两个字符变量i,j for(i=1;i<150;i++)

for(j=1;j<=110;j++); //用两个for循环语句来实现延时 }

void callmusic(void) //响铃子程序,用于驱动器BELL发声 {

uint key; //定义一个整形变量

第 26 页 共 27 页

key=1; //初始化key=1

while(key) //当key值为真时,执行下面语句 { _nop_(); //调用_nop_();函数

P1_7=~P1_7; //P1_7取反,使之高低电平变换 _nop_(); //调用_nop_();函数 _nop_(); //调用_nop_();函数 _nop_(); //调用_nop_();函数 _nop_(); //调用_nop_();函数 _nop_(); //调用_nop_();函数 _nop_(); // _nop_(); // _nop_(); // _nop_(); // _nop_(); // P1_7=~P1_7; //P1_7 _nop_(); // _nop_(); // _nop_(); // _nop_(); // _nop_(); //key++; //keyif(key==2400) //{

key=0; //key} } }

调用_nop_();函数 调用_nop_();函数 调用_nop_();函数 调用_nop_();函数 调用_nop_();函数

取反,使之高低电平变换 调用_nop_();函数 调用_nop_();函数 调用_nop_();函数 调用_nop_();函数 调用_nop_();函数 值++

当key值等于2400时 值再赋于0 第 27 页 共 27 页


8051照明灯智能控制器(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:于开展普惠性幼儿园认定工作的通知

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: