硬件课程设计报告.docx

上传人:b****5 文档编号:8173793 上传时间:2023-01-29 格式:DOCX 页数:15 大小:254.13KB
下载 相关 举报
硬件课程设计报告.docx_第1页
第1页 / 共15页
硬件课程设计报告.docx_第2页
第2页 / 共15页
硬件课程设计报告.docx_第3页
第3页 / 共15页
硬件课程设计报告.docx_第4页
第4页 / 共15页
硬件课程设计报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

硬件课程设计报告.docx

《硬件课程设计报告.docx》由会员分享,可在线阅读,更多相关《硬件课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。

硬件课程设计报告.docx

硬件课程设计报告

淮北师范大学

硬件课程设计

 

硬件课程设计报告

 

学院计算机科学与技术

专业计算机科学与技术(非师范)

学号2009120202020091202026

学生姓名胡冰山刘洵

指导教师姓名于雷

2011年10月8日

一、设计目的与内容:

1、熟悉整个电路图,练习一下焊接操作;

2、能够根据原理图焊接电路板,经过调试,保证整个电路板没有虚焊点;

3、熟练掌握C51的编程方法与技巧;

4、能够有效地控制LED、蜂鸣器和键盘的操作(可采用多种形式);

5、编写出一个电子钟,六个数码管每两个一组,分别显示小时、分钟和秒;

硬件设计要求:

1.根据项目要求,去选择相应的电路,比如MCU系统,输入输出驱动电路,电源供电电路。

2.整体布局合理,标注规范、明确、美观、不产生歧义。

3.列出完整的元件清单(标号、型号及大小、封装形式、数量)。

4.估算电路板的功耗,并对供电形式提出要求。

5.根据设计好的原理图,焊接实物。

软件设计要求:

1.简单的用户使用说明书。

2.根据项目要求,设计软件整体规划,人机对话,各模块的关联,底层驱动模块。

3.程序在必要的地方进行注释。

每个函数的出入口要有输入输出参数的说明。

程序必须具有良好的可读性,可重用,容易调试和维护。

4.使用c语言进行编程

二、实验原理:

1、LED灯的控制

由电路图可知,LED灯左侧阳极与电阻相连接高电平,右侧阴极与P1相连。

因此:

当P1为低电平(即P1=0)时,电路连通,LED灯亮,当P1为高电平时(即P1=1)时,电路不通,LED灯不亮。

所以,可以通过控制P1的值控制LED灯的亮与不亮。

而因为八个LED灯与P1口上八个引脚相连,因此可以控制每个接口的值控制每个LED灯的亮灭。

比如当P1=0x04时,第五个灯不亮。

2、蜂鸣器的控制

由电路图可知,蜂鸣器一侧与三极管相连,另一侧与高电平相连,而三极管与电阻相连后接P2_1口。

因此当P2_1=1时,蜂鸣器响;当P2_1=0时,蜂鸣器不响。

3、键盘的控制

(1)由电路图可知,P3_2到P3_5这四个引脚分别与四个开关相连,开关与地相连,所以当开关闭合时,P3_2=0,当开关断开时,P3_2=1,所以可以根据查看P3_2等值的0或1来判断开关是否闭合。

(2)要达到通过键盘控制数码管显示数字的目的,可以将P3_2为0时,表示要修改数字,而用P3_3到P3_5为0时分别对应时分秒等进行数值的加1。

(3)由电路图可知,开关S1闭合时,电路断开。

4、电子钟的显示

(1)电子钟上数字的显示原理

由电路图可知,P2_7到P2_2这六个引脚分别与六个数码管相连,中间有一10k的电阻,还有一三极管,通过三极管的特性可知,当P2_7等接高电平时,电路连通,数码管亮,既可以显示数字。

同样可以看到,P0口的八个引脚都与六个数码管相连,控制数码管中八个的亮灭,以达到显示0—9这10个数字的目的。

(2)电子钟的上显示的数字之间的联系

1、六个数码管每两个一组,分别显示时,分,秒。

判断当显示秒的数字,达到59时,将显示数字变为00,显示分钟的数字加1;当显示分钟的数字,达到59时,将显示的数字变为00,显示小时的数字加1;当显示小时的数字,达到23时,将显示的数字变为00。

2、六个数码管分为三组,前两个显示月份,后两位显示日期,中间两位作为分隔符号。

5、中断函数模块

这个程序运用了两个中断函数,分别为定时器0和定时器1的中断,定时器0是用来计时,定时器1是用来动态扫描,这样使得电子钟的性能更稳定。

6、实验电路图

总电路图:

 

数码管:

二极管:

蜂鸣器:

按键:

单片机:

7.系统的元器件清单

表2.1系统元器件表

器件

型号

数量

器件

型号

数量

单片机

12C5A60S2

1个

按键

普通

5个

三极管

普通

8个

开关

6脚双路

1个

排阻

A103J,A427J,A102J

1个,1个,

1个

二极管灯

普通

8个

电容

10μF

2个

数码管

CPS056AR

6个

电阻

普通

若干

下载接口

4针接口

1个

蜂鸣器

压电式

1个

单排针

普通

若干

三、主要功能模块流程图:

main函数流程图

四、拓展功能:

(1)LED灯的花样设计:

可根据自己的喜好设计出各种各样的LED灯

(2)利用数码管实现日期的显示:

显示月份与日期,根据月份判断每月天数

五、参考文献:

《新编单片机原理及应用》、《c语言程序设计》、《51单片机C语言教程》、《51实验指导》、《数据结构》、《算法设计与分析》

六、源程序及系统文件使用说明:

#include

#defineucharunsignedchar

ucharnum[]={0xbd,0x90,0xa7,0xb6,0x9a,0x3e,0x3f,0xb0,0xbf,0xbe};//0——9

ucharhour=12,min=0,second=0,flag,time1,month=12,day=1;//给各个数附初值

ucharset_hour=12,set_min=1,set_switch=1,key1_time,function;

ucharbell[]={0x17,0x13,0x2b};//显示开与关,ON,OF

uchartemp;

unsignedcharled[10]={0x00,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0xaa};

sbitkey1=P3^2;

sbitkey2=P3^3;

sbitkey3=P3^4;

sbitkey4=P3^5;

sbitbell_ring=P2^1;

inti;

#defineuintunsignedint

uintcount=0;

 

voidtimer()interrupt1using0{//秒表控制函数

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

time1++;

}

voiddelay(uchari)//延迟函数

{

ucharj,k;

for(j=0;j

for(k=0;k<125;k++);

}

voidBeep()//钟表滴答声控制函数

{

P2_1=0;

delay

(1);

P2_1=1;

delay

(1);

}

voidtime(){//时间进行函数

if(time1==20){

time1=0;

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

Beep();

count++;

if(count==10)

count=0;

P1=led[count];

second++;

if(second==60){

second=0;

min++;

}

if(min==60){

min=0;

hour++;

}

if(hour==24){

hour=0;

day++;

//date();//调用日期函数,以便日期变化

}

}

}

 

voiddate(){//日期函数

if(month==2&&day>=30){

month++;

day=1;

}

elseif(((month==4)||(month==6)||(month==9)||(month==11))&&(day>=31)){

day=1;

month++;

}

elseif(day>=32){

day=1;

month++;

}

if(month>=13){

month=1;

}

}

voidset_time(){//调节时间函数

P3=0xff;

if(key2==0){//调节小时

delay(200);

if(key2==1){

hour++;

if(hour==25){

hour=0;

}

}

}

if(key3==0){//调节分钟

delay(200);

if(key3==1){

min++;

if(min==60)

min=0;

}

}

if(key4==0){//调节秒

delay(200);

if(key4==1){

second++;

if(second==60)

second=0;

}

}

}

voidset_date(){//调节日期

P3=0xff;

if(key2==0){//调节月份

delay(200);

if(key2==1){

month++;

if(month==13)

month=1;

}

}

if(key3==0){//调节日份

delay(200);

if(key3==1){

day++;

if(month==2&&day>=30){

day=1;

}

elseif(((month==4)||(month==6)||(month==9)||(month==11))&&(day>=31)){

day=1;

}

elseif(day>=32){

day=1;

}

}

}

}

voidshow_bell(){//显示设置的闹铃时间

P2=0x04;//显示ON,OF

if(set_switch%2==0){

P0=bell[2];//OF

delay(6);

}

else{

P0=bell[1];//ON

delay(6);

}

P2=0x08;

P0=bell[0];

delay(6);

P2=0x10;

P0=num[set_min%10];

delay(6);

P2=0x20;

P0=num[set_min/10];

delay(6);

P2=0x40;

P0=num[set_hour%10];

delay(6);

P2=0x80;

P0=num[set_hour/10];

delay(6);

}

voidset_bell(){//设置闹铃函数

//P3=0xff;

if(key2==0){

delay(200);

if(key2==1){

set_hour++;

if(set_hour==24)

set_hour=0;

}

}

if(key3==0){

delay(200);

if(key3==1){

set_min++;

if(set_min==60){

set_min=0;

}

}

}

if(key4==0){

delay(200);

if(key4==1){

set_switch++;

}

}

}

voidshow_time(){//显示时间

P2=0x04;

P0=num[second%10];

delay(6);

P2=0x08;

P0=num[second/10];

delay(6);

P2=0x10;

P0=num[min%10];

delay(6);

P2=0x20;

P0=num[min/10];

delay(6);

P2=0x40;

P0=num[hour%10];

delay(6);

P2=0x80;

P0=num[hour/10];

delay(6);

}

voidshow_date(){//日期显示

P2=0x04;

P0=num[day%10];

delay(6);

P2=0x08;

P0=num[day/10];

delay(6);

P2=0x10;

P0=0x02;//显示数码管为"-"

delay(6);

P2=0x20;

P0=0x02;

delay(6);

P2=0x40;

P0=num[month%10];

delay(6);

P2=0x80;

P0=num[month/10];

delay(6);

}

voidwalk_up_bell(){//响铃设置

if((min==set_min)&&(hour==set_hour))

temp=1;

elsetemp=0;

if((temp==1)&&(set_switch%2==1)&&(second<=5))

{

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

Beep();

}

elsebell_ring=0;

}

voidkey_board(){//功能选择

P3=0xff;

if(key1==0){

delay(200);

if(key1==1){

key1_time++;

}

}

function=key1_time%4;

switch(function){

case0:

show_time();break;

case1:

show_time();set_time();break;

case2:

show_date();set_date();break;

case3:

show_bell();set_bell();break;

}

}

voidmain(){

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

while

(1){

key_board();

time();

date();

walk_up_bell();

}

}

七、总结

在组装单片机硬件设备时要细心,要有耐心,在实验时要注意安全。

在编译软件时,程序刚开始没有什么头绪,通过各种资料的搜集后发现调用各种函数来实现比较容易,整个过程中出现了很多小问题,各个函数的调用比较混乱。

通过一系列的梳理后慢慢清晰,发现比较的容易。

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

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1