万年历的设计与制作(基于单片机) - 图文(4)
电气与电子信息工程学院 课程设计报告
、主程序
#include
#define uchar unsigned char #define uint unsigned int
sbit RS=P2^0; //数据/命令选择端 sbit RW=P2^1; //读/写选择端 sbit E=P2^2; //1602使能 sbit IO=P1^0; //DS1302数据口 sbit SCLK=P1^1;//DS1302串行时钟 sbit RST=P1^2; //DS1302时钟复位脚 sbit DQ=P1^3; //DS18B20温度 sbit K1=P3^3; //功能 sbit K2=P3^4; //增加 sbit K3=P3^5; //减少 sbit K4=P3^6; //确定 sbit K5=P3^7; //取消 sbit led=P2^4;//温度报警
sbit buzz=P2^3;// 蜂鸣器报警 uchar data LCD_DSY_BUFFER1[]={\ uchar data LCD_DSY_BUFFER2[]={\ uchar data Temp_BUFFER[8];
char *week[]={\ uchar days[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; uchar data DateTime[7];//秒、分、时、日、月、周、年 uchar Adjust_Index=-1;//时钟调节标志 uint tvalue;//温度值
uchar tflag;//温度正负标志
//微妙延时程序(约为10us(小于)) void delayus(uint us) {
while(us--); } //毫秒延时程序
void delayms(uint ms) {
uint i,j;
for(i=ms;i>0;i--) for(j=110;j>0;j--); } //写LCD命令寄存器
void Write_LCD_Command(uchar cmd) { RS=0; RW=0; P0=cmd;
8
2
电气与电子信息工程学院 课程设计报告
E=1;
delayms(5); E=0;
}//写LCD数据寄存器
void Write_LCD_Data(uchar dat) { RS=1; RW=0; P0=dat; E=1;
delayms(5); E=0;
}//显示字符串
void LCD_ShowString(uchar x,uchar y,uchar *str) {
uchar i=0; if(y==0)
Write_LCD_Command(0x80|x); else if(y==1)
Write_LCD_Command(0xc0|x);
for(i=0;i<16&&str[i]!='\\0';i++) Write_LCD_Data(str[i]); }//刷新LCD显示缓冲区 void Refresh_LCD_BUFFER() {
LCD_DSY_BUFFER1[2]=DateTime[6]/10+0x30; LCD_DSY_BUFFER1[3]=DateTime[6]+0x30; LCD_DSY_BUFFER1[5]=DateTime[4]/10+0x30; LCD_DSY_BUFFER1[6]=DateTime[4]+0x30; LCD_DSY_BUFFER1[8]=DateTime[3]/10+0x30; LCD_DSY_BUFFER1[9]=DateTime[3]+0x30; LCD_DSY_BUFFER2[0]=DateTime[2]/10+0x30; LCD_DSY_BUFFER2[1]=DateTime[2]+0x30; LCD_DSY_BUFFER2[3]=DateTime[1]/10+0x30; LCD_DSY_BUFFER2[4]=DateTime[1]+0x30; LCD_DSY_BUFFER2[6]=DateTime[0]/10+0x30; LCD_DSY_BUFFER2[7]=DateTime[0]+0x30; }//LCD初始化
void Initialize_LCD() { E=0;
Write_LCD_Command(0x38); Write_LCD_Command(0x0c); Write_LCD_Command(0x06);
9
电气与电子信息工程学院 课程设计报告
Write_LCD_Command(0x01);
} //向DS1302中写入一字节 (上升沿写入) void Write_Byte_TO_DS1302(uchar x) {
uchar i;
for (i=0;i<8;i++) //循环8次 写入数据 {
IO=x&0x01; //每次传输低字节 SCLK=0; delayus(2); SCLK=1;
x>>=1; //右移一位 } }
//从DS1302中读取一字节(下降沿读取) uchar Get_Byte_FROM_DS1302() {
uchar i,dat=0x00; for(i=0;i<8;i++) {
if(IO)
dat|=0x80; SCLK=1; delayus(2); SCLK=0; dat>>=1; }
return dat/16*10+dat; //将读出的BCD码值转化为十进制 }//从DS1302的指定地址读取一字节数据 uchar Read_Data(uchar addr) {
uchar dat; RST = 0; SCLK=0; RST=1;
Write_Byte_TO_DS1302(addr); //先写地址在读取 dat = Get_Byte_FROM_DS1302(); RST=0; SCLK=1; return dat;
}//向指定的地址写入一字节数据
void Write_DS1302(uchar add,uchar num) {
RST=0;
10
电气与电子信息工程学院 课程设计报告
SCLK=0; RST=1;
Write_Byte_TO_DS1302(add); //先写地址再写数据 Write_Byte_TO_DS1302(num); RST=0; SCLK=1;
}//读取当前日期时间 void GetDateTime() {
uchar i,addr=0x81; //读取秒地址开始(地址最高位10表示要读/写clock数据, //最低位表示是读(1)还是写(0) for(i=0;i<7;i++) {
DateTime[i]=Read_Data(addr); addr+=2;
} }//禁止涓流充电 void denot() {
Write_DS1302(0x8e,0x00); //写控制字节,取消写保护 Write_DS1302(0x90,0x8b);//禁止涓流充电 Write_DS1302(0x8e,0x80);//加保护 }//写改动后的数据到DS1302中 void SetDateTime() {
uchar i;
Write_DS1302(0x8e,0x00); //写控制字节,取消写保护 for(i=0;i<7;i++) {
Write_DS1302(0x80+2*i,(DateTime[i]/10<<4)|(DateTime[i])); }
Write_DS1302(0x8e,0x80);//加保护 }//判断是否为闰年
uchar IsLeapYear(uint y) {
if((y%4==0&&y0!=0)||(y@0==0))return 1; else return 0;
}//根据设定的日期自动刷新星期 void RefreshWeekday() {
uint i,d,w=5;//已知1999.12.31是周五 for(i=2000;i<2000+DateTime[6];i++) {
d=IsLeapYear(i)?366:365; w=(w+d)%7; }
11
电气与电子信息工程学院 课程设计报告
for(d=0,i=1;i DateTime[5]=(w+d)%7+1; }//根据按键情况调整时间 void DateTime_Adjust(char x) { switch( Adjust_Index) { case 6://年 00--99 if(x==1) { DateTime[6]++; if(DateTime[6]==100) DateTime[6]=0; } else { DateTime[6]--; if(DateTime[6]==0xff) DateTime[6]=99; } days[2]=IsLeapYear(2000+DateTime[6])?29:28; if(DateTime[3]>days[DateTime[4]]) DateTime[3]=days[DateTime[4]]; RefreshWeekday(); break; case 4://月 01--12 if(x==1) { DateTime[4]++; if(DateTime[4]==13) DateTime[4]=1; } else { DateTime[4]--; if(DateTime[4]==0) DateTime[4]=12; } days[2]=IsLeapYear(2000+DateTime[6])?29:28; if(DateTime[3]>days[DateTime[4]]) DateTime[3]=days[DateTime[4]]; RefreshWeekday(); 12
相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




