77范文网 - 专业文章范例文档资料分享平台

济南大学通信工程大四生产实习综合实训报告2015.9.10 - 图文(4)

来源:网络收集 时间:2019-03-10 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

济南大学电子设计综合实训

sbit K3=P3^6; uchar tCount=0;

uchar MonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31}; uchar *WEEK[]={%uchar LCD_DSY_BUFFER1[]={\显示格式 uchar LCD_DSY_BUFFER2[]={%uchar DateTime[7]; //所读取的日期时间

char Adjust_Index=-1; //当前调节的时间对象:,,分,是,日,月,年(1,2,3,4,6) uchar Change_Flag[]= \ //(分,时,日,月,年)(不调节秒与周) /*---------延时程序------------------*/ void DelayMS(uint ms) {

uchar i;

while(ms--){for(i=0;i<120;i++);} }

//-----------向DS1302写入一字节------------------// void Write_A_Byte_TO_DS1302(uchar x) { uchar i;

for(i=0;i<8;i++){ } }

//-----------从DS1302读取一字节------------------// uchar Get_A_Byte_FROM_DS1302() { uchar i,b=0x00; for(i=0;i<8;i++){ }

return b/16*10+b; //返回BCD码 }

//-----------从DS1302指定位置读数据------------------// uchar Read_Data(uchar addr) {

uchar dat;

RST = 0;SCLK=0;RST=1;

//减

sbit K4=P3^7; //确定

IO=x&0x01; //每一位与1与存入IO中

SCLK=1;SCLK=0; //一个高脉冲将数据送入液晶控制器 x>>=1; // 右移

b |= _crol_((uchar)IO,i); SCLK=1;SCLK=0;

//每一个高脉冲读取一位数据

//RST高电平时读/写

16 / 22

济南大学电子设计综合实训

}

//---------向DS1302某地址写入数据--------------------// void Write_DS1302(uchar addr,uchar dat) { SCLK=0;RST=1;

Write_A_Byte_TO_DS1302(addr); Write_A_Byte_TO_DS1302(dat); SCLK=0;RST=0; }

//--------------设置时间----------------// void SET_DS1302() { uchar i;

//写控制字,取消写保护 Write_DS1302(0x8E,0x00); //分时日月年依次写入 for(i=1;i<7;i++)

{ //分的起始地址10000010(0x82),后面依次是时,日,月,周,年,写入地址每次递增2

}

Write_DS1302(0x8E,0x80); //加保护 }

//----------读取当前日期时间------------// void GetTime() {uchar i;

for(i=0;i<7;i++){ }

//-----------读LCD状态------------------// uchar Read_LCD_State() { uchar state;

RS=0;RW=1;EN=1; //输出:D0~D7=状态字 DelayMS(1); state=P0;

//从P0口读LCD状态

EN = 0;DelayMS(1); return state; }

//-----------忙等待------------------//

17 / 22

Write_A_Byte_TO_DS1302(addr); SCLK=1;RST=0;

//先写入地址

dat = Get_A_Byte_FROM_DS1302(); return dat;

//高脉冲写入数据

Write_DS1302(0x80+2*i,(DateTime[i]/10<<4)|(DateTime[i]));

DateTime[i]=Read_Data(0X81+2*i);}

济南大学电子设计综合实训

void LCD_Busy_Wait() {

while((Read_LCD_State()&0x80)==0x80); DelayMS(5); }

//-----------向LCD写数据------------------// void Write_LCD_Data(uchar dat) {

LCD_Busy_Wait(); RS=1;EN=0;RW=0; }

//-------------写LCD指令-------------------// void Write_LCD_Command(uchar cmd) {

LCD_Busy_Wait();

RS=0;EN=0; RW=0; //写指令,EN高脉冲,输出:D0~D7=数据 P0=cmd;EN=1;DelayMS(1);EN=0; }

//-------------LCD初始化-------------------// void Init_LCD() {

Write_LCD_Command(0x38); //设置16*2显示,5*7点阵,8位数据接口 DelayMS(1);

Write_LCD_Command(0x01); //显示清零,数据指针清零 DelayMS(1);

Write_LCD_Command(0x06); //写一个字符后地址指针自动加1 DelayMS(1);

Write_LCD_Command(0x0c); //设置开显示,不显示光标 DelayMS(1); }

//------------------------------------------ //设置液晶显示位置

//------------------------------------------ void Set_LCD_POS(uchar p){

Write_LCD_Command(p|0x80);//相当于在0x80基础上加入位置量 }

//----在LCD上显示字符串---------//

18 / 22

//写数据,EN为高脉冲,

P0=dat;EN=1;DelayMS(1);EN=0;

济南大学电子设计综合实训

void Display_LCD_String(uchar p,uchar *s) {

uchar i;

Set_LCD_POS(p); for(i=0;i<16;i++) { } }

//---------日期与时间值转换为数字字符----------------// void Format_DateTime(uchar d,uchar *a) {

a[0]=d/10+'0'; a[1]=d+'0'; }

//判断是否为闰年 uchar isLeapYear(uint y)

{ return (y%4==0&&y0!=0)||(y@0==0);} //求自2000.1.1开始的任何一天是星期几 //函数没有通过,求出总天数后再求星期几 //因为求总天数可能会超出uint的范围 void RefreshWeekDay() { uint i,d,w=5; { } d=0;

for(i=1;i

d+=MonthsDays[i];

}

d+=DateTime[3];

//保存星期,0~6表示星期日,星期一,二,...,六,为了与DS1302的星期格式匹配,

返回值需要加1

DateTime[5]=(w+d)%7+1; }

//*****年月日时分++/--********// void DateTime_Adjust(char x) {

Write_LCD_Data(s[i]); //在固定位置显示时间日期 DelayMS(1);

//已知1999.12.31是周五

for(i=2000;i<2000+DateTime[6];i++)

d=isLeapYear(i)?366:365; w=(w+d)%7;

switch(Adjust_Index)

19 / 22

济南大学电子设计综合实训

{ } }

//---定时器0每秒刷新LCD显示----// void T0_INT() interrupt 1 {

20 / 22

case 6: //年00-99

if(x==1&&DateTime[6]<99) DateTime[6]++; if(x==-1&&DateTime[6]>0) DateTime[6]--; //获取2月天数

MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28; //如果年份变化后当前月份的天数大于上限则设为上限 if(DateTime[3]>MonthsDays[DateTime[4]]) {

DateTime[3]=MonthsDays[DateTime[4]];} RefreshWeekDay(); //刷新星期 break;

if(x==1&&DateTime[4]<12) DateTime[4]++; if(x==-1&&DateTime[4]>1) DateTime[4]--;

MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28; if(DateTime[3]>MonthsDays[DateTime[4]]) {

DateTime[3]=MonthsDays[DateTime[4]];} RefreshWeekDay(); break;

MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28; //根据当前月份决定调节日期的上限

if(x==1&&DateTime[3]0) DateTime[3]--; RefreshWeekDay(); break;

if(x==1&&DateTime[2]<23) DateTime[2]++; if(x==-1&&DateTime[2]>0) DateTime[2]--; break;

//分

if(x==1&&DateTime[1]<59) DateTime[1]++; if(x==-1&&DateTime[1]>0) DateTime[1]--; break;

case 4: //月01-12

case 3: //日00-28、29、30、31,调节之前首先根据年份得出该年中断二月 天数

case 2: //时

case 1:

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库济南大学通信工程大四生产实习综合实训报告2015.9.10 - 图文(4)在线全文阅读。

济南大学通信工程大四生产实习综合实训报告2015.9.10 - 图文(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/508912.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: