教室自动感应照明控制系统的设计(5)

2019-05-27 18:08

陕西理工学院毕业论文

附录B 主程序

#include #include

#define uchar unsigned char #define uint unsigned int

//uchar time_data[7]={13,5,10,18,0,30,50}; //年周月日时分秒 ,初始化 uchar time_data[7];

uchar code write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; //数据的地址 uchar code read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};

uchar code table1[]=%uchar code table2[]=\ |00:00:00 0%uchar code table3[]=\ //清屏内容 uchar code table4[]=\ Set Real Time %uchar code table5[]=\ Set Open Time %uchar code table6[]=\ Start Time: %uchar code table7[]=\ 00:00:00 %uchar code table8[]=\ End Time: %uchar code table9[]=%uchar code table0[]=\

bit Adjust; //调节标志位,=1表示进入调节模式,=0是正常模式 bit Auto_flg; //自动模式标志位,=1表示手动模式,=0是自动模式 sbit rs=P1^0; //LCD1602 sbit rw=P1^1; //LCD1602 sbit e=P1^2; //LCD1602 sbit sck=P2^5; //时钟端口 sbit io=P2^6; //时钟端口 sbit rst=P2^7; //时钟端口 sbit SELT =P1^6; //选择键 sbit ENTER=P1^7; //确认键 sbit UP =P3^0; //加键 sbit DOWN =P3^1; //减键

sbit MODE =P3^2; //切换按键接口 sbit SWITCH=P3^3; //手动开关

sbit AUTO_LED=P1^3; //自动模式灯接口 sbit HAND_LED=P1^5; //手动灯接口 sbit LAMP1=P3^4; //灯接口 sbit LAMP2=P3^5; //灯接口 sbit LAMP3=P3^6; //灯接口 sbit LAMP4=P3^7; //灯接口 sbit LIGHT1=P2^0; //光线检测端口 sbit IN1=P2^2; sbit OUT1=P2^1;

第18页 ,共38页

陕西理工学院毕业论文

uchar Select_num; //选择按键按下次数 uchar Enter_num; //确认按键按下次数 float Year,Month,Day,Hour,Minute,Second; //时间设置值 uchar Week;

float Hour_H,Minute_H,Second_H; //设置开始时间 float Hour_L,Minute_L,Second_L; //设置结束时间 int Value1; //人数 uchar IN1_flag=0; uchar OUT1_flag=0; void read_rtc();

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

void delay1(uint z) //延时函数 { uint x,y; for(x=z;x>0;x--) for(y=10;y>0;y--); }

void write_com(uchar com) //写指令函数 { rw=0; delay1(5); rs=0; delay1(5); e=1; delay1(5); P0=com; delay1(5); e=0; delay1(5); }

void write_date(uchar date) //写数据函数 { rw=0; delay1(5); rs=1; delay1(5); e=1; delay1(5); P0=date; delay1(5); e=0; delay1(5);

第19页 ,共38页

陕西理工学院毕业论文

}

void init() //初始化函数 { uchar num; Year=16; Month=1; Day=1; Hour=15; Minute=30; Second=50; Week=6; Hour_H=22; Minute_H=0; Second_H=0; Hour_L=18; Minute_L=0; Second_L=0; e=0; // 时序表e初始为0 write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口 write_com(0x0c); //设置光标 write_com(0x06); //光标自动加1,光标输入方式 write_com(0x01); //清屏 write_com(0x80); //设置初始显示位置 for(num=0;num<16;num++) { write_date(table1[num]); delay1(5); } write_com(0x80+0x40); for(num=0;num<16;num++) { write_date(table2[num]); delay1(5); } }

void SetTime_dispaly(uchar add,uchar dat) //第一个:参数的地址,第二个:参数的内容 { uchar shi,ge; shi=dat/10; //把十位提取出来 ge=dat; //把个位提取出来 write_com(add); //要写的地址 write_date(0x30+shi); //十位的内容 1602字符库 write_date(0x30+ge); //个位的内容 1602字符库 }

第20页 ,共38页

陕西理工学院毕业论文

void Week_dispaly(uchar add,uchar dat) //第一个:参数的地址,第二个:参数的内容 { write_com(add); //要写的地址 write_date(0x30+dat); //十位的内容 1602字符库 }

void Date_dispaly(uchar add,uchar dat) //第一个:参数的地址,第二个:参数的内容 { uchar shi,ge; shi=dat/16; //把十位提取出来 ge=dat; //把个位提取出来 write_com(add+3); //要写的地址 write_date(0x30+shi); //十位的内容 1602字符库 write_date(0x30+ge); //个位的内容 1602字符库 }

void LCD_Clean(uchar i) //液晶屏清除显示 { uchar num; if(i==1) { write_com(0x80); //设置初始显示位置 for(num=0;num<16;num++) //显示第一行内容 { write_date(table3[num]); delay1(1); } } if(i==2) { write_com(0x80+0x40); for(num=0;num<16;num++) //显示第二行内容 { write_date(table3[num]); delay1(1); } } }

void LCD_Display_String(unsigned char line,unsigned char *string) { //液晶屏显示内容,把要显示的内容写到对应的位置 unsigned char i; unsigned char address=0; if(line==1) { address=0x80; //0X80是第1行的第1个位置 ,0x81第2位

第21页 ,共38页

陕西理工学院毕业论文

}

else if(line==2) { address=0x80+0x40; //0X80+0x40是第2行的第1个位置,0X80+0x40+1是第2行第2

} for(i=0;i<16;i++) { write_com(address); write_date(string[i]); address++; } }

void Time_Display(void) { read_rtc(); Date_dispaly(0x80+0x40+9,time_data[6]); //显示秒 Date_dispaly(0x80+0x40+6,time_data[5]); //显示分 Date_dispaly(0x80+0x40+3,time_data[4]); //显示时 Date_dispaly(0x80+11,time_data[3]); //显示日 Date_dispaly(0x80+8,time_data[2]); //显示月 Week_dispaly(0x80+0x40+15,time_data[1]); //显示周 Date_dispaly(0x80+5,time_data[0]); //显示年 // Year/10*16+Year Hour=time_data[4]/16*10+time_data[4];; Minute=time_data[5]/16*10+time_data[5];; Second=time_data[6]/16*10+time_data[6];; }

void write_ds1302_byte(uchar dat) { uchar i; for(i=0;i<8;i++) { sck=0; io=dat&0x01; //准备数据,从最低位开始 dat=dat>>1; sck=1; } }

void write_ds1302(uchar add,uchar dat) {

第22页 ,共38页


教室自动感应照明控制系统的设计(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高中物理电学实验超级总结

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

马上注册会员

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