片单机课程设计学校作息时间控制系统设计大学论文.docx

上传人:b****3 文档编号:10477377 上传时间:2023-05-26 格式:DOCX 页数:24 大小:147.75KB
下载 相关 举报
片单机课程设计学校作息时间控制系统设计大学论文.docx_第1页
第1页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第2页
第2页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第3页
第3页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第4页
第4页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第5页
第5页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第6页
第6页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第7页
第7页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第8页
第8页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第9页
第9页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第10页
第10页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第11页
第11页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第12页
第12页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第13页
第13页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第14页
第14页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第15页
第15页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第16页
第16页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第17页
第17页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第18页
第18页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第19页
第19页 / 共24页
片单机课程设计学校作息时间控制系统设计大学论文.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

片单机课程设计学校作息时间控制系统设计大学论文.docx

《片单机课程设计学校作息时间控制系统设计大学论文.docx》由会员分享,可在线阅读,更多相关《片单机课程设计学校作息时间控制系统设计大学论文.docx(24页珍藏版)》请在冰点文库上搜索。

片单机课程设计学校作息时间控制系统设计大学论文.docx

片单机课程设计学校作息时间控制系统设计大学论文

 

《单片机原理及应用》

课程设计说明书

题目

学校作息时间控制系统的设计

系(部)

专业(班级)

姓名

学号

指导教师

起止日期

系部:

电信系专业:

2011级电子信息工程

课题名称

学校作息时间控制系统的设计

(1)课题内容:

以单片机为核心,设计一个智能化作息时间控制器。

该控制器要求的功能有:

按本校作息时间接通/断开蜂鸣器,每次响铃时间为10秒;用12864液晶屏作显示器,第一行显示“作息时间控制系统”,第二行显示设计者姓名和学号,第三行显示实时时钟,显示的内容要求有时、分、秒各两位,第四行显示最近的闹铃时间。

发挥部分:

设置按键对小时和分钟调节;可以通过键盘任意调整响铃时间。

(2)要求:

完成该系统的硬件和软件的设计,在Proteus软件上仿真通过后,提交一篇课程设计说明

1、汇编或C51语言程序设计;

2、程序调试;

3、在Proteus上进行仿真成功后,进行实验板下载调试;

4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、调试过程,参考文献、设计总结等。

起止日期

设计内容(或预期目标)

备注

第一天

课题介绍,答疑,收集材料,C51介绍

第二天

设计方案论证,练习编写C51程序

第三天~第六天

程序设计

第六天~第八天

程序调试、仿真

第九天~第十天

系统测试并编写设计说明书

教研室意见

 

年月日

系(部)主

管领导意见

 

年月日

目录

程序4

一、设计内容及要求13

1.1设计内容13

1.2设计要求13

二、设计目的13

三、设计原理13

3.1总的设计13

3.2分模块设计13

3.3设计示意图14

四、仿真分析14

4.1调节工作模式15

4.2闹钟实现15

4.3温度测量16

五、心得体会17

六、参考文献17

程序

#include"reg52.h"

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineIO_ADDRP2

#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};

sbitRS=P1^0;

sbitRW=P1^1;

sbitEN=P1^2;

sbitRST=P1^3;

sbitPSB=P1^5;

sbitmode=P0^0;//key1模式

sbitinc=P0^1;//kye2分

sbitdec=P0^2;//key3时

sbitfmq=P3^4;//蜂鸣器接口

//=============================================

codeuchardata1[16]={"作息时间控制系统"};

codeuchardata2[]={"吴智勇2011026103"};

codeuchardata3[]={"时间:

:

:

"};

codeuchardata4[]={"打铃:

:

:

"};

uchardisp_buff[4][16];//定义一个二维数组,4行,16个字符

ucharhour,min,sec,minisec;

ucharmode_value=0,xf;//调节模式

uchards[20][2]=

{

{8,0},{8,45},{8,55},{9,40},{10,0},{10,45},{10,55},{11,40},{14,0},{14,45},

{14,55},{15,40},{16,0},{16,45},{16,55},{17,40},{19,0},{19,45},{19,55},{20,40}

};

//======================================================

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

voiddelay(intms)

{

while(ms--)

{

uchari;

for(i=0;i<250;i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

//=========================

voiddelayus(uinti)

{

uchary;

while(--i)

for(y=0;y<2;y++)

{;}

}

//======================================================

ucharread_data(void)//读状态。

//返回值1---空。

0-----忙。

{

uchartemp;

RS=0;

RW=1;

delayus

(2);

EN=1;

delayNOP();

IO_ADDR=0XFF;

temp=IO_ADDR;//读输入口。

temp=temp&0x80;

EN=0;

if(temp==0x00)

{

return(0);

}

else

{

return

(1);}//注:

如需软件仿真,需要将此处改为1

}

//============================

voidwrite_data(uchartype,uchardate)//写命令或写数据。

{

while(read_data());

//delayus(100);

if(type)//写数据1

{

RS=1;

}

else//0//写命令

{

RS=0;

}

delayus

(1);//1。

5US

RW=0;

delayus

(1);//1。

5US

EN=0;

delayus

(1);

delayus

(1);

delayus

(1);

IO_ADDR=date;

delayNOP();

EN=1;

delayNOP();

EN=0;

delayus(10);

}

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

voidinit_system()//12864初始化部分。

{

PSB=1;

RST=1;

delayus(4);

RST=0;

delay(3);

RST=1;

delay(3);

write_data(0,0x30);//功能设定,8位并行接口

delay(5);

write_data(0,0x30);//功能设定,基本指令集。

delay(5);

write_data(0,0x30);//功能设定,8位并行接口

delay(5);

write_data(0,0x01);//清屏,

delay(5);

write_data(0,0x01);//清屏,

delay(5);

write_data(0,0x02);//将地址指针移到开头位置。

write_data(0,0x0c);//整体显示开。

write_data(0,0x01);//清屏,

write_data(0,0x01);//清屏,

}

//=========================================

//==============================================

voiddisplay_buff()//显示2维数组内的内容。

{

uchari;

uchar*point;

point=&disp_buff[0][0];

//write_data(0,0x01);//清屏,

//delayus(5);

//write_data(0,0x02);//地址归0

//delayus(10);

//write_data(0,0x06);//地址归0

///////////////一行一行的显示////////////////

//行地址:

0X800X900X880X98

write_data(0,0X80);//移到0X80位置。

delayus

(1);

for(i=0;i<16;i++)

{

write_data(1,*point);

point++;

delayus

(1);

}

//=======================================

//=========================================

write_data(0,0X90);

delayus

(1);

for(i=0;i<16;i++)

{

write_data(1,disp_buff[1][i]);

delayus

(1);

}

write_data(0,0X88);

for(i=0;i<16;i++)

{

write_data(1,disp_buff[2][i]);

delayus

(1);

}

write_data(0,0X98);

for(i=0;i<16;i++)

{

write_data(1,disp_buff[3][i]);

delayus

(1);

}

}

//=====================================

voidtime0()interrupt1

{

TH0=0X4C;

TL0=0X00;

if(minisec++>20)

{

minisec=0;

if(++sec>59)

{sec=0;

if(++min>59)

{min=0;

if(++hour>24)

{

hour=0;

min=0;

sec=0;

}

}

}

}

}

voiddelaysj(unsignedcharj)//延时程序

{

unsignedchari;

while(j--)

{

for(i=0;i<50;i++);

}

}

//蜂鸣器

voids_fmq()

{

unsignedcharj=2;

//蜂鸣器叫

while(j--)

{

fmq=0;

delaysj(200);

}

}

/*************************闹铃判断**********************************/

voidnling()

{uchari;

for(i=0;i<20;i++)

{

if(hour==ds[i][0]&&min==ds[i][1])//判断是否到闹铃时间

{if(sec<10)

s_fmq();//调用蜂铃

}

}

}

//调节模块

voidtiaojie()

{uchari;

if(mode==0)

{

while(!

mode);

mode_value++;

}

//zifu(0xbc,0xb8,2,mode_value,&shu);

switch(mode_value)

{//模式0:

正常工作。

显示“天天向上”

case0:

{//uchari;

for(i=0;i<16;i++)

{

disp_buff[0][i]=data1[i];

disp_buff[1][i]=data2[i];

}}break;

case1:

{//模式1:

可以修改时间,其中inc是改分钟,dec是改小时

if(inc==0){while(!

inc);min++;if(min==60)min=0;}

if(dec==0){while(!

dec);if(min==0)min=60;min--;}

//if(dec==0){while(!

dec);hour++;if(hour==24)hour=0;}

//uchari;

for(i=0;i<16;i++)

{

disp_buff[2][i]=data3[i];

}

disp_buff[2][5]=(hour/10)+0x30;

disp_buff[2][6]=(hour%10)+0x30;

disp_buff[2][8]=(min/10)+0x30;

disp_buff[2][9]=(min%10)+0x30;

disp_buff[2][11]=(sec/10)+0x30;

disp_buff[2][12]=(sec%10)+0x30;

display_buff();

};break;

case2:

{if(inc==0){while(!

inc);hour++;if(hour==24)hour=0;}//模式2:

选择一个需要改变的闹铃

//if(inc==0){while(!

inc);min+;if(min==60)min=0;}

if(dec==0){while(!

dec);if(hour==0)hour=24;hour--;}

//uchari;

for(i=0;i<16;i++)

{

disp_buff[2][i]=data3[i];

}

disp_buff[2][5]=(hour/10)+0x30;

disp_buff[2][6]=(hour%10)+0x30;

disp_buff[2][8]=(min/10)+0x30;

disp_buff[2][9]=(min%10)+0x30;

disp_buff[2][11]=(sec/10)+0x30;

disp_buff[2][12]=(sec%10)+0x30;

display_buff();

//zifu(0xbe,0x40,2,xf/10,&shu);

//zifu(0xbe,0x48,2,xf%10,&shu);

//zifu(0xbe,0x68,2,2,&fuhao);

//zifu(0xbe,0x70,2,ds[xf][1]/10,&shu);

//zifu(0xbe,0x78,2,ds[xf][1]%10,&shu);

///zifu(0xbe,0x50,2,0,&fuhao);

//zifu(0xbe,0x58,2,ds[xf][0]/10,&shu);//显示“调整后的闹铃时间”

//zifu(0xbe,0x60,2,ds[xf][0]%10,&shu);

};break;

case3:

{//模式3:

修改选定的闹铃的分钟

if(inc==0){while(!

inc);ds[xf][1]++;if(ds[xf][1]==60)ds[xf][1]=0;}

if(dec==0){while(!

dec);if(ds[xf][1]==0)ds[xf][1]=60;ds[xf][1]--;}

//uchari;

for(i=0;i<16;i++)

{

disp_buff[3][i]=data4[i];

}

disp_buff[3][5]=ds[xf][0]/10+0x30;

disp_buff[3][6]=ds[xf][0]%10+0x30;

disp_buff[3][8]=ds[xf][1]/10+0x30;

disp_buff[3][9]=ds[xf][1]%10+0x30;

disp_buff[3][11]=0+0x30;

disp_buff[3][12]=0+0x30;

display_buff();//显示“调整后的闹铃时间”

};break;

case4:

{//模式4:

修改选定的闹铃的小时

if(inc==0){while(!

inc);ds[xf][0]++;if(ds[xf][0]==24)ds[xf][0]=0;}

if(dec==0){while(!

dec);ds[xf][0]--;if(ds[xf][0]==0)ds[xf][0]=23;}

//uchari;

//for(i=0;i<16;i++)

//{

//disp_buff[3][i]=data4[i];

//}

disp_buff[3][5]=ds[xf][0]/10+0x30;

disp_buff[3][6]=ds[xf][0]%10+0x30;

disp_buff[3][8]=ds[xf][1]/10+0x30;

disp_buff[3][9]=ds[xf][1]%10+0x30;

disp_buff[3][11]=0+0x30;

disp_buff[3][12]=0+0x30;

display_buff();

//hanzi(0xbe,0x40,2,2,&zi);//显示“时”

//zifu(0xbe,0x58,2,ds[xf][0]/10,&shu);//显示“调整后的闹铃时间”

//zifu(0xbe,0x60,2,ds[xf][0]%10,&shu);

//zifu(0xbe,0x68,2,2,&fuhao);

//zifu(0xbe,0x70,2,ds[xf][1]/10,&shu);

//zifu(0xbe,0x78,2,ds[xf][1]%10,&shu);

};break;

case5:

{mode_value=0;};break;//模式5:

确认修改,返回正常工作状态

default:

break;

}

}

//从打铃时间表中找出下一个要打铃的时间

ucharLocate(void)

{//ucharxf;//n;

xf=0;

while(xf<20)

{if(hour

elseif((hour==ds[xf][0])&&(min<=ds[xf][1]))break;

xf++;

//n++;

}

if(xf==20)xf=0;//xf=0;

return(xf);

}

voidshizhong()

{uchari;

for(i=0;i<16;i++)

{

disp_buff[0][i]=data1[i];

disp_buff[1][i]=data2[i];

disp_buff[2][i]=data3[i];

disp_buff[3][i]=data4[i];

}

disp_buff[2][5]=(hour/10)+0x30;

disp_buff[2][6]=(hour%10)+0x30;

disp_buff[2][8]=(min/10)+0x30;

disp_buff[2][9]=(min%10)+0x30;

disp_buff[2][11]=(sec/10)+0x30;

disp_buff[2][12]=(sec%10)+0x30;

//闹铃

disp_buff[3][5]=ds[xf][0]/10+0x30;

disp_buff[3][6]=ds[xf][0]%10+0x30;

disp_buff[3][8]=ds[xf][1]/10+0x30;

disp_buff[3][9]=ds[xf][1]%10+0x30;

disp_buff[3][11]=0+0x30;

disp_buff[3][12]=0+0x30;

display_buff();

}

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

/**/

/*延时函数*/

/*

//==========================================*/

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

voidmain(void)

{

P0=0XFF;

P2=0XFF;

EA=1;

ET0=1;

TH0=0X4C;

TL0=0X00;

TMOD=0X01;

TR0=1;

init_system();

while

(1)

{

tiaojie();

shizhong();

nling();

Locate();

//s_fmq();

}

}

一、设计内容及要求

1.1设计内容

以单片机为核心,设计一个智能化作息时间控制器。

该控制器要求功能有:

按本校作息时间接通/断开蜂鸣器,每次响铃时间为10秒;用12864液晶屏作显示器,第一行显示“作息时间控制系统”,第二行显示设计者姓名和学号,第三行显示实时时钟,显示的内容有时、分、秒各两位,第四行显示最近的闹钟时间。

发挥部分:

设计按键对小时和分钟调节;可以通过键盘任意调整闹铃时间。

1.2设计要求

完成该系统的硬件和软件的设计,在Proteus软件上仿真通过后,提交一篇课程设计说明书。

采用汇编或者C51语言程序设计均可。

二、设计目的

通过这次课程设计培养同学的独立思考和独立操作能力,更深层次的了解自己的专业和身边一些电子系统的简单设计。

三、设计原理

3.1总的设计

首先对设计要求有个整体了解,明白需要实现哪些功能,实现这些功能需要哪些元器件,要驱动这些元器件需要编写什么程序,怎么编写,最后进行总体调试。

本次作息时间的设计,使用了单片机AT89C51,LCD和AMPIRE12864。

温度元件为DS18B20,还有一个声音播放器SOUNDER。

对于LCD和DS18B20要进行初始化。

将本次设计分成5个

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2