2013-2013单片机实训报告

单片机应用技术

实训

学院: 机 电 学 院 班级: 机 电 1103 学号: 2011200193 姓名: 文君

一、设计题目

利用单片机和按键配合实现LED灯场景控制,循环点亮控制及点亮频率变化控制、7段数码管显示控制

二、设计要求

1、设计一个具有上电复位功能的单片机最小系统。 2、按照设计的单片机最小系统焊接一个实物电路。

3、设计满足程序功能的按键、8个LED灯及7段数码管外围电路。 4、利用单片机进行8个LED灯的循环点亮。 5、通过按键变化8个LED灯循环点亮的频率。 6、通过按键实现不同颜色LED灯的控制。

7、利用单片机和外围数码管电路实现数码显示0到9的数码。 8、给按键赋值,按某个按键显示对应的数码。

三、硬件设计

硬件电路设计原理图:

数码管显示数码6截图:

数码管显示数码1截图:

不同色彩LED灯的控制截图:

8个LED灯跑马灯截图

:

At89c51单片机简介:

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

At89c51单片机的主要特点:

1、与MCS-51 兼容

2、4K字节可编程闪烁存储器 3、寿命:1000写/擦循环 4、数据保留时间:10年 5、全静态工作:0Hz-24Hz 6、三级程序存储器锁定 7、128*8位内部RAM 8、32可编程I/O线 9、两个16位定时器/计数器 10、5个中断源 11、可编程串行通道

12、低功耗的闲置和掉电模式 13、片内振荡器和时钟电路

四、软件设计流程图

LED跑马灯程序流程图:

数码管程序流程图:

五、重点程序解释

unsigned char code dx[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 程序解释:此段代码为共阳极7段数码管0到9十个数码的显示代码

void delay20ms() { }

程序解释:此段程序代码利用51单片机定时器0的准确定时功能,实现精确的20ms延时。

void delay_50us(uint t) {

uchar j; for(;t>0;t--) }

程序解释:此段程序代码利用for循环语句,配合51单片机的指令周期,实现50us的大概延时。 uchar keyscan() {

TH0=(65535-20000)/256; TL0=(65535-20000)%256; TR0=1; while(!TF0) ; TF0=0;

for(j=19;j>0;j--)

;

uchar x=0; P2=0xff;

}

if(P2!=0xff) { } return x;

delay_50us(200); if(P2!=0xff) { }

switch(P2) { }

case 0x7f:x=1;break; case 0xbf:x=2;break; case 0xdf:x=3;break; case 0xef:x=4;break;

程序解释:此段代码是一个带无符号字符型返回值的子函数,实现的是对按键的判断,把单片机的P2口高四位作为按键数据采集位,当对应按键连接的位为低电平,且延时10ms后(程序消抖),仍然判断为低电平,则确定有键按下,并判断出具体按下的是哪个键,同时利用return语句返回按键值到主程序中进行下一步处理。

for(i=0;i

{

P1=~temp; for(b=0;b

temp=temp

delay20ms();

}

程序解释:此for循环完成的是8个LED灯的循环点亮,利用变量n值改变跑马灯循环点亮的频率。

void display() { }

程序解释:此段代码是一个不带返回值的子函数,利用P1口实现三种不同颜色LED灯的场景控制。

uint t; P1=0x1f; for(t=0;t

delay50ms(); delay50ms(); delay50ms();

switch(keyvalue)

{

case 1:i=1;break; case 2:i=2;break;

}

case 3:i=3;break; case 4:i=4;break;

程序解释:利用switch选择语句,通过按键给变量i赋值,主程序再将i的值显示到7段数码管上。

for(i=0;i

{ }

P3=dx[i]; for(b=0;b

delay50ms(); if(P2!=0xff)

temp=1;

程序解释:利用数组,在数码管上循环显示0到9十个数码,并判断是否有按键按下,如果有按键按下,则进入另外一个while循环,实现按键值的显示。

五、实训总结及感悟

为期两周的单片机应用实训已经结束,我们组基本上完成了老师布置的任务。第一周周一老师集中讲解了此次单片机应用实训的相关知识点、讲解了单片机最小系统的硬件组成、实训报告的相关要求、并给我们布置了任务。第一周周二周三我们组成员合作完成了电路原理图的绘制,并在Proteus中进行了仿真电路测试。第一周周四周五我们组利用keil软件共同完成了满足设计题目要求的源程序编写,并在Proteus中完成了软、硬件的联合调试。第二周周一周二,我们组按照老师要求,完成了硬件电路的焊接制作,并将程序烧写入51单片机中实现了设计题目的要求。

通过此次单片机实训学习,我们组成员初步学习并掌握了Proteus软件的电路图设计及仿真操作方法,更加深入的了解并掌握了单片机课程中使用到的

keil C语言编程软件。通过设计并制作单片机最小系统环节,我们巩固了单片机课程上所学习的51单片机硬件结构。在解决并完成满足单片机设计题目要求的过程中,提高了我们编写程序的逻辑思维能力。在进行软件和硬件仿真的过程中,我们遇到了不少问题,通过解决这些问题,我们发现问题和解决问题的能力得到了显著提高。在焊接制作实物电路环节,我们开始认为这是一件简单的事情,就是按照设计电路焊接就可以了。但在实际过程中,才发现原来焊接电路并不如想象中容易,尤其是要得到高质量的电路板。通过一个下午的焊接练习,我们组员的焊接技能得到了显著提高。

虽然这次实训学习基本完成了老师的要求,但其中也出现了很多问题。第一、不够细心比如粗心大意焊错了线,在Proteus中设计电路时,接错单片机的I/O口,对C语言的编程语法不熟悉,导致编程软件报错。第二,是在学习态度上,实训课程的性质本来就是开放的,这需要我们有较强的自制和自学能力。实际上在实训过程中,我们也有过偷懒的时候,对此我们进行了认真的检讨并及时进行了纠正。对于这次单片机综合应用课程实训,我的第一大心得体会是作为一名技术人员,要求具备的首要素质绝对应该是严谨,遇到问题时千万不能紧张,要冷静客观地分析解决问题。第三,是在人生价值观上,作为一个有梦想有责任心的人,我认识到无论做什么事情,都要有担当尤其是在一个团队之中,要敢于挑战项目中出现的各种问题。你要相信一个事实,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有事情能够难到你。第四,一个称的上好的、并能高效完成任务的团队,必定是一个懂得团体合作,并能够相互补充的团队。在我们组进行实训的过程中,我们遇到过很多问题,也产生过不少分歧,最终都是在相互理解和团队合作中解决的。

总的来说,这次实训我受益匪浅,不仅深化了专业知识,提高了实践动手能力,更加强了我与他人交流的能力,相信这次的学习经历,一定会为我以后的学习和工作生活带来正面的影响。

六、制作的电路板照片

单片机实物照片如下图:

LED跑马灯实物显示照片如下图:

单片机数码管外围电路实物显示照片如下图:

七、附程序源代码

1.利用单片机和按键配合实现LED灯场景控制,循环点亮控制及速度变化控制,三色灯的分别控制源程序

#include

#define uint unsigned int

#define uchar unsigned char

unsigned char code dx[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay20ms()

{

}

TH0=(65535-20000)/256; TL0=(65535-20000)%256; TR0=1; while(!TF0) ; TF0=0;

void delay50ms()

{

}

void delay_50us(uint t)

{

uchar j;

for(;t>0;t--)

}

void display();

uchar keyscan();

void main()

{

unsigned char temp,i,b,n=1,keyvalue=0; for(j=19;j>0;j--) ; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TR0=1; while(!TF0) ; TF0=0;

unsigned int d=2000;

EX0=1; TMOD=0X01; EA=1; while(1) { temp=0x01; keyvalue=keyscan(); switch(keyvalue)

case 1:while(1){display();} case 4:n+=2;while(P2!=0xff);break;

}

for(i=0;i

{

P1=~temp;

for(b=0;b

{

delay20ms();

}

temp=temp

}

}

}

void display()

{

uint t;

P1=0x1f;

for(t=0;t

{

delay50ms();

}

P1=0xe3;

for(t=0;t

{

delay50ms();

}

P1=0xfc;

for(t=0;t

} } delay50ms();

uchar keyscan()

{

}

2.通过扩展按键实现对扩展LED数码管的控制源程序

#include

#define uint unsigned int

#define uchar unsigned char

unsigned char code dx[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar x=0; P2=0xff; if(P2!=0xff) { } return x; delay_50us(200); if(P2!=0xff) { } switch(P2) { } case 0x7f:x=1;break; case 0xbf:x=2;break; case 0xdf:x=3;break; case 0xef:x=4;break;

void delay50ms()

{

}

void delay_50us(uint t)

{

uchar j;

for(;t>0;t--)

}

void display();

uchar keyscan();

void main()

{

unsigned char i,b,n=1,keyvalue=0,temp=0; for(j=19;j>0;j--) ; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TR0=1; while(!TF0) ; TF0=0; unsigned int d=2000;

EX0=1; TMOD=0X01; EA=1; while(1) { keyvalue=keyscan(); if(P2!=0xff) temp=1;

} } while(temp) { } keyvalue=keyscan(); switch(keyvalue) { } P3=dx[i]; case 1:i=1;break; case 2:i=2;break; case 3:i=3;break; case 4:i=4;break; for(i=0;i

注:此处省略重复的按键扫描程序代码。

单片机应用技术

实训

学院: 机 电 学 院 班级: 机 电 1103 学号: 2011200193 姓名: 文君

一、设计题目

利用单片机和按键配合实现LED灯场景控制,循环点亮控制及点亮频率变化控制、7段数码管显示控制

二、设计要求

1、设计一个具有上电复位功能的单片机最小系统。 2、按照设计的单片机最小系统焊接一个实物电路。

3、设计满足程序功能的按键、8个LED灯及7段数码管外围电路。 4、利用单片机进行8个LED灯的循环点亮。 5、通过按键变化8个LED灯循环点亮的频率。 6、通过按键实现不同颜色LED灯的控制。

7、利用单片机和外围数码管电路实现数码显示0到9的数码。 8、给按键赋值,按某个按键显示对应的数码。

三、硬件设计

硬件电路设计原理图:

数码管显示数码6截图:

数码管显示数码1截图:

不同色彩LED灯的控制截图:

8个LED灯跑马灯截图

:

At89c51单片机简介:

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

At89c51单片机的主要特点:

1、与MCS-51 兼容

2、4K字节可编程闪烁存储器 3、寿命:1000写/擦循环 4、数据保留时间:10年 5、全静态工作:0Hz-24Hz 6、三级程序存储器锁定 7、128*8位内部RAM 8、32可编程I/O线 9、两个16位定时器/计数器 10、5个中断源 11、可编程串行通道

12、低功耗的闲置和掉电模式 13、片内振荡器和时钟电路

四、软件设计流程图

LED跑马灯程序流程图:

数码管程序流程图:

五、重点程序解释

unsigned char code dx[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 程序解释:此段代码为共阳极7段数码管0到9十个数码的显示代码

void delay20ms() { }

程序解释:此段程序代码利用51单片机定时器0的准确定时功能,实现精确的20ms延时。

void delay_50us(uint t) {

uchar j; for(;t>0;t--) }

程序解释:此段程序代码利用for循环语句,配合51单片机的指令周期,实现50us的大概延时。 uchar keyscan() {

TH0=(65535-20000)/256; TL0=(65535-20000)%256; TR0=1; while(!TF0) ; TF0=0;

for(j=19;j>0;j--)

;

uchar x=0; P2=0xff;

}

if(P2!=0xff) { } return x;

delay_50us(200); if(P2!=0xff) { }

switch(P2) { }

case 0x7f:x=1;break; case 0xbf:x=2;break; case 0xdf:x=3;break; case 0xef:x=4;break;

程序解释:此段代码是一个带无符号字符型返回值的子函数,实现的是对按键的判断,把单片机的P2口高四位作为按键数据采集位,当对应按键连接的位为低电平,且延时10ms后(程序消抖),仍然判断为低电平,则确定有键按下,并判断出具体按下的是哪个键,同时利用return语句返回按键值到主程序中进行下一步处理。

for(i=0;i

{

P1=~temp; for(b=0;b

temp=temp

delay20ms();

}

程序解释:此for循环完成的是8个LED灯的循环点亮,利用变量n值改变跑马灯循环点亮的频率。

void display() { }

程序解释:此段代码是一个不带返回值的子函数,利用P1口实现三种不同颜色LED灯的场景控制。

uint t; P1=0x1f; for(t=0;t

delay50ms(); delay50ms(); delay50ms();

switch(keyvalue)

{

case 1:i=1;break; case 2:i=2;break;

}

case 3:i=3;break; case 4:i=4;break;

程序解释:利用switch选择语句,通过按键给变量i赋值,主程序再将i的值显示到7段数码管上。

for(i=0;i

{ }

P3=dx[i]; for(b=0;b

delay50ms(); if(P2!=0xff)

temp=1;

程序解释:利用数组,在数码管上循环显示0到9十个数码,并判断是否有按键按下,如果有按键按下,则进入另外一个while循环,实现按键值的显示。

五、实训总结及感悟

为期两周的单片机应用实训已经结束,我们组基本上完成了老师布置的任务。第一周周一老师集中讲解了此次单片机应用实训的相关知识点、讲解了单片机最小系统的硬件组成、实训报告的相关要求、并给我们布置了任务。第一周周二周三我们组成员合作完成了电路原理图的绘制,并在Proteus中进行了仿真电路测试。第一周周四周五我们组利用keil软件共同完成了满足设计题目要求的源程序编写,并在Proteus中完成了软、硬件的联合调试。第二周周一周二,我们组按照老师要求,完成了硬件电路的焊接制作,并将程序烧写入51单片机中实现了设计题目的要求。

通过此次单片机实训学习,我们组成员初步学习并掌握了Proteus软件的电路图设计及仿真操作方法,更加深入的了解并掌握了单片机课程中使用到的

keil C语言编程软件。通过设计并制作单片机最小系统环节,我们巩固了单片机课程上所学习的51单片机硬件结构。在解决并完成满足单片机设计题目要求的过程中,提高了我们编写程序的逻辑思维能力。在进行软件和硬件仿真的过程中,我们遇到了不少问题,通过解决这些问题,我们发现问题和解决问题的能力得到了显著提高。在焊接制作实物电路环节,我们开始认为这是一件简单的事情,就是按照设计电路焊接就可以了。但在实际过程中,才发现原来焊接电路并不如想象中容易,尤其是要得到高质量的电路板。通过一个下午的焊接练习,我们组员的焊接技能得到了显著提高。

虽然这次实训学习基本完成了老师的要求,但其中也出现了很多问题。第一、不够细心比如粗心大意焊错了线,在Proteus中设计电路时,接错单片机的I/O口,对C语言的编程语法不熟悉,导致编程软件报错。第二,是在学习态度上,实训课程的性质本来就是开放的,这需要我们有较强的自制和自学能力。实际上在实训过程中,我们也有过偷懒的时候,对此我们进行了认真的检讨并及时进行了纠正。对于这次单片机综合应用课程实训,我的第一大心得体会是作为一名技术人员,要求具备的首要素质绝对应该是严谨,遇到问题时千万不能紧张,要冷静客观地分析解决问题。第三,是在人生价值观上,作为一个有梦想有责任心的人,我认识到无论做什么事情,都要有担当尤其是在一个团队之中,要敢于挑战项目中出现的各种问题。你要相信一个事实,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有事情能够难到你。第四,一个称的上好的、并能高效完成任务的团队,必定是一个懂得团体合作,并能够相互补充的团队。在我们组进行实训的过程中,我们遇到过很多问题,也产生过不少分歧,最终都是在相互理解和团队合作中解决的。

总的来说,这次实训我受益匪浅,不仅深化了专业知识,提高了实践动手能力,更加强了我与他人交流的能力,相信这次的学习经历,一定会为我以后的学习和工作生活带来正面的影响。

六、制作的电路板照片

单片机实物照片如下图:

LED跑马灯实物显示照片如下图:

单片机数码管外围电路实物显示照片如下图:

七、附程序源代码

1.利用单片机和按键配合实现LED灯场景控制,循环点亮控制及速度变化控制,三色灯的分别控制源程序

#include

#define uint unsigned int

#define uchar unsigned char

unsigned char code dx[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay20ms()

{

}

TH0=(65535-20000)/256; TL0=(65535-20000)%256; TR0=1; while(!TF0) ; TF0=0;

void delay50ms()

{

}

void delay_50us(uint t)

{

uchar j;

for(;t>0;t--)

}

void display();

uchar keyscan();

void main()

{

unsigned char temp,i,b,n=1,keyvalue=0; for(j=19;j>0;j--) ; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TR0=1; while(!TF0) ; TF0=0;

unsigned int d=2000;

EX0=1; TMOD=0X01; EA=1; while(1) { temp=0x01; keyvalue=keyscan(); switch(keyvalue)

case 1:while(1){display();} case 4:n+=2;while(P2!=0xff);break;

}

for(i=0;i

{

P1=~temp;

for(b=0;b

{

delay20ms();

}

temp=temp

}

}

}

void display()

{

uint t;

P1=0x1f;

for(t=0;t

{

delay50ms();

}

P1=0xe3;

for(t=0;t

{

delay50ms();

}

P1=0xfc;

for(t=0;t

} } delay50ms();

uchar keyscan()

{

}

2.通过扩展按键实现对扩展LED数码管的控制源程序

#include

#define uint unsigned int

#define uchar unsigned char

unsigned char code dx[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar x=0; P2=0xff; if(P2!=0xff) { } return x; delay_50us(200); if(P2!=0xff) { } switch(P2) { } case 0x7f:x=1;break; case 0xbf:x=2;break; case 0xdf:x=3;break; case 0xef:x=4;break;

void delay50ms()

{

}

void delay_50us(uint t)

{

uchar j;

for(;t>0;t--)

}

void display();

uchar keyscan();

void main()

{

unsigned char i,b,n=1,keyvalue=0,temp=0; for(j=19;j>0;j--) ; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TR0=1; while(!TF0) ; TF0=0; unsigned int d=2000;

EX0=1; TMOD=0X01; EA=1; while(1) { keyvalue=keyscan(); if(P2!=0xff) temp=1;

} } while(temp) { } keyvalue=keyscan(); switch(keyvalue) { } P3=dx[i]; case 1:i=1;break; case 2:i=2;break; case 3:i=3;break; case 4:i=4;break; for(i=0;i

注:此处省略重复的按键扫描程序代码。


相关内容

  • [科技文献检索]报告课题.要求及范例
  • 提交一份<科技文献检索报告> 利用所学文献检索知识和检索方法,结合自己所学专业自选课题,使用不同的检索方法和手段,广泛收集有关资料,每人提交一份文献检索报告,报告(A4纸打印)格式严格按照要求排版可参照模板,禁止抄袭,一经发现取消成绩. <科技文献检索报告>课题 检索说明及要 ...

  • 2013嵌入式系统课程设计报告模板(硬件)
  • 嵌入式系统课程设计报告模板 软 件 学 院 课程设计报告书 课程名称 嵌入式系统 设计题目 模拟电梯控制系统 专业班级 学 号 姓 名 指导教师 年 月 1 设计时间 2 设计目的 (1)利用所学过的知识,初步分析单片机原理及接口技术的能力: (2)进一步掌握硬件电路和软件功能的设计方法: (3)了 ...

  • 1850字职称评审述职报告
  • 1850字职称评审述职报告 尊敬的各位评委.老师,上午好: 我叫xx,来自xx.下面我将从个人基本情况.现岗位教科研业绩成果.代表作情况及其它相关工作等方面进行汇报. 一.个人基本情况 我2002年7月毕业于xxxx专业,获工学学士学位,2007年2010年xxxx攻读在职研究生,2010获计算机应 ...

  • 文献信息检索综合实习报告(工科)
  • <信息检索与利用>实习报告 2013--2014 学年第 1 学期 指导教师 学院 _________________ __ 班级 ______ 姓名 学号 ______ ______ 报告完成日期 ___2013年12月__ 总 成 绩 __________________ __ 一. ...

  • 电子测试工程师2013最新的个人简历范文
  • 电子测试工程师2013最新的个人简历范文 姓 名: 梁先生 性 别: 男 婚姻状况: 已婚 民 族: 汉族 户 籍: 广东-茂名 年 龄: 29 现所在地: 广东-东莞 身 高: 168cm 希望地区: 广东-东莞. 广东-深圳. 广东 希望岗位: 经营/管理类-部门主管 经营/管理类-部门经理 电 ...

  • 2013-2017年中国道路工程机械行业投资前景研究报告
  • - 1 - 2013-2017年中国道路工程机械行业投资前景研究报告 正文目录 第一章 道路工程机械相关概述 1 第一节 道路工程机械基础概述 1 一.道路工程机械特性 1 二.道路工程机械组成 3 三.安防告警系统应用 4 第二节 道路工程机械行业产业链分析 7 一.产业链模型介绍 7 二.安防产 ...

  • 大学生创新训练论文
  • 大学生创新训练论文 摘 要:基于项目的大学生创新训练计划的实践能够提高大学生的创新能力,调动学生的主动性.积极性和创造性. 关键词:大学生创新 缺陷检测 训练计划 为培养学生的创新创业意识,调动学生学习的积极性.主动性和增强其创新创业能力,教育部和地方教育行政部门在"十二五"期间 ...

  • 2013年全国电子设计大赛(c题)报告
  • 旋转倒立摆简易及控制装置(C 题) [本科组] 参赛队号:20130297 2014 年 8 月 30 日 简易旋转倒立摆及控制装置(C 题) 摘要 倒立摆的控制是控制理论研究中的一个经典问题, 是理想的自动控制教学实 验设备,使用它能全方位满足自动控制教学要求,具有模块好和品种多样化等优 点. 本 ...

  • 青软实训报告
  • 一.实习目的 实习的目的在于通过在网络和通信公司.机械工厂.电器工厂或实习基地的生产实践,使学生能将所学的理论和实践相结合,巩固消化所学的知识,拓宽知识面,培养实践操作技能,着重培养自己的实际工作能力,建立产品设计及生产流程等概念,并为后继课教学及毕业环节打下基础,达到对学生进行工程师基本素质的训练 ...