资源描述
单片机实训报告李博
24
2020年4月19日
文档仅供参考
单片机实训报告
系 别:电子电气工程系
班 级:过化123班
姓 名:李 博
学 号: 04350212
日 期: 5月1日
指导老师:李泉 李红萍
实训地点:综合楼四楼单片机实训室
实训时间:4月27日—5月3日
实训目的:了解80C51/80C52单片机的结构和组成,学会简单的编程,熟练掌握编程软件和仿真软件。
熟记C语言的基本指令。MCS-51单片机应用技术的基础知识(C语言)
实训内容:
一、元器件的认识
Capacitor电容 debugging调试工具 memory ICS存储 connectors连接器 diodes二极管 CRYSTAL晶振 date converters数据转换器 inductors电感 operational运算放大器 optoelectronics光电器件
7SEG-COM-AN(共阳极)-GRN(绿色)
7SEG-COM-CAT(共阴极)-GRN(绿色)
LED-YELLOW发光二极管
speakers sounders喇叭 resistors电阻 switches$Relays开关按钮 SW-SPST 开关 Transistors三极管
二、程序与仿真
1、一盏灯亮
(1)、程序
#include <stdio.h>
#include <reg51.h>
main()
{
int i,k;
for(k=0;k<3;k++);
{
P1=1;
for(i=0;i<10000;i++);
P1=0;
for(i=0;i<10000;i++);
}
}
(2)、在proteus软件上绘制电路图
2、数码管显示0—9
(1) 、程序
#include <reg52.h>
#define uint unsigned int
void delayn50ms(uint n)
{
uint i,j;
for(j=0;j<n;j++)
for(i=0;i<=10000;i++);
}
main( )
{
while (1)
{
P2=0xC0;
delayn50ms(20);
P2=0xF9;
delayn50ms(20);
P2=0xA4;
delayn50ms(20);
P2=0xB0;
delayn50ms(20);
P2=0x99;
delayn50ms(20);
P2=0x92;
delayn50ms(20);
P2=0x82;
delayn50ms(20);
P2=0xF8;
delayn50ms(20);
P2=0x80;
delayn50ms(20);
P2=0x90;
delayn50ms(20);
}
}
(2) 、在proteus软件上绘制电路图
3、数码管01交替
(1) 、程序
#include <reg52.h>
#define uint unsigned int
void delayn50ms(uint n)
{
uint i,j;
for(j=0;j<n;j++)
for(i=0;i<=10000;i++);
}
main( )
{
while (1)
{
P2=0xC0;
delayn50ms(20);
P2=0xF9;
delayn50ms(20);
}
}
(2) 在proteus软件上绘制电路图
4、八盏灯交替闪亮
(1) 、程序
#include"stdio.h"
#include"reg51.h"
main()
{int i,k;
for(i=0;i<10;i++)
{
P1=0x80;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0x40;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0x20;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0x10;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0x08;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0x04;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0x02;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0x01;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
}
for(;;);
}
(2) 、在proteus软件上绘制电路图
5、电子表
(1)、程序
#include <REG51.H>
void Toinit();
void Display(void);
void Key_Enter(void);
void Delay(void);
char nhour=0, nminute=0, nsecond=0, ntimetick=0;
bit bRun=1;
sbit bRunKEY=P0^0;
sbit bclearKEY=P0^1;
sbit bhourKEY=P0^2;
sbit bminuteKEY=P0^3;
sbit bsecondKEY=P0^4;
main()
{
P3=0;
Toinit();
while(1)
{
Display();
Key_Enter();
}
}
void Toinit()
{
TCON=0;
TMOD=0x01;
TL0=- 0%256;
TH0=- 0/256;
ET0=1;
EA=1;
TR0=1;
}
void Toint(void) interrupt 1 using 1
{
TL0=- 0%256;
TH0=- 0/256;
if(bRun==1)
{
ntimetick++;
if(ntimetick>=50)
{
ntimetick=0;
nsecond++;
if( nsecond>=60)
{
nsecond=0;
nminute++;
if(nminute>=60)
{
nminute=0;
nhour++;
if(nhour>=24)
{
nhour=0;
}
}
}
}
}
}
void Display(void)
{
char DispTbL[]={0xC0,0xF9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
P3=0;
P1=DispTbL[nhour/10];
P3=0x01;
Delay();
P3=0;
P1=DispTbL[nhour%10];
P3=0x02;
Delay();
P3=0;
P1=DispTbL[nminute/10];
P3=0x04;
Delay();
P3=0;
P1=DispTbL[nminute%10];
P3=0x08;
Delay();
P3=0;
P1=DispTbL[nsecond/10];
P3=0x10;
Delay();
P3=0;
P1=DispTbL[nsecond%10];
P3=0x20;
Delay();
P3=0;
}
void Delay(void)
{
int i;
for (i=0;i<200;i++)
{
}
}
void Key_Enter()
{
if(bRunKEY==0)
{
Delay();
while(bRunKEY==0);
Delay();
bRun=~bRun;
}
if(bclearKEY==0)
{
Delay();
while(bclearKEY==0);
Delay();
nhour=0;
nminute=0;
nsecond=0;
ntimetick=0;
}
if(bhourKEY==0)
{
Delay();
while(bhourKEY==0);
nhour++;
if(nhour>=24)
nhour=0;
}
if(bminuteKEY==0)
{
Delay();
while(bminuteKEY==0);
nminute++;
if(nminute>=60)
nminute=0;
}
if(bsecondKEY==0)
{
Delay();
while(bsecondKEY==0);
nsecond++;
if(nsecond>=60)
nsecond=0;
}
}
(2)、在proteus软件上绘制电路图
6、九盏灯二二循环点亮
(1)、程序
#include <stdio.h>
#include <reg51.h>
main()
{int i,k;
for(i=0;i<2;i++)
{P1=0XFC;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0XF9;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0XF3;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0XE7;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0XCF;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0X9F;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0X3F;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0X7F;
P3=0XFE;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P1=0XFE;
P3=0XFE;
for(k=0;k<30000;k++);
for(k=0;k<30000;k++);
P3=0XFF;
P1=0XFF;
}
for(;;);
}
(2)、在proteus软件上绘制电路图
实训心得
为期一周的实训结束了,我在这一周中学到了很多在课堂上根本就没有学过的知识,受益匪浅。实训是每个大学生必须拥有的一段经历,它使我们在实践中了解社会,这周我们学习了从来我都没有接触过的c语言,使我明白C语言这门课程光仅仅是听课是远远不够的,上机训练也不容忽视。
经过上机训练,才能够明白自己知识的不足,才能够有的放矢,更加深刻的理解C语言中的知识点。 经过实训,学到了很多以前不懂的知识,特别是遇到了自己当时不知道如何编写的C语言题目如何编写,经过自己的学习和同同学的交流后,试编和改错,最后能够顺利的编写出来,带来的也有成就感。并增加了我们对C语言的兴趣和学好C语言的信心。
与同学们交流的过程中,了解了程序的多种解决方法,知道了不同编写方法有不同的特点。总结C语言实训的几个重要作用:
1.加深对课堂讲授内容的理解
刚刚开始接触c语言我觉得很有趣,但老师讲的越来越无聊,凭着自己的坚持我慢慢稍微懂得了c语言的重要性和语法规则,课堂上要讲授许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C语言这个工具解决实际问题,又必须掌握它。经过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。
学习C语言不能停留在学习它的语法规则,而是利用学到的知识编写C语言程序,解决实际问题。即把C语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有经过上机才能检验自己是否掌握C语言、自己编写的程序是否能够正确地解题。
2.熟悉程序开发环境、学习计算机系统的操作方法
一个C语言程序从新建、编译、检查到运行,全是用英语软件开发的。在所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。经过上机实验,熟练地掌握C语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
3.学习上机调试程序
完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,可是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。
经过这次为数不多的几天计算机实践学习,我们更好的了解了一些关于C语言的知识,经过c语言与汇编的对比我慢慢的懂得了各种规则,符号也是很重要的。
展开阅读全文