20##年中职骨干教师国家级培训
单片机焊接与调试
实验报告
学员姓名:
专业:电子电器应用与维修
单位:山西省临猗县第一职业中学
时间:20##年7月23日
实验一 熟悉最小单片机组装及keil的使用
实验题目:
用P1口的P1.0~P1.3作为输入,读取开关K0~K3上的数据,用P1.4~P1.7作为输出,控制发光二极管L0~L3。设晶振频率fosc=12MHz,为更好的观察实验现象,要求程序在延时1S后再执行下一条。
实验目的:熟悉最小单片机组装及STC ISP和keil软件的使用,并进行调试。
实验内容:最小单片机的组装与焊接,熟悉实验环境,掌握keil的使用方法;建立工程,编程,调试并运行程序。
基本要求:能够在计算机上使用相应的软件建立一个工程,应用简单指令编写简单的程序进行编译,并在实验板上调试成功。
实验工具:
1、单片机测试平台:PC机,串口线,并口线,单片机开发板。
2、软件:keil51测试软件,STC软件,串口调试软件,定时器/计数器初值测试软件。
3、万用表,尖嘴钳,斜口钳,镊子,剪刀,螺丝刀(十字/一字),电烙铁,烙铁架,松香,焊锡,清洁棉,工具箱。
电路原理:
程序流程:
实现小灯随开关闭合亮的程流程图
实验步骤:
1、 应的元件组装最小单片电路
成果图
2、 进行编程
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:MOV SP,#60H ;主程序开始,设置堆栈SP为60H
MOV A,#0FH
MOV P1,A ;数据送P1口,设置P1.0~P1.3为输入
NEXT:MOV A,P1 ;读K0~K3上的数据
SWAP A ;A的低4位与高4位交换
ORL A,#0FH ;A的高4位不变,低4位为全1
MOV P1,A ;送数据到L0~L3,设置P1.0~P1.3为输入
LCALL DELAY ;调用延时子程序
LJMP NEXT ;循环
实验体会
单片机是一门应用性和实践性非常强的学科,必须要多动手,多做实验。在本次实验过程中,我们从元器件的焊接开始,逐步完成对单片机端口的输入、输出编程控制。总体来说,如何进行正确的软件编程并完成仿真模拟运行是本次实验的重点也是难点,花费时间和精力也最多。
思考问题:1、想想为什么在更改程序前强调要先暂停程序?
2、分析参考程序实现延时功能的原理。
3、如何用最少条数的指令实现闪灯程序?
4、能不能让小灯有更多、更复杂的动作方式。
单片机实验报告
姓名: 学号:
一、 实验实现功能:
1:计数器功能
2:流水灯
二、 具体操作:
1、计数器功能
数码管的动态显示。每按一次K2键计数器加1通过数码管显示出来,计数器可以实现从0计数到9999。
2、流水灯
当在计数器模式下的时候按下K3键时程序进入跑马灯模式,8个小灯轮流点亮每次只点亮一个,间隔时间为50ms。
三、 程序流程图
四、 程序
#include
typedef unsigned char uint8;
typedef unsigned int uint16; //类型定义
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
sbit P2_4 = P2^4; //位声明四个数码管开关
sbit Key2 = P3^2;
sbit Key3 = P3^3; //位声明2个按键K2和K3
sbit Ledk = P2^0 ; //LED 开关
void delay(uint16 i); //延时函数声明
void refresh (); // 数码管刷新函数声明
void liushuideng(); //流水灯函数声明
uint8 number[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//数码管的真值表
uint8 out[4] = {0}; // 数组变量
uint16 counter=0; //用作计数器的变量
uint16 Time_counter=0; //用作定时器的变量
void main() //主函数
{
TMOD = 0x01; //定时器0,工作方式一
TH0 = 0xFC;
TL0 = 0x18; //定时器初值使每次循环为1ms
TR0 = 0; //定时器0开始作
ET0 = 0; // 定时器中断关
EA = 0; // 关中断
while(1) //计数器模式
{
Ledk =1 ; //led开关关
out[0]=number[counter%10]; //取个位
out[1]=number[counter%100/10]; //十位
out[2]=number[counter%1000/100]; //百位
out[3]=number[counter/1000]; //千位
if (!Key2) //计数器加1
{
++counter; //自加
out[0]=number[counter%10]; //取个位
out[1]=number[counter%100/10]; //十位
out[2]=number[counter%1000/100]; //百位
out[3]=number[counter/1000]; //千位
while(!Key2) //等待键盘抬起
refresh(); //刷新数码管
}
refresh(); //刷新数码管
if (!Key3) // 进入跑马灯模式
liushuideng();
}
} //主函数结束
/*******************延时*************/
void delay(uint16 i)
{
uint8 j; // 定义局部变量
for(i;i>0;i--) //循环 i*240 次
for(j=240;j>0;j--);
}
/************数码管刷新******************/
void refresh ()
{
uint8 j;
for (j=0;j<4;j++) //四次循环刷新数码管
{
switch(j)
{
case 0: P2_1=1;P2_2=1;P2_3=1;P2_4=0;break;
case 1: P2_1=1;P2_2=1;P2_3=0;P2_4=1;break;
case 2: P2_1=1;P2_2=0;P2_3=1;P2_4=1;break;
case 3: P2_1=0;P2_2=1;P2_3=1;P2_4=1;break;
//每次循环只选中一个数码管
default:break;
}
P0 = out[j]; // 位选,给数码管送值
delay (20); //延时消抖
}
}
/*************定时器的中断服务函数**************/
void Timer0_Overflow() interrupt 1 //定时器0溢出中断,这个语句1ms执行一次
{
TH0 = 0xFC;
TL0 = 0x18; //每1ms重新赋定时器初值
Time_counter++; //计数,看经过了几个1ms
}
/***********************流水灯子函数****************************/
void liushuideng()
{
uint8 j = 0 ; //定义局部变量
P0 = 0xff; // 小灯全关
TR0 = 1; //定时器1开始计时
EA = 1; //中断开放
ET0 = 1; //定时器0中断开
while(1)
{
Ledk = 0 ; //打开LED开关
P2 = P2|0x1E; //关掉数码管
if(50 == Time_counter) //50个毫秒
{
P0=~(1<
Time_counter = 0; //清零开始下一次循环定时
}
if (8==j) //移完8次再重新移
{
j=0;
}
}
}
目录一了解跑马灯2二AT89C52单片机3三识别与检测元器件4四电路设计41单片机最小应用系统4364彩灯仿真图75彩灯布局图8五…
20##年中职骨干教师国家级培训单片机焊接与调试实验报告学员姓名:专业:电子电器应用与维修单位:山西省临猗县第一职业中学时间:20…
实验一输入输出实验实验目的1体验单片机的程序编写和运行过程2掌握汇编语言的设计编译和运行实验内容用P0端口作输入P1端口做输出程序…
一实验目的1熟练单片机的结构组成及原理2软硬兼施采用硬件电路的焊接搭建和软件的设计调试下载亲自动手对硬件系统加深了解的同时软件编程…
毕业实习报告班级学号姓名指导老师一实习说明实习时间20xx年2月20日至20xx年3月31日实习地点太原理工大学阳泉学院实习性质毕…
福建农林大学计算机与信息学院信息工程类实验报告课程名称:单片机技术姓名:系:电子信息工程系专业:电子信息工程年级:学号:指导教师:…
HEFEIUNIVERSITY单片机实验报告系别电子信息与电气工程系专业班级学号姓名指导老师完成时间实验一构建单片机最小系统和实验…
1福建农林大学计算机与信息学院信息工程类实验报告课程名称姓名系专业年级学号指导教师职称单片机技术詹缓辉电子信息工程系电子信息工程2…
华中科技大学单片机实验报告MCS51系列单片机单片机原理及应用实验根据20xx年电气与电子工程学院单片机实验课程改编专业电气工程及…
实验课程名称自动控制综合实验2》姓名学院自动化学院专业班级学号、班内序号指导教师20##年月单片机部分一、仿真软件的使用以及跑马灯…
测控仪器生产实习报告系别专业班级学生姓名指导教师实训时段一生产实习目的1熟悉手工焊锡的常用工具的使用及其维护与修理2基本掌握手工电…