61阅读

单片机课程设计报告-单片机课程设计报告

发布时间:2017-12-22 所属栏目:单片机设计

一 : 单片机课程设计报告

单片机课程设计摘要 单片机课程设计报告

单片机课程设计报告

万年历的设计

姓 名:学 号: 0915321028 班 级: 09自动化 指导教师:晏来成

单片机课程设计摘要 单片机课程设计报告

基于51单片机的万年历

摘要:

电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。(www.61k.com]它可以对年、月、日、周日、时、分、秒进行计时,使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。

本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,LCD显示电路,以及调时按键电路等组成。在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用了1602液晶显示,并且使用蜂鸣器实现了整点报警的功能,温度测试的功能实现使用了DS18B20,

单片机课程设计摘要 单片机课程设计报告

并实现了温度过高或过低时的温度报警。[www.61k.com)

软件方面主要包括日历程序、时间调整程序,显示程序等。程序采用C语言编写。所有程序编写完成后,在KeilC51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真,并最终实现基本要求。

综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

一、设计要求

基本要求:

1,8 个数码管上显示,显示时间的格式为(假如当前时间是19:32:20)“19-32-20”;

2,具有日历功能;

③ 时间可以通过按键调整。

发挥部分:

④ 具有闹钟功能(可以设定多个)。

二:总体设计

电路设计框图

单片机课程设计摘要 单片机课程设计报告

单片机课程设计摘要 单片机课程设计报告

系统硬件概述

本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由单片机定时功能提供;温度的采集由DS18B20构成,它具有独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,使用时不需要额外的外围电路。(www.61k.com)并且,其测温范围 -55℃~+125℃,固有测温分辨率0.5℃;显示部份使用1602液晶显示,可完美地显示年、月、日、周日、时、分、秒,且在整点时刻通过蜂鸣器实现响铃。还可以实现温度显示,且当判断得温度过高或过低时,通过液晶显示及LED发光二极管完成报警。

单片机主控制模块的设计

AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、

单片机课程设计摘要 单片机课程设计报告

P3),每一条I/O线都能独立地作输出或输入。(www.61k.com)

单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端.

单片机课程设计摘要 单片机课程设计报告

液晶显示模块的设计

LCD1602有16个引脚,其中VCC、VSS分别为电源正负极;VO为液晶偏压信号输入端,图中W1可调节液晶明亮度; DB0—DB7 8位数据段;BLA、BLK背光源正负极; RS数据/命令选择端;R/W读写选择端;E使能端

单片机课程设计摘要 单片机课程设计报告

单片机课程设计摘要 单片机课程设计报告

温度采集模块设计

采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P0.7与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。(www.61k.com)

PCB图

单片机课程设计摘要 单片机课程设计报告

三电子时钟的软件设计

系统软件按键检测流程图

单片机课程设计摘要 单片机课程设计报告

单片机课程设计摘要 单片机课程设计报告

系统软件定时器程序流程图

单片机课程设计摘要 单片机课程设计报告

单片机课程设计摘要 单片机课程设计报告

子程序的设计

DS18B20温度子程序

void write_temp(uchar add,uchar dat)//向LCD写温度数据,并指定显示位置 {

uchar gw,sw,bw;

if(dat>=0&&dat<=128)

{

gw=dat%10;//取得个位数字

sw=dat%100/10;//取得十位数字

bw=dat/100 ;//取得百位数字

}

else

{

dat=256-dat;

gw=dat%10;//取得个位数字

sw=dat%100/10;//取得十位数字

bw=-3; //0x30-3表示为负号

}

write_1602com(er+add);//er是头文件规定的值0x80+0x40

write_1602dat(0x30+bw);//数字+30得到该数字的LCD1602显示码 write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码 write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码

单片机课程设计摘要 单片机课程设计报告

write_1602dat(0xdf);//显示温度的小圆圈符号,0xdf是液晶屏字符库的该符号地址码

write_1602dat(0x43); //显示"C"符号,0x43是液晶屏字符库里大写C的地址码

}

1602子程序

void write_byte(uchar dat)//写一个字节

{

ACC=dat;

RST=1;

for(a=8;a>0;a--)

{

IO=ACC0;

SCLK=0;

SCLK=1;

ACC=ACC>>1;

}

}

uchar read_byte()//读一个字节

{

RST=1;

for(a=8;a>0;a--)

{

ACC7=IO;

SCLK=1;

SCLK=0;

ACC=ACC>>1;

}

return (ACC);

}

//----------------------------------------

void write_1302(uchar add,uchar dat)//向1302芯片写函数,指定写入地址,数据 {

RST=0;

SCLK=0;

RST=1;

write_byte(add);

write_byte(dat);

SCLK=1;

RST=0;

}

单片机课程设计摘要 单片机课程设计报告

uchar read_1302(uchar add)//从1302读数据函数,指定读取数据来源地址

{

uchar temp;

RST=0;

SCLK=0;

RST=1;

write_byte(add);

temp=read_byte();

SCLK=1;

RST=0;

return(temp);

}

uchar BCD_Decimal(uchar bcd)//BCD码转十进制函数,输入BCD,返回十进制 {

uchar Decimal;

Decimal=bcd>>4;

return(Decimal=Decimal*10+(bcd&=0x0F));

}

//--------------------------------------

void ds1302_init() //1302芯片初始化子函数(2010-01-07,12:00:00,week4) {

RST=0;

SCLK=0;

write_1302(0x8e,0x00); //允许写,禁止写保护

write_1302(0x80,0x00); //向DS1302内写秒寄存器80H写入初始秒数据00

write_1302(0x82,0x00);//向DS1302内写分寄存器82H写入初始分数据00

write_1302(0x84,0x12);//向DS1302内写小时寄存器84H写入初始小时数据12 write_1302(0x8a,0x01);//向DS1302内写周寄存器8aH写入初始周数据4

write_1302(0x86,0x08);//向DS1302内写日期寄存器86H写入初始日期数据07 write_1302(0x88,0x07);//向DS1302内写月份寄存器88H写入初始月份数据01 write_1302(0x8c,0x10);//向DS1302内写年份寄存器8cH写入初始年份数据10 write_1302(0x8e,0x80); //打开写保护

}

时分秒显示子函数

void write_sfm(uchar add,uchar dat)//向LCD写时分秒,有显示位置加、现示数据,两个参数

{

uchar gw,sw;

gw=dat%10;//取得个位数字

sw=dat/10;//取得十位数字

单片机课程设计摘要 单片机课程设计报告

write_1602com(er+add);//er是头文件规定的值0x80+0x40

write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码

write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码

}

//-------------------------------------

//年月日显示子函数

void write_nyr(uchar add,uchar dat)//向LCD写年月日,有显示位置加数、显示数据,两个参数

{

uchar gw,sw;

gw=dat%10;//取得个位数字

sw=dat/10;//取得十位数字

write_1602com(yh+add);//设定显示位置为第一个位置+add

write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码

write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码

}

//-------------------------------------------

void write_week(uchar week)//写星期函数

{

write_1602com(yh+0x0c);//星期字符的显示位置

switch(week)

{

case 1:write_1602dat('M');//星期数为1时,显示

write_1602dat('O');

write_1602dat('N');

break;

case 2:write_1602dat('T');//星期数据为2时显示

write_1602dat('U');

write_1602dat('E');

break;

case 3:write_1602dat('W');//星期数据为3时显示

write_1602dat('E');

write_1602dat('D');

break;

case 4:write_1602dat('T');//星期数据为4是显示

write_1602dat('H');

单片机课程设计摘要 单片机课程设计报告

write_1602dat('U');

break;

case 5:write_1602dat('F');//星期数据为5时显示

write_1602dat('R');

write_1602dat('I');

break;

case 6:write_1602dat('S');//星期数据为6时显示

write_1602dat('T');

write_1602dat('A');

break;

case 7:write_1602dat('S');//星期数据为7时显示

write_1602dat('U');

write_1602dat('N');

break;

定时器0初始化程序

void init() //定时器、计数器设置函数

{

TMOD=0x11; //指定定时/计数器的工作方式为1

TH0=0; //定时器T0的高四位=0

TL0=0; //定时器T0的低四位=0

EA=1; //系统允许有开放的中断

ET0=1; //允许T0中断

TR0=1; //开启中断,启动定时器

}

}

//****************键盘扫描有关函数**********************

void keyscan()

{

if(key1==0)//---------------key1为功能键(设置键)-------------------- {

delay(9);//延时,用于消抖动

if(key1==0)//延时后再次确认按键按下

{

buzzer=0;//蜂鸣器短响一次

delay(20);

buzzer=1;

while(!key1);

key1n++;

单片机课程设计摘要 单片机课程设计报告

if(key1n==12) key1n=1;//设置按键共有秒、分、时、星期、日、月、年、返回,8个功能循环 switch(key1n) { case 1: TR0=0;//关闭定时器 //TR1=0; write_1602com(er+0x09);//设置按键按动一次,秒位置显示光标 write_1602com(0x0f);//设置光标为闪烁 temp=(miao)/10*16+(miao)%10;//秒数据写入DS1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);//miao write_1302(0x8e,0x80); break; case 2: write_1602com(er+6);//按2次fen位置显示光标 //write_1602com(0x0f); break; case 3: write_1602com(er+3);//按动3次,shi //write_1602com(0x0f); break; case 4: write_1602com(yh+0x0e);//按动4次,week //write_1602com(0x0f); break; case 5: write_1602com(yh+0x0a);//按动5次,ri //write_1602com(0x0f); break; case 6: write_1602com(yh+0x07);//按动6次,yue //write_1602com(0x0f); break; case 7: write_1602com(yh+0x04);//按动7次,nian //write_1602com(0x0f); break; case 8: write_1602com(er+1); write_1602dat(0x4d); write_1602com(er+1); break; case 9: write_1602com(er+1); write_1602dat(0x46); write_1602com(er+1); break; case 10:write_1602com(er+1); write_1602dat(0x53);

单片机课程设计摘要 单片机课程设计报告

write_1602com(er+1);

break;

case 11:

write_1602com(er+1);

write_1602dat(0x20);

write_1602com(0x0c);//按动到第8次,设置光标不闪烁

TR0=1;//打开定时器

temp=(miao)/10*16+(miao)%10;

write_1302(0x8e,0x00);

write_1302(0x80,0x00|temp);//miao数据写入DS1302

write_1302(0x8e,0x80);

break;

}

}

}

//------------------------------加键key2---------------------------- if(key1n!=0)//当key1按下以下。[www.61k.com)再按以下键才有效(按键次数不等于零) {

if(key2==0) //上调键

{

delay(10);

if(key2==0)

{

buzzer=0;//蜂鸣器短响一次

delay(20);

buzzer=1;

while(!key2);

switch(key1n)

{

case 1:miao++;//设置键按动1次,调秒

if(miao==60)

miao=0;//秒超过59,再加1,就归零

write_sfm(0x08,miao);//令LCD在正确位置显示"加"设定好的秒数 temp=(miao)/10*16+(miao)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00); //允许写,禁止写保护

write_1302(0x80,temp); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码

write_1302(0x8e,0x80); //打开写保护

单片机课程设计摘要 单片机课程设计报告

write_1602com(er+0x09);//因为设置液晶的模式是写入数据后,光标自动右移,所以要指定返回

//write_1602com(0x0b);

break;

case 2:fen++;

if(fen==60)

fen=0;

write_sfm(0x05,fen);//令LCD在正确位置显示"加"设定好的分数据 temp=(fen)/10*16+(fen)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x82,temp);//向DS1302内写分寄存器82H写入调整后的分数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置

break;

case 3:shi++;

if(shi==24)

shi=0;

write_sfm(2,shi);//令LCD在正确的位置显示"加"设定好的小时数据 temp=(shi)/10*16+(shi)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x84,temp);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(er+3);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 4:week++;

if(week==8)

week=1;

write_1602com(yh+0x0C);//指定'加'后的周数据显示位置

write_week(week);//指定周数据显示内容

temp=(week)/10*16+(week)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x8a,temp);//向DS1302内写周寄存器8aH写入调整后的周数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+0x0e);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 5:ri++;

switch(yue)

{

单片机课程设计摘要 单片机课程设计报告

case 1:case 3:case 5:case 7:case 8:case 10:case 12:

if(ri>31) ri=1;

break;

case 2:

if(nian%4==0||nian%400==0)

{

if(ri>29) ri=1;

}

else

{

if(ri>28) ri=1;

}break;

case 4:case 6:case 9:case 11:

ri++;

if(ri>30) ri=1;

break;

}

write_nyr(9,ri);//令LCD在正确的位置显示"加"设定好的日期数据 temp=(ri)/10*16+(ri)%10;//十进制转换成DS1302要求的DCB码

write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x86,temp);//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+10);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 6:yue++;

if(yue==13)

yue=1;

write_nyr(6,yue);//令LCD在正确的位置显示"加"设定好的月份数据 temp=(yue)/10*16+(yue)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x88,temp);//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+7);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 7:nian++;

if(nian==100)

单片机课程设计摘要 单片机课程设计报告

nian=0;

write_nyr(3,nian);//令LCD在正确的位置显示"加"设定好的年份数据 temp=(nian)/10*16+(nian)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x8c,temp);//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+4);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 8: write_1602com(er+9); //设置闹钟的秒定时

miao1++;

if(miao1==60)

miao1=0;

write_sfm(0x08,miao1);//令LCD在正确位置显示"加"设定好秒的数据

write_1602com(er+9);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置

break;

case 9: write_1602com(er+6); //设置闹钟的分钟定时

fen1++;

if(fen1==60)

fen1=0;

write_sfm(0x05,fen1);//令LCD在正确位置显示"加"设定好的分数据

write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置

break;

case 10: write_1602com(er+3); //设置闹钟的小时定时

shi1++;

if(shi1==24)

shi1=0;

write_sfm(0x02,shi1);//令LCD在正确的位置显示"加"设定好的小时数据 write_1602com(er+3);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

}

}

}

//------------------减键key3,各句功能参照'加键'注释--------------- if(key3==0)

{

单片机课程设计摘要 单片机课程设计报告

delay(10);//调延时,消抖动

if(key3==0)

{

buzzer=0;//蜂鸣器短响一次

delay(20);

buzzer=1;

while(!key3);

switch(key1n)

{

case 1:miao--;

if(miao==-1)

miao=59;//秒数据减到-1时自动变成59

write_sfm(0x08,miao);//在LCD的正确位置显示改变后新的秒数 temp=(miao)/10*16+(miao)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00); //允许写,禁止写保护

write_1302(0x80,temp); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码

write_1302(0x8e,0x80); //打开写保护

write_1602com(er+0x09);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置

//write_1602com(0x0b);

break;

case 2:fen--;

if(fen==-1)

fen=59;

write_sfm(5,fen);

temp=(fen)/10*16+(fen)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x82,temp);//向DS1302内写分寄存器82H写入调整后的分数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置

break;

case 3:shi--;

if(shi==-1)

shi=23;

write_sfm(2,shi);

temp=(shi)/10*16+(shi)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x84,temp);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码

write_1302(0x8e,0x80);//打开写保护

单片机课程设计摘要 单片机课程设计报告

write_1602com(er+3);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 4:week--;

if(week==0)

week=7;

write_1602com(yh+0x0C);//指定'加'后的周数据显示位置

write_week(week);//指定周数据显示内容

temp=(week)/10*16+(week)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x8a,temp);//向DS1302内写周寄存器8aH写入调整后的周数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+0x0e);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 5:ri--;

switch(yue)

{

case 1:case 3:case 5:case 7:case 8:case 10:case 12:

if(ri==0) ri=31;

break;

case 2: if(nian%4==0||nian%400==0)

{

if(ri==0) ri=29;

}

else

{

if(ri==0) ri=28;

}break;

case 4:case 6:case 9:case 11:

if(ri==0) ri=30;

break;

}

write_nyr(9,ri);

temp=(ri)/10*16+(ri)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护

单片机课程设计摘要 单片机课程设计报告

write_1302(0x86,temp);//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+10);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 6:yue--;

if(yue==0)

yue=12;

write_nyr(6,yue);

temp=(yue)/10*16+(yue)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x88,temp);//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+7);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 7:nian--;

if(nian==-1)

nian=99;

write_nyr(3,nian);

temp=(nian)/10*16+(nian)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护

write_1302(0x8c,temp);//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码

write_1302(0x8e,0x80);//打开写保护

write_1602com(yh+4);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

case 8: write_1602com(er+9); //设置闹钟的秒定时

miao1--;

if(miao1==-1)

miao1=59;

write_sfm(0x08,miao1);//令LCD在正确位置显示"加"设定好秒的数据

write_1602com(er+9);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置

break;

case 9: write_1602com(er+6); //设置闹钟的分钟定时

fen1--;

if(fen1==-1)

fen1=59;

write_sfm(0x05,fen1);//令LCD在正确位置显示"加"设定好的分数据

write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,

单片机课程设计摘要 单片机课程设计报告

在这里是写回原来的位置

break;

case 10: write_1602com(er+3); //设置闹钟的小时定时

shi1--;

if(shi1==-1)

shi1=23;

write_sfm(0x02,shi1);//令LCD在正确的位置显示"加"设定好的小时数据 write_1602com(er+3);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

break;

}

}

}

}

}//*******************主函数**************************

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

void main()

{

lcd_init(); //调用液晶屏初始化子函数

ds1302_init(); //调用DS1302时钟的初始化子函数

init(); //调用定时计数器的设置子函数

led=0; //打开LCD的背光电源

buzzer=0;//蜂鸣器长响一次

delay(80);

buzzer=1;

while(1) //无限循环下面的语句:

{

keyscan(); //调用键盘扫描子函数

}

}/*************通过定时中断实现定是独处并显示数据******************/

void timer0() interrupt 1 //取得并显示日历和时间

{

//Init_DS18B20();//温度传感器DS18b2初始化子函数,在头文件中

flag=ReadTemperature();//将18b2头文件运行返回的函数结果送到变量FLAG中,用于

单片机课程设计摘要 单片机课程设计报告

显示

//读取秒时分周日月年七个数据(DS1302的读寄存器与写寄存器不一样):

miao = BCD_Decimal(read_1302(0x81));

fen = BCD_Decimal(read_1302(0x83));

shi = BCD_Decimal(read_1302(0x85));

ri = BCD_Decimal(read_1302(0x87));

yue = BCD_Decimal(read_1302(0x89));

nian=BCD_Decimal(read_1302(0x8d));

week=BCD_Decimal(read_1302(0x8b));

//显示温度、秒、时、分数据:

write_temp(12,flag);//显示温度,从第二行第12个字符后开始显示

write_sfm(8,miao);//秒,从第二行第8个字后开始显示(调用时分秒显示子函数) write_sfm(5,fen);//分,从第二行第5个字符后开始显示

write_sfm(2,shi);//小时,从第二行第2个字符后开始显示

//显示日、月、年数据:

write_nyr(9,ri);//日期,从第二行第9个字符后开始显示

write_nyr(6,yue);//月份,从第二行第6个字符后开始显示

write_nyr(3,nian);//年,从第二行第3个字符后开始显示

write_week(week);

/***********整点报时程序************/

if(fen==0&&miao==0)

if(shi<22&&shi>6 )

{

buzzer=0;//蜂鸣器短响一次

delay(20);

buzzer=1;

}

/**************闹钟程序: 将暂停键按下停止蜂鸣********************/

if(shi1==shi&&fen1==fen&&miao==0)

{

clock=1;

}

if(clock==1)

{

buzzer=0;//蜂鸣器短响一次

delay(20);

buzzer=1;

单片机课程设计摘要 单片机课程设计报告

}

if(CLO==0) /*按下p1.3停止蜂鸣*/

clock=0;

}

四:心得体会

编程其实是一件艺术,自己在里面任意发挥,自主创新,实现自己的目的。[www.61k.com]编程的感觉是很美妙的,很能增强我们的自信心。编程又是十分重要的,生活中无处不见程序,各种自动控制都用到程序,很有用,自己把编程学好就能成为一个有技术的人,成功的人,所以要加强编程,在大学期间让自己的代码量达到一定的高度,从而产生从量变到质变的效果,对自己的以后很有帮助。把编程当成一个游戏来玩,和电脑直接对话,在千百次的调试中发现自己犯的错误,了解程序的执行过程,意外发现一些自己不知道的东西,这是很有收获的!时常编程,时常把自己想到的问题用程序来实现,在学习期间我就不会寂寞,也会不断肯定自己,不断提高自己!

本次试验使我对DS1302、DS18B20、单片机定时功能等有了更深的认识。在反复调试的过程中更是锻炼了我的耐心,以及培养了我对编程的强烈兴趣。尤其是闰年、平年二月日期的显示问题,此问题我最初根本就没有考虑到,在最后才解决。虽然编写过程中有参考其他程序,而且有些子程序(如DS1802、LCD)是直接调用的,但的的确确在理解的程度上完成了主程序。也因此觉得自己的实验是对自己负责的,并非盲目COPY完成的,也使得自己的编程能力提高了一些,只是我还是比较习惯用C语言编程,汇编能力还有待加强哦,O(∩_∩)O~!相比硬件,我想我还是更喜欢编程滴,虽然有些纠结,虽然自己现有的知识甚是缺乏,嘿嘿!所以,我今后定会更加努力的学习相关理论知识,并运用于实践中,加油!~

单片机课程设计摘要 单片机课程设计报告

[www.61k.com)

二 : 单片机设计报告

基于单片机和GSM的智能报警系统

成员:黄琪、楚现涛、高庆学、袁伟浩

学院: 物理学院

指导老师:李茂奎

2011年6月5日

摘要:...2

前言:...3

硬件篇...4

一、单片机...4

二、GSM模块:...5

1.GSM模块与单片机的硬件接口技术方面...5

2.GSM模块的软件接口及控制技术...6

三、硬件逻辑:...7

软件篇...8

一、软件思路...8

二、单片机程序...8

三、系统测试过程以及测试数据...15

1.测试仪器...15

2、串口调试:...16

测试结果总结...20

资源使用:...21

参考文献...21

摘要:

建立一套基于GSM和AVR单片机的智能报警系统,实现如有异常信号,则可通过单片机控制GSM模块发送短信息以通知管理员的目的。通过一定的改造可适用于各种场合,如防盗门、防盗锁、甚至煤气泄漏报警等多种功能。它的成本价并不高昂,适合于普通大众使用,有着广阔的市场前景。

其中,红外开关或者传感器1类的东西,检测到异常,则可触发单片机进而控制GSM模块发短信报警。单片机控制系统基于AVR单片机,处理来自传感器的信息,并根据预先设定的程序来控制GSM模块给管理员发送相关信息。

关键字 GSM技术,AVR单片机,智能报警

前言:

GSM(Global System for Mobilecommunication)系统是目前基于时分多址技术的移动通讯体制中比较成熟、完善、应用最广泛的1种系统。目前已建成的覆盖全国的GSM数字蜂窝移动通信网,是我国公众移动通信网的主要方式。基于GSM的短信息服务,是1种在移动网络上传送简短信息的无线应用,是1种信息在移动网络上储存和转寄的过程。由于GSM网络在全国范围内实现了联网和漫游,具有网络能力强的特点,用户无需另外组网,在极大提高网络覆盖范围的同时为客户节省了昂贵建网费用和维护费用。同时,它对用户的数量也没有限制,克服了传统的专网通信系统投资成本大,维护费用高,且网络监控的覆盖范围和用户数量有限的缺陷。比起传统的集群系统在无线网络覆盖上具有无法比拟的优势,加上GSM的SMS本身具备的数据传送功能,都使得这些应用得到迅速的普及。利用GSM短信息系统进行无线通信还具有双向数据传输功能,性能稳定,为远程数据传送和监控设备的通信提供了1个强大的支持平台。我们开发的基于GSM和AVR单片机的智能报警系统正是利用了GSM短信息系统的通信平台。

硬件篇

一、单片机

我们使用的是Atmel公司的AVR高速8位微控制器ATmega16 。ATmega16芯片为40个引脚,内部集成了1K字节的RAM、512字节的EEPROM、16K字节的Flash以及两个UART串行接口等。由于采用了高性能的MCU,省掉了大量的外围器件,如外扩RAM、ROM存储器等,使硬件结构大大简化,提高了系统的可靠性。

它与51单片机、PIC单片机相比具有一系列的优点:

1:在相同的系统时钟下AVR运行速度最快;

2:芯片内部的Flsah、EEPROM、SRAM容量较大;

3:所有型号的Flash、EEPROM都可以反复烧写、全部支持在线编程烧写(ISP);

4:多种频率的内部RC振荡器、上电自动复位、看门狗、启动延时等功能,零外围电路也可以工作;

5:每个IO口都可以以推换驱动的方式输出高、低电平,驱动能力强;

6:内部资源丰富,一般都集成AD、DA模数器、PWM、SPI、USART、TWI、I2C通信口、丰富的中断源等。

目前支持AVR单片机编译器的语言主要有汇编语言、C语言、BASIC语言等。其中C编译器主要有CodeVisionAVR、AVRGCC、IAR、ICCAVR等,C语言编译器由于它具有功能强大、运用灵活、代码小、运行速度快等先天性的优点,使得它在专业程序设计上具有不可代替的地位。

以单片机位核心的外围电路主要包括供电部分、输出部分和输入部分。要点如下:

1.供电部分为开发板自带的电源线。

2.串口部分采用了MAX232芯片。注意串口的连接要严格按照图中的设置才能保证公头与母头的TXD、RXD和GND相连。

图2

3.我们使用了ATmega16的内部4MHz晶振。

二、GSM模块:

1.GSM模块与单片机的硬件接口技术方面

GSM模块通过数据口以串行方式接收指令并向外输出数据。理论上讲,在数据口中找出RXD、TXD 和 GND 引脚与单片机的串口对应连接即完成了硬件接口。GSM模块数据线是专为连接PC 机9 针串口而设计的,信号电平为标准的RS232 电平,只要单片机的串口也转换为RS232 电平,就可方便连接。9 针串口引脚定义是固定的,即2 脚为TXD(GSM模块发送),3 脚为RXD(GSM模块接收)、5 脚为GND。这样,无论什么型号的GSM模块与单片机的连接就成了固定连接,不需知道GSM模块数据口信号的具体定义,二者通过数据线的。


连接电路如图 1 所示。

2.GSM模块的软件接口及控制技术

我们使用的是西门子公司的TC35模块,用户操作系统接入GSM网络的终端适配器,支持AT指令集,支持语音通话、短信、传真等业务,支持USART串行通信。

由于TC35模块的外围电路太过复杂,我们直接购买了已经具备外围电路的模块开发板。开发板上还有1个LED信号灯,在模块与网络进行通信的时候会闪烁以指示通信状态。模块通过串口与单片机相连。

TC35支持PDU和TEXT模式的短信息,由于PDU模式比较复杂,需要解码等,在我们的智能报警系统中选择相对简单的TEXT模式。TEXT模式在信息传送时通过串口传递的是十六进制ASCII码。其USART通讯默认使用9600比特率,8位数据信息,无奇偶校验,有一位开始位和一位结束位。

三、硬件逻辑:

我们硬件要实现的目的为单片机通过检测外界信号,控制GSM给管理员发送短信。GSM则通过USART串口与单片机相连,实现通信。

AVR mega16

GSM

外部信号

USART串口转换

管理员手机

软件篇

一、软件思路

我们编写的软件大体思路是单片机通过检测外界电压信号的变化,控制GSM模块发送短信息。

二、单片机程序

1.语言:C。

2.编译环境:CVAVR。

3.下载软件:AVR Studio。

4.功能概述:单片机控制GSM发送短信

5.算法结构:我们用下面的示意图来简单表示本程序的算法结构(如图3,非流程图)。

初始化:对I/O口、USART、模拟比较器和GSM模块进行初始化,对全局变量赋值。

等待状态:初始化后顺利进入等待状态。USART不断地采用轮询的方式发送函数。一旦接收到模拟比较器传来的信号,USART就可以通过串口向GSM发送指令。

初始化

等待状态

检测到信号

发送短信

图3

程序

PORTB.2=1;

DDRB.2=1;

PORTD=0x03;

DDRD=0x02;

UCSRA=0x00;

UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);//使能RXC中断,接收允许,发送允许

UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据位、1位停止位、无奇偶位

UBRRH=BAUD_H;//设置波特率

UBRRL=BAUD_L;

#asm("sei")

}

for(i=0;t[i]!='\0';i++) USART_Transmit(t[i]);

delay_ms(1222);

for(i=0;p[i]!='\0';i++) USART_Transmit(p[i]);//传递短信中心号码

delay_ms(1222);

for(i=0;q[i]!='\0';i++) USART_Transmit(q[i]);//传递短信模式

delay_ms(1222);

}

void ana_comp_isr(void)

{

ACSR=0x40;//模拟比较器初始化

//analog comparator compare event

//硬件自动清除ACI标志位

if((ACSR&(1<<ACO))==0)//检测ACO

{PORTB.2 =1;//如果AIN0>AIN1(ACO=0),LED亮

for(i=0;r[i]!='\0';i++) USART_Transmit(r[i]);//传递接受手机号码

delay_ms(1222);

for(i=0;s[i]!='\0';i++) USART_Transmit(s[i]);//传递短信内容

USART_Transmit(0x1A);

USART_Transmit('\r');

USART_Transmit('\n');

delay_ms(1222);

}//Bit 5 ACO: 模拟比较器输出 模拟比较器的输出经过同步后直接连到ACO。

else

PORTB.2=0;//LED灭

}

void main(void)

{

init();

while(1)

{

ana_comp_isr();

}

}

注:程序中使用了大量的宏定义

三、系统测试过程以及测试数据

1.测试仪器

CVAVR,AVR STUDIO 4.0,JTAG,串口调试助手,ATMEGA16单片机、GSM模块等

任何1个模块首次使用时,必须要测试其工作是否正常,由于其自带RS232接口,所以我们选择了的串口调试软件v2.2版进行调试。

2、串口调试:

首先,我们对GSM进行了调试。

GSM的AT指令集比较难以掌握,并没有很全面的资料。AT指令是纯ASCII码指令。如果AT指令执行成功,“OK”字符串返回;如果AT 指令语法错误或AT 指令执行失败,“ERROR”字符串返回。必有返回。几乎所有的成功执行都有OK的返回。所有指令都要以回车符结尾。

我们在实验中,切实用到的和调试过的指令有:

AT——测试连接响应——OK——连接正常

A/——重复刚才的命令重复刚才执行过的命令,A/命令本身不能重复

3)AT+CREG?——查询网络注册情况

响应——+CREG:0,1或+CREG:0,5证明SIM卡已经注册可以使用。

0没有注册

1注册本地网络

2没有注册,但正在搜索

3网络注册失败,限制服务

4 未知

5已注册,漫游

4)AT+CMGF?——查询接收格式

响应——+CMGF:0——PUD格式

响应——+CMGF:1——TEXT格式

AT+CMGF=0——设置为PUD格式

AT+CMGF=1——设置为TEXT格式

AT+IPR=XXXX——设置波特率为XXXX

AT+CSCA=”+8613800531500”——设置短信服务中心地址

AT+CMGS=\042+8615216403058\042\r\n设置接收手机号码 等,如图4。

图4

然后,我们编写了1个简单的测试程序,来检测单片机的USART串口通信是否正常,测试程序如下:

#include<mega16.h>

#include<stdio.h>

#include<delay.h>

void main(void)

{

inti;

PORTD=0x03;

DDRD=0x02;

while (1)

{

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

{

putchar(i);

delay_ms(1000);

}

};

}

结果如图5所示

图5

经测试,GSM和单片机的串口通信均正常,这样即可排除硬件问题了,专心软件设计了。

将程序写进单片机后,将单片机的串口与计算机的串口相连,点击运行,即可从串口调试助手中看到从单片机中是否串出数据,以及正确与否,测试结果如图6所示。

图6

最后,将单片机与GSM模块直接相连,通过串出指令控制模块发送短信,模块的响应时间以及指令的格式问题需要在程序中调节优化。

测试结果总结

经实验验证,实现了通过单片机控制GSM Modem进行短信息的发送。当然,我们的系统还存在一些不足:在发送过程中,有时会出现响应过慢的或发送内容不全以及发送与接收之间的延迟等情况,后经修改程序中的延时函数,以及对GSM 模块初始化后,问题基本解决,系统工作情况良好。

资源使用:

AVRmega16开发板、TC35模块等

参考文献

《单片机控制GSM模块实现短信收发的软件设计》王骐 何嘉斌

AVR单片机嵌入式系统原理与应用实践》马潮

《单片机原理及接口技术》 李茂奎

GSM ——ATcommonds

AVRmega16数据手册

三 : 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

目录

目录 ................................................................. I 摘要 ................................................................ II

第一章 设计要求 ..................................................... 1

1.1课程设计项目名称 .............................................. 1

1.2项目设计目的及技术要求 ........................................ 1

第二章 总体方案 ..................................................... 2

2.2硬件电路设计 .................................................. 2

2.2.1单片机最小系统电路 ...................................... 2

2.2.2复位电路 ................................................ 5

2.2.3 8255可编程并行I/O口接口芯片 ........................... 6

2.2.4蜂鸣器的工作原理 ........................................ 8

2.3软件设计 ...................................................... 9

2.3.1时间调节原理框图 ........................................ 9

2.3.2主程序流程图 ........................................... 10

第三章 总结 ........................................................ 11

第四章 参考文献 .................................................... 12

附录 ................................................................ 13

一、仿真图: .................................................... 13

二、程序清单: ................................................... 13

I

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

摘要

20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。(www.61k.com] 数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但鉴于数字钟电路的基本组成包含了数字电路的主要组成部分,因此进行数字钟的设计是必要的,研究数字钟及扩大其应用,有着非常现实的意义。

单片机数字时钟就是其中的一款设计。它具有编程灵活,便于电子钟功能的扩充,即可用该电子钟发出各种控制信号,精确度高等特点,同时可以用该电子钟发出各种控制信号。单片机数字钟是单片机为核心。时钟,本设计是以单片机AT89S52配备LED数码显示管,数字钟采用24小时制方式显示时间,带有年月日、秒表和闹钟功能。本设计打算采用蜂鸣器做提醒,因没有蜂鸣器所以采用闪灯来提醒。使人不仅仅是通过视觉来感受单片机数字钟带来的方便。

而51系列单片机是各单片机中最为典型和最有代表性的一种,通过本次课程设计进一步对单片机学习和应用,从而更熟悉单片机的原理和相关设计并提高了开发软、硬件的能力。本设计主要设计一个基于80C51单片机的电子时钟,并在LED上显示相应的时间,通过两个控制键和4×4键盘来实现时间的调节功能。应用Proteus软件实现单片机数字时钟系统的设计与仿真。

关键词:单片机 80C51 数字时钟 汇编语言 C语言

II

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

第一章 设计要求

课程设计是工科学生十分重要的实践教学环节,通过课程设计,培养学生综合运用先修课程的理论知识和专业技能,解决工程领域某一方面实际问题的能力。(www.61k.com]课程设计报告是科学论文写作的基础,不仅可以培养和训练学生的逻辑归纳能力、综合分析能力和文字表达能力,也是规范课程设计教学要求、反映课程设计教学水平的重要依据。为了加强课程设计教学管理,提高课程设计教学质量,特拟定如下基本要求。

1. 课程设计教学一般可分为设计项目的选题、项目设计方案论证、项目设计结果分析、答辩等4个环节,每个环节都应有一定的考核要求和考核成绩。

2. 课程设计项目的选题要符合本课程设计教学大纲的要求,该项目应能突出学生实践能力、设计能力和创新能力的培养;该项目有一定的实用性,且学生通过努力在规定的时间内是可以完成的。

3. 项目设计方案论证主要包括可行性设计方案论证、从可行性方案中确定最佳方案,实施最佳方案的软件程序、硬件电路原理图和PCB图。项目设计方案论证内容记录于课程设计报告书第三项中,项目设计方案论证主要考核设计方案的正确性、可行性和创新性,考核成绩占30%左右。

4. 项目设计结果分析主要包括项目设计与制作结果的工艺水平,项目测试性能指标的正确性和完整性,项目测试中出现故障或错误原因的分析和处理方法。

5. 学生在课程设计过程中应认真阅读与本课程设计项目相关的文献,培养自己的阅读兴趣和习惯,借以启发自己的思维,提高综合分和理解能力。

6. 答辩是课程设计中十分重要的环节,由课程设计指导教师向答辩学生提出2~3个问题,通过答辩可进一步了解学生对课程设计中理论知识和实际技能掌握的程度,以及对问题的理解、分析和判断能力。

7.学生应在课程设计周内认真参加项目设计的各个环节,按时完成课程设计报告书交给课程设计指导教师评阅。

8. 课程设计报告书是实践教学水平评估的重要资料,应按课程、班级集成存档交实验室统一管理。

1.1课程设计项目名称

实时时钟显示电路设计

1.2项目设计目的及技术要求

1.最小单片机系统:其作用是和外围的时钟芯片通信,并控制数据传输过程,采集时间信息并予以处理;

2.8255可编程并行I/O口接口芯片:它是本设计的核心模块,由它提供实时的日历时钟信息;

3.LED数码管显示模块:此模块用于实时时钟信息显示;

程序部分包括单片机和8255A芯片的接口程序(实现单片机和8255A之间的数据传输过程)以及液晶显示程序。

1

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

第二章 总体方案

2.1方案开发的基本要求

采用LED数码管动态扫描,LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。[www.61k.com)这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼精看到字样了。LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类,最佳方案是采用LED数码管动态扫描显示。

2.2硬件电路设计

按照系统设计功能的要求,电路系统构成框图如图1所示。主控芯片使用52系列AT89S52单片机。

图1实时时钟电路系统构成框图

2.2.1单片机最小系统电路

单片机最小系统是最小的单片机系统,没有市场上买的有那么多功能。通过自己喜欢的作用来扩展电路板。电路简单,这个电路通过扩展时钟电路,数码管显示电路来实现实时时钟电路显示。

单片机设计 单片机设计报告

2

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

单片机最小系统电路图

单片机设计 单片机设计报告

图3 AT89C52芯片引脚

89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用ATMEL公司可

单片机设计 单片机设计报告

3

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

靠的CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。[www.61k.com]它结合了CMOS的高速和高密度技术及CMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于89C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。89C52有PDIP(40pin)和PLCC(44pin)两种封装形式。

管脚说明:

VCC:供电电压。 GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8个TTL门电流。当P0口的管脚第一次写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。P1口管脚写入“1”后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输 4

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。(www.61k.com]P3口作为AT89C51的一些特殊功能口,管脚 备选功能

P3.0 RXD(串行输入口)

P3.1 TXD(串行输出口)

P3.2 /INT0(外部中断0)

P3.3 /INT1(外部中断1)

P3.4 T0(计时器0外部输入)

P3.5 T1(计时器1外部输入)

P3.6 /WR(外部数据存储器写选通)

P3.7 /RD(外部数据存储器读选通)

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA / VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

2.2.2复位电路

RST复位输入端。 当振荡器运行时,在该引脚上出现两个机器周期的高电平 5

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

将使单片机复位。(www.61k.com]

89C52单片机的最小系统,包括晶振电路,复位电路,确保系统的控制部分。P0端口用作地址/数据复用总线AD[0~7],和日历时钟芯片相连。P1端口用作数码管的段码接口,由于本设计的显示不会出现小数点,因此只使用了a、b、c、d、e、f、g,而没有使用dp(小数点)段。P2端口的P2.1~P2.4作为数码管的位码接口,它们需要通过4-16译码电路以及驱动电路来控制13位数码管的位码选择。P2端口的P2.0在反相之后为日历时钟芯片提供片选信号,需要反相是因为该片选信号为低电平有效。单片机的P3.7(/RD)、P3.6(/WR)引脚和日历时钟芯片的读、写引脚直接相连,它们均为低电平有效。

单片机设计 单片机设计报告

高低电位复位电路

2.2.3 8255可编程并行I/O口接口芯片

8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,使用灵活,通用性强。8255可作为单片机与多种外设连接时的中间接口电路。 8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口A、B、C口。由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。

6

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

特性

1.一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。(www.61k.com]

2.具有24个可编程设置的I/O口,即3组8位的I/O口,分别为PA口、PB口和PC口。它们又可分为两组12位的I/O口:A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O三种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.

单片机设计 单片机设计报告

引脚说明

RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:芯片选择信号线,当这个输入引脚为低电平时,即CS =0时,表示芯片被选中,允许8255与CPU进行通讯;CS =1时,8255无法与CPU做数据传输。

RD:读信号线,当这个输入引脚为低电平时,即RD=0且CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:写入信号,当这个输入引脚为低电平时,即WR=0且CS=0时,允许CPU将数据或控制字写入8255。

D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。

PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。

PB0~PB7:端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出 7

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

缓冲器。[www.61k.com]

PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。

A1,A0:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器。

当A1=0, A0=0时,PA口被选择;

当A1=0, A0=1时,PB口被选择;

当A1=1, A0=0时,PC口被选择;

当A1=1. A0=1时,控制寄存器被选择。

2.2.4蜂鸣器的工作原理

单片机设计 单片机设计报告

如图所示,蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B经过限流电阻R1后由单片机的P3.7引脚控制,当P3.7输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P3.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制P3.7脚的电平来使蜂鸣器发出声音和关闭。

8

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

2.3软件设计

2.3.1时间调节原理框图

单片机设计 单片机设计报告

9

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

2.3.2主程序流程图

单片机设计 单片机设计报告

10

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

第三章 总结

硬件设计单片机AT89C52,它是一种带4K字节闪存可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。[www.61k.com)单片机是很容易受干扰的控制器,当采用外部晶振时,应尽量让其靠近单片机减少对其干扰,防止程序乱飞现象。软件设计中要完成键值处理,定时中断,延时,键盘扫描,显示等功能。合理利用可以减少CPU利用资源,具有执行效率高等优点。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。在设计的过程中遇到困难我就及时和我的指导老师联系,在老师的帮助下,困难一个一个解决掉,设计也慢慢成型。这次设计的过程是一次再学习,再提高的过程。

本次让我们体味到设计电路、连接电路、调测电路过程中的乐苦与甜。设计是我们将来必需的技能,这次实习恰恰给我们提供了一个应用自己所学知识的机会,从到图书馆查找资料到对电路的设计对电路的调试再到最后电路的成型,都对我所学的知识进行了检验。同时在设计的过程中,遇到了一些以前没有见到过的元件,但是通过查找资料来学习这些元件的功能和使用。制作过程是一个考验人耐心的过程,不能有丝毫的急躁,马虎,对电路的调试要一步一步来,不能急躁,因为是在电脑上调试,比较慢,又要求我们有一个比较正确的调试方法,像把频率调准等等。这又要我们要灵活处理,在不影响试验的前提下可以加快进度。合理的分配时间。在设计控制电路的时候,我们可以连接显示和时钟电路,这样就加快了完成的进度。最重要的是要熟练地掌握课本上的知识,这样才能对试验中出现的问题进行分析解决。

11

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

第四章 参考文献

【1】单片机原理与嵌入式系统设计:原理、应用、proteus仿真、实验设计/张齐,朱宁西,毕盛编著。[www.61k.com)北京:电子工业出版社,2011

【2】李希文.电子测量技术 西安电子科技大学出版社 2008

【3】朱善君等.单片机接口技术与应用。北京:清华大学出版社,2005

【4】马忠梅等.单片机的C语言应用设计。北京:北京航空航天大学出版社,1999

【5】周润景等.PROTEUS入门实用教程。北京:机械工业出版社,2007

【6】朱清慧等.Proteus教程----电子线路设计、制版与仿真。北京:清华大学出版社,2008

【7】张齐.单片机应用系统设计技术----基于C51的proteus仿真。北京:电子工业出版社,2009

【8】谭浩强.C++程序设计.北京:清华大学出版社.2011.

【9】邱关源.电路(第五版).北京:高等教育出版社.2006.

12

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

附录

一、仿真图:

单片机设计 单片机设计报告

二、程序清单:

#include<reg52.h>

#include<absacc.h>

#define PA XBYTE[0x0000]

#define PB XBYTE[0x2000]

#define PC XBYTE[0x4000]

#define CMD XBYTE[0x6000]

sbit up=P1^0;

sbit down=P1^1;

sbit FMQ=P1^3;

bit flag_TR=0;

unsigned char flag_SET=0,shi=0,fen=0,miao=0,temp=0,i; unsigned char shu[10]={

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };

void init()

{

IE=0x87;

TMOD=0x01;

TH0=0x4c;

13

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

TL0=0X00;

TCON=0x05;

CMD=0x80;

}

void delay(unsigned int m)

{

unsigned char count;

while(m!=0)

{

for(count=0;count<239;count++){} m--;

}

}

void display(unsigned char shi,unsigned char fen,unsigned char miao) {

unsigned char shi0,shi1,fen0,fen1,miao0,miao1;

shi0=shi/10; shi1=shi%10;

fen0=fen/10; fen1=fen%10;

miao0=miao/10; miao1=miao%10;

PA=0x80;

PB=shu[shi0];

delay(5);

PA=0x40;

if(flag_SET==3&&!flag_TR)

PB=shu[shi1]&0x7f; PB=shu[shi1]; else

delay(5);

PA=0x20;

PB=shu[fen0];

delay(5);

14

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

PA=0x10;

if(flag_SET==2&&!flag_TR)

PB=shu[fen1]&0x7f; PB=shu[fen1]; else

delay(5);

PA=0x08;

PB=shu[miao0];

delay(5);

PA=0x04;

if(flag_SET==1&&!flag_TR)

}

void main()

{

init();

while(1)

{

PB=shu[miao1]&0x7f; else PB=shu[miao1]; delay(5); display(shi,fen,miao); if(flag_TR==0) { TR0=0; if(flag_SET==1&&up==0) { } if(flag_SET==1&&down==0) 15 while(up==0); miao++; if(miao==60)miao=0;

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

} { } if(flag_SET==2&&up==0) { } if(flag_SET==2&&down==0) { while(down==0); fen--; if(fen>60)fen=59; while(up==0); fen++; if(fen==60)fen=0; while(down==0); miao--; if(miao>60)miao=59;

} if(flag_SET==3&&up==0) { } if(flag_SET==3&&down==0) { } while(down==0); shi--; if(shi>24)shi=23; while(up==0); shi++; if(shi==24)shi=0; if(flag_TR==1) { } 16 TR0=1;

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

if(flag_TR==1&&fen==0&&miao==0) {

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

{

FMQ=0;

delay(300);

FMQ=1;

delay(300);

}

while(miao==0);

}

}

}

void timer0() interrupt 1

{

EA=0;

TH0=0x4c;

TL0=0x00;

flag_SET=0;

temp++;

if(temp==20)

{

temp=0;

miao++;

}

if(miao==60)

{

miao=0;

fen++;

}

if(fen==60)

{

fen=0;

17

单片机设计 单片机设计报告

华东交通大学信息工程专业单片机课程设计报告

shi++;

}

if(shi==24)

{

shi=0;

} EA=1;

}

void int_0() interrupt 0 {

EA=0;

flag_TR=!flag_TR;

EA=1;

}

void int_1() interrupt 2 {

EA=0;

if(!flag_TR)

flag_SET++;

flag_SET%=4;

EA=1;

}

18

四 : 94单片机课程设计报告(五人表决器)

目录

一、方案设计 ................................................ 2

二、硬件电路设计 ........................................ 2

三、软件设计说明 ........................................ 6

四、 程序清单 .............................................. 7

五、制作调试说明 ...................................... 12

六、操作使用说明 ...................................... 13

七、总结 ...................................................... 13

单片机课程设计

一、方案设计

1、设计题目:5人表决器 2、设计要求:

1)、可供5—7个人进行表决,每个人有一个“同意”和一个“反对”按键,故一个人需要两个按键,表决时两个键先按下的一个有效,同时按下则表示无效,每次表决每个按键只能是第一次按下的有效,多按无效,用单片机设计表决器是硬件电路与软件设计相结合的一种设计,因此在硬件电路只能实现按键的按下与释放,不能智能的实现检测按键被按下几次,则可用软件设计来实现其功能。 2)会议主持人可利用按键控制表决的开始与结束,点亮黄灯用于显示表决开始,熄灭黄灯表示结束,并将表决结果用红灯与绿灯显示。当不相等时,“同意”多于“反对”点亮绿灯,“同意”少于“反对”点亮红灯。

3)在实现上述功能的基础上增加“同意”数和“反对”数的显示。

二、硬件电路设计

1、硬件设计思路:

此次设计的题目是5人表决器,分析得设计的硬件电路选用P1口与P2口作为同意与反对按键的输入端。又表决的开始与结束是由主持人来控制的,因此需要两个按键来表示表决的开始与结束,因此可采用外部中断0与外部中断1来控制表决的开始于结束。故设计总共需要按键12个。设计要求中需要四盏灯,分变为

一个黄灯,一个绿灯和二个红灯,三盏灯用于输出显示,因此也可以征用单片机的I/O口,由于P1口与P2口作为同意与反对按键的输入端且P0口当做输出端口时可以不用接上拉电阻,因此可将三个显示灯接在P0口用于显示表决的结果。还有一盏红灯用来做电源指示灯。

2、元器件参数确定:

设计要求中需要三盏灯(黄灯,绿灯和红灯)用于输出显示,选用P0口的3个端口与显示灯相连接用于输出,由于输出端口输出的高电平一般为5V,而发光二极管允许的最大电流为5mA,因此需要用到限流电阻,发光二极管可降2V的电压,则限流电阻上的压降为3V,那么限流电阻的最小阻值为R=3V/5mA=600欧姆,由于输出的高电平不是5V,故用510欧姆的限流电阻。然后将单片机的最小系统(最小系统中各元器件的参数可参考单片机课本中给出的值)加入电路中就是此次设计的硬件电路。

3、元件清单:

各元器件的作用:

开关:有十个开关用于分别用做5人的同意与反对按键;一个开关用于复位电路,另外两个按键用于主持人的开始与结束按键;电容:用于单片机的最小系统;发光二极管:黄灯用于显示表决的开始与结束,红灯与绿灯用于显示表决的结果;电阻:用于限制电流;8051芯片:软件编程;电源接头:用于接外接电源。

4、电路工作原理简述:

该电路是基于硬件电路,应用汇编语言来设计出其工作流程,硬件电路是用软件程序来检测表决器的开始按键是否被按下,如果开始键已按下,则利用软件程序来检测用于表决的按键是否被按下以及按下的按键是否有效,然后检测结束键是否被按下,如果按下则表决结束,并且显示最终的表决结果。硬件电路只能够用于表征表决是否开始以及每个人按下的是同意按键还是反对按键。

工作流程:当主持人按下开始表决的开始按键(在电路中用接在外部中断0上的按键来表示开始按键)后,5个人才开始表决,5个人分别按下同意按键或是反对按键,剩余的事情由软件来处理分析最终统计得到“同意”的人数和“反对”的人数,当主持按下结束按键后(在电路中用外部中断1上所接的按键来表示结束按键),软件中用外部中断1来表示结束(采用中断的方式),在中断程序中比较“同意”的人数与“反对”的人数的大小。当“同意”的人数大于“反对”的人数时,应用软件程序点亮绿灯;当“同意”的人数小于“反对”的人数时,应用软件程序点亮红灯;当“同意”的人数等于“反对”的人数时,则应用软件程序将红灯与绿灯同时点亮。

图1 单片机系统的时钟电路

图2 实物电路板

94单片机课程设计报告(五人表决器)_五人表决器

三、软件设计说明

1、模块设计:

初始化模块 :对系统进行初始化,由于程序中有中断源,因此打开相应的中断也放在程序的初始化模块中;

检测开始按键:检测开始按键是否被按下,按下则开始执行循环检测同意与反对按键,为消除按键抖动,此处需调用延时程序;

循环检测同意/反对按键:循环检测同意与反对按键是否被按下,同时统计同意总数与反对总数,然后等待中断到来;

延时程序:用于消除按键的机械抖动,调用0.5s的延时程序;

中断处理:当中断源到来,首先熄灭黄灯,然后将同意总数与反对总数进行比较,并点亮对应的显示灯;

2、软件设计流程图

3、软件总体功能:

软件的总体功能

1.用于检测开始按键是否被按下,按下则表决按键按下才有效,即开始表决;

2.开始表决后循环检测对应的同意与反对按键是否被按下,并统计同意总数与反对总数;

3.等待中断,即等待结束按键被按下,在中断处理中将同意与反对数进行比较,并点亮相应的显示灯,程序结束。

四、程序清单

ORG 0000H

AJMP MAIN ;//转主程序//

ORG 0013H ;//外部中断1的入口地址//

AJMP INT_1 ;//跳转到中断//

ORG 0100H

MAIN: MOV SP,#60H ;//给地址指针赋初值//

MOV A,#0FFH

MOV P1,A ;//给P1口赋初始值//

MOV P2,A ;//给P2口赋初始值//

MOV P0,A ;//给P0口赋初始值//

SETB EA ;//开中断//

SETB EX1 ;//打开外部中断1//

SETB IT1 ;//设置外部中断1为边沿触发方式//

JB P3.2,$ ;//等待外部中断0上的按键按下//

LCALL DEL05S ;//调用延时程序//

JNB P3.2,$ ;//等待按键弹起//

CLR P0.5 ;//点亮黄灯//

L10: JB P1.4,L11 ;//判断按键P1.4口上的按键是否被按下//

JNB P1.4,$ ;//等待按键弹起//

JNB P2.0,L11 ;//检测对应的反对按键是否被按下//

LCALL DEL05S ;//调用延时程序//

MOV 21H,#00H ;//将21H初始化//

MOV A,21H ;//21H中存储第一个同意按键的按下数//

INC A ; //对21H地址单元中的值加1//

MOV B,A

MOV A,#01H

CJNE A,B,L11 ;//将寄存器A中的值与1比较,保证只有第一次按下才有效// MOV 21H,A ;//26H中存储第一个反对按键的按下数//

MOV 31H,#00H

MOV A,31H

INC A

MOV 31H,A ;//对31H中的同意数加1//

L11: JB P1.3,L12 ;//检测按键是否被按下//

JNB P1.3,$ ;//等待按键弹起//

JNB P2.1,L12 ;//判断对应的反对建是否被按下//

LCALL DEL05S ;//调用延时程序//

MOV 22H,#00H

MOV A,22H ;//同L10注释,下同//

INC A

MOV B,A

CJNE A,B,L12

MOV 22H,A

MOV A,31H

INC A

MOV 31H,A

L12: JB P1.2,L13 ;//同上//

JNB P1.2,$

JNB P2.2,L13

LCALL DEL05S

MOV 23H,#00H

MOV A,23H

INC A

MOV B,A

CJNE A,B,L13

MOV 23H,A

MOV A,31H

INC A

MOV 31H,A

L13: JB P1.1,L14 ;//同上//

JNB P1.1,$

JNB P2.3,L14

LCALL DEL05S

MOV 24H,#00H

MOV A,24H

INC A

MOV B,A

CJNE A,B,L14

MOV A,31H

INC A

MOV 31H,A

L14: JB P1.0,S0 ;//同上//

JNB P1.0,$

JNB P2.4,S0

LCALL DEL05S

MOV 25H,#00H

MOV A,25H

INC A

MOV B,A

CJNE A,B,S0

MOV 25H,A

MOV 30H,A

MOV A,31H

INC A

MOV 31H,A

S0: JB P2.0,s1 ;//判断第一个反对建是否被按下// JNB P2.0,$ ;//等待按键弹起//

JNB P1.4,s1 ;//判断对应的同意键是否被按下// LCALL DEL05S ;//调用延时程序//

MOV 26H,#00H ;//将26H初始化//

MOV A,26H ;//将值送入对应的存储空间// INC A;//寄存器A的内容加1//

MOV B,A

CJNE A,B,S1 ;//与1比较//

MOV 26H,A

MOV A,32H

INC A ;//对寄存器A的内容加1//

MOV 32H,A ;//将寄存器A的值赋值给32H// S1: JB P2.1,S2 ;//同上面的S0程序的注释// JNB P2.1,$

JNB P1.3,S2

LCALL DEL05S

MOV 27H,#00H

MOV A,27H

INC A

MOV B,A

CJNE A,B,S2 MOV 27H,A MOV A,32H INC A

MOV 32H,A

S2: JB P2.2,S3 ;//同上// JNB P2.2,$

JNB P1.2,S3

LCALL DEL05S MOV 28H,#00H MOV A,28H INC A

MOV B,A

CJNE A,B,S3 MOV 28H,A MOV A,32H INC A

MOV 32H,A

S3: JB P2.3,S4 ;//同上// JNB P2.3,$

JNB P1.1,S4

LCALL DEL05S MOV 29H,#00H MOV A,29H INC A

MOV B,A

CJNE A,B,S4 MOV 29H,A MOV A,32H INC A

MOV 32H,A

S4: JB P2.4,RT ;//同上// JNB P2.4,$

JNB P1.0,RT

LCALL DEL05S MOV 30H,#00H MOV A,30H

94单片机课程设计报告(五人表决器)_五人表决器

INC A

MOV B,A

CJNE A,B,RT

MOV 30H,A

MOV A,32H

INC A

MOV 32H,A

RT: AJMP L10 ;//跳转到L0程序循环检测各个按键是否被按下//

DEL05S: MOV TMOD,#10H ;//定时器T1,方式1//

MOV TL1,#0DCH ;//送计数初值,保证定时时间为125ms//

MOV TH1,#0BH

MOV R2,#4 ;//设置软计数器,使4*125ms=0.5s//

SETB TR1 ;//启动定时计数器//

LOOP: JNB TF1,$ ;//等待1ms定时到//

MOV TL1,#0DCH ;//再送计数初值,保证定时时间始终为125ms//

MOV TH1,#0BH

CLR TF1 ;//清除溢出标志位,以便下次判断//

DJNZ R2,LOOP ;//等待0.5S延时到//

CLR TR1 ;//关闭定时器1//

RET ;//延时程序返回//

INT_1: SETB P0.5 ;//熄灭黄灯//

MOV A,31H ;//将同意数赋值给寄存器A//

MOV B,A

MOV A,32H

CLR P0.0

CJNE A,B,LP ;//比较同意数与反对数的大小//

MOV P0,#00H ;//三个显示灯同时点亮//

SJMP OUT ;//跳转到OUT程序//

LP: JC GREEN ;//判断溢出标志位Cy//

CLR P0.0 ;//点亮绿灯//

SJMP OUT ;//跳转到OUT程序//

GREEN: CLR P0.2 ;//点亮红灯//

OUT: NOP ;//空操作指令//

RETI ;//中断返回//

END

五、制作调试说明

1、制作与程序设计思路:

将所设计的硬件电路焊接好,然后根据硬件电路的基本接法画出软件编程的流程图,然后根据流程图中的各个模块编写相应模块的程序,最后将各个模块综合起来构成说设计的程序。

2、调试过程与结果:

程序的编写过程:

1)、根据软件的流程图中的各个模块的基本要求,先编写出模块程序,使其实现模块功能;然后根据流程图中各个模块之间的箭头方向将各个模块联系在一起,最后对对整体程序进行调节,直至调试运行后没有逻辑错误与警告;

2)、将运行没有错误的程序导入模拟软件中进行仿真调试,首先发现不能实现预期的功能,于是对程序进行修改,直至调试成功,通过仿真能够实现预期的功能,则程序编写成功,可进行硬件电路的调试。

调试过程中出现的问题:

1)、将所编程的的程序烧写在单片机8051芯片中,然后将其加入硬件电路中,然后进行调试,发现不能实现其功能。

2)调整后继续进行调试,结果还是不能实现预期的功能,当按下的同意键大于反对建时,绿灯被点亮;但当按下的反对建大于同意键时,仍然显示绿灯,同意键等于反对建是也显示绿灯,也不能达到预期的功能;进一步对程序进行调试,但仍然不能解决问题。然后对硬件电路进行检测发现有一个管脚虚焊,红灯也不能正常工作,于是将坏掉的元器件换掉后再进行调试后猜成功实现理想的功能。

六、操作使用说明

1、将汇编语言程序烧写进单片机8051芯片中,然后把芯片连接到硬件电路中;

2、按下开始按键(外部中断0)后开始表决,P1口上的按键为同意按键,P2口上的按键为反对按键,表决后按下结束按键(外部中断1),点亮相应的显示灯,绿灯表示同意大于反对总数,点亮红灯表示反对大于同意同意数。

七、总结

这次实训,主要实习任务是根据以前所学知识,设计单片机硬件电路,制作电路,自己编写汇编程序;并通过调试硬件电路和程序使其实现预期的功能。这次实训让我真正的了解了单片机设计的基本设计理念,以及设计所需要掌握的一些基本概念。同时更加巩固了我们所学习的知识,并将所学习的理论知识真正的应用于实践中。我认为此次的实习对我是受益匪浅的,让我更加有了学习的动力。当我所设计的电路经调试能够实现预期效果时,我的内心是无比的愉悦,虽然此次在调试过程中遇到了很多的问题,最终的结果页并不是那么理想,但我还是感觉很欣慰,因为这次实训让我了解到了平时学习中的不足,让我更谦虚的学习更多的知识。虽然有很多地方是借鉴别人的,但我能够在调试过程中学到很多以前没有弄明白的问题以及相关知识点。在这实训的二周里,说紧张却稍带着愉快的气氛,整个过程应该是充实的,时而惊喜,时而烦闷特别是最后调试阶段有一块调通了都会让我们高兴不已,当卡在某处时也确实是让人抓狂。总之通过这次单片机实训,我们不但复习了过去所学,并且学到了一些新东西。更重要的是通过这一次切身实践,才使我们真正将理论与实际结合起来,并且遇到了很多实实在在的需要我们亲自解决的问题。通过解决这些问题,我们处理实际问题的能力有了很大提高,积累了我们的实践经验,以便为以后打下牢固的基础。而这些才是我们作为一名工科学生最宝贵的财富。

本文标题:单片机课程设计报告-单片机课程设计报告
本文地址: http://www.61k.com/1161856.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1