单片机实训设计
单片机实训计划
单片机实训计划
一、培训目标
1. 掌握单片机硬件结构及工作原理。
2. 熟练掌握单片机汇编语言和C语言编程。
3. 能够独立完成基于单片机的应用系统设计。
二、课程内容
1. 单片机概述及发展史
2. 单片机硬件结构
3. 单片机汇编语言编程
4. 单片机C语言编程
5. 单片机应用系统设计
三、实训项目
1. LED闪烁控制
2. 键盘检测及显示
3. 定时器及中断控制
4. 液晶显示控制
5. 串行通信控制
6. 步进电机控制
7. 温湿度监测系统
8. 智能家居控制系统
四、教学方式
1. 理论讲授
2. 案例分析
3. 实验操作
4. 项目实训
五、考核方式
1. 平时作业及实验报告
2. 期中理论测试
3. 期末项目设计
六、时间安排
总课时120学时,理论40学时,实训80学时。
通过本实训计划,学员可以全面掌握单片机的基础理论知识和编程技能,并能够将所学知识应用于实际的单片机控制系统中,为将来从事嵌入式系统开发、自动化控制等相关工作打下坚实的基础。
单片机实训报告计时器
一、概述随着科技的不断发展,单片机技术已经成为现代电子设备中不可或缺的核心技术。
为了提高自身对单片机应用技术的理解和掌握,本实训报告以设计一个基于单片机的计时器为例,通过实践操作,深入探究单片机的编程与应用。
二、实训目的1. 熟悉单片机的基本原理和开发环境。
2. 掌握51单片机的编程方法,提高编程能力。
3. 学会使用数码管、按键等外部器件与单片机进行交互。
4. 培养动手实践能力和创新意识。
三、实训内容本实训主要设计一个基于51单片机的计时器,计时范围设置为00.0~99.9秒,精确到0.1秒。
计时器具有以下功能:1. 计时开始:按下开始按钮,计时器开始计时。
2. 计时暂停:按下暂停按钮,计时器暂停计时。
3. 计时复位:按下复位按钮,计时器清零。
4. 显示计时:通过数码管实时显示当前计时值。
四、硬件设计1. 单片机:选用51单片机作为核心控制单元。
2. 数码管:采用共阴型4位数码管,用于显示计时值。
3. 按键:设计三个按键,分别用于控制计时器的开始、暂停和复位功能。
4. 晶振:用于提供单片机的时钟信号。
5. 电阻、电容等:用于搭建电路。
五、软件设计1. 主程序:初始化单片机,配置I/O端口,设置定时器,进入主循环。
2. 计时函数:根据按键输入,控制计时器的开始、暂停和复位功能。
3. 显示函数:将计时值转换为数码管可识别的编码,并通过I/O端口输出。
六、程序实现以下为计时器设计的主要程序代码:```c#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit key_start = P1^0; // 开始按键sbit key_pause = P1^1; // 暂停按键sbit key_reset = P1^2; // 复位按键sbit display_data = P0; // 数码管数据端口sbit display_control = P2; // 数码管控制端口uchar code code_display[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // 数码管编码uint time = 0; // 计时器值void delay(uint t) {while(t--);}void display() {uchar i;for(i = 0; i < 4; i++) {display_control = 0x01 << i; // 选择数码管位display_data = code_display[time / 10]; // 显示十位delay(10000);display_control = 0x01 << i; // 选择数码管位display_data = code_display[time % 10]; // 显示个位 delay(10000);}}void main() {TMOD = 0x01; // 设置定时器模式TH0 = 0xFC; // 设置定时器初值TL0 = 0x18;TR0 = 1; // 启动定时器display_control = 0xFF; // 关闭所有数码管while(1) {if(key_start == 0) { // 开始计时while(key_start == 0);time = 0;while(TF0 == 0);TF0 = 0;}if(key_pause == 0) { // 暂停计时while(key_pause == 0);while(TF0 == 0);TF0 = 0;}if(key_reset == 0) { // 复位计时器while(key_reset == 0);time = 0;}display();}}```七、测试与分析1. 功能测试:经过多次测试,计时器功能稳定可靠,能够实现计时、暂停和复位功能。
(整理)单片机C语言程序设计实训100例
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intvoid DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++)P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。
单片机计时器设计实训报告
一、实训目的通过本次实训,使学生了解单片机计时器的基本原理和设计方法,掌握单片机计时器的硬件设计和软件编程,提高学生动手实践能力和创新能力。
二、实训内容本次实训设计一款基于51单片机的计时器,具备计时、暂停、复位功能,计时范围0-59秒,精确到0.1秒。
三、实训原理1. 计时原理:利用51单片机的定时器/计数器功能,通过定时器中断实现计时功能。
2. 暂停功能:在计时过程中,按下暂停按钮,关闭定时器中断,计时停止。
3. 复位功能:按下复位按钮,将计时器清零,数码管显示00.0。
四、实训步骤1. 硬件设计(1)选择51单片机作为核心控制单元。
(2)选择4位共阴数码管作为显示模块,用于显示计时时间。
(3)选择按键作为控制模块,实现计时、暂停、复位功能。
(4)设计电路原理图,包括单片机、数码管、按键等模块的连接。
2. 软件设计(1)编写程序,初始化定时器/计数器,设置中断时间。
(2)编写中断服务程序,实现计时功能。
(3)编写按键扫描程序,实现计时、暂停、复位功能。
(4)编写数码管显示程序,将计时时间显示在数码管上。
3. 系统调试(1)连接电路,将程序烧录到单片机中。
(2)测试计时功能,确保计时准确。
(3)测试暂停和复位功能,确保功能正常。
(4)测试按键功能,确保按键操作正确。
五、实训结果与分析1. 硬件设计结果根据设计要求,成功设计了一款基于51单片机的计时器,包括单片机、数码管、按键等模块的连接,电路原理图如下:```+3.3V||---[单片机]||---[数码管]||---[按键]|GND```2. 软件设计结果编写了完整的程序,实现了计时、暂停、复位功能,数码管显示计时时间,计时范围0-59秒,精确到0.1秒。
3. 系统调试结果经过调试,计时器功能正常,计时准确,按键操作正确,符合设计要求。
六、实训心得1. 通过本次实训,掌握了单片机计时器的基本原理和设计方法,提高了动手实践能力和创新能力。
2. 学会了如何使用51单片机定时器/计数器功能实现计时功能,了解了中断编程的基本方法。
(完整word版)单片机C语言程序设计实训100例
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第 01 篇基础程序设计01 闪烁的LED/*名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h〉#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x-—){for(i=0;i〈120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include〈reg51。
h〉#include<intrins。
h>#define uchar unsigned char #define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x—-){for(i=0;i〈120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/*名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include〈intrins.h>#define uchar unsigned char #define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x——){for(i=0;i〈120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i〈7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51。
《单片机开发实训》课程标准
《单片机开发实训》课程标准一、课程名称单片机开发实训二、内容简介《单片机开发实训》课程是一门实践课程。
本课程通过设定具有综合性的单片机控制项目,让学生根据具体设计要求进行硬件搭建,程序编写。
通过整个项目的初步设计到实现,学生能够综合掌握微型计算机的基本原理,编程方法,微型计算机的接口技术,简单传感器运用和Keil等常用单片机开发工具的使用方法。
三、课程定位本课程是配合《单片机技术》综合实践环节,与先修课程《单片机技术》的核心知识点相衔接,并将细碎的知识点进行综合运用。
目的是让学生巩固所学知识、加强综合能力、提高软、硬件设计调试方面的能力、启发创新思维的效果。
同时,使学生将相关专业课程知识综合起来,融会贯通,形成系统的概念,从而实现理论与实践相结合。
培养和锻炼学生动手操作和技术创新的能力,为将来进行各种智能化产品的设计开发提供技术准备。
四、课程设计指导思想及原则本课程根据应用电子技术专业的培养目标,以职业能力培养为重点,与企业专家合作进行基于工作过程的课程开发与设计,充分体现职业性、实践性和开放性的要求。
以提升学生综合设计能力为目的,训练学生电子线路的组装调试能力和创新能力,通过查阅资料、选定方案、设计电路、调试软件并下载到芯片运行这一系列训练锻炼学生相关技能,同时培养学生良好的职业道德和社会责任感以及良好的行为习惯和个人品质。
本课程需要在理实一体化教室进行教学。
五、建议课时:该课程实训学时为16学时。
六、课程目标:(一)课程能力目标1、总体目标结合应用电子技术专业人才培养方案,根据课程内容和定位,规范课程教学的基本要求,制定本课程目标。
《单片机开发实训》课程,总目标是使学生具有单片机系统设计的知识与技能、具备较高的职业素质,具有调试单片机系统程序和设计最小单片机系统的能力,能解决程序调试和系统设计中遇到的问题,能胜任单片机产品测试工程师、单片机产品技术支持工程师、单片机软件开发师、单片机硬件开发师和单片机系统设计师等岗位工作。
51单片机开发板pcb设计实训总结
51单片机开发板pcb设计实训总结51单片机开发板是一种常用的嵌入式系统开发工具,广泛应用于电子产品的设计和制造过程中。
在我进行的51单片机开发板pcb设计实训中,我学到了很多知识和技能,也遇到了一些挑战和困难。
在这篇文章中,我将总结我在实训中的经验和收获。
首先,我学会了如何使用Altium Designer软件进行pcb设计。
Altium Designer是一款功能强大的电子设计自动化软件,可以帮助我们完成电路图设计、pcb布局和布线等工作。
通过实际操作,我熟悉了软件的界面和各种功能,并学会了如何绘制电路图和布局pcb板。
其次,我了解了51单片机的基本原理和工作方式。
51单片机是一种经典的8位单片机,具有丰富的外设和强大的计算能力。
在实训中,我学习了51单片机的内部结构和寄存器的使用方法,掌握了51单片机的编程技巧和调试方法。
在实训过程中,我遇到了一些挑战和困难。
首先是电路图设计的复杂性。
由于51单片机开发板涉及到多个外设和接口,电路图设计非常复杂。
我需要仔细阅读相关的资料和手册,理解各个元件的功能和连接方式,确保电路图的正确性和可靠性。
其次是pcb布局和布线的困难。
在pcb设计中,布局和布线是非常重要的环节。
合理的布局可以提高电路的稳定性和抗干扰能力,而合理的布线可以减小信号的传输延迟和功耗。
在实训中,我需要考虑各个元件的位置和连接方式,合理规划电路板的布局和布线,确保信号的稳定和可靠。
最后,我通过实训获得了一些宝贵的经验和收获。
首先是团队合作的重要性。
在实训中,我和我的同学们一起合作完成了pcb设计的任务。
我们相互协作,互相帮助,共同解决问题,最终完成了一个优秀的设计。
其次是耐心和细心的重要性。
在pcb设计中,任何一个小的错误都可能导致整个电路的失效。
因此,我需要耐心和细心地检查每一个元件和连接,确保没有错误和疏漏。
通过这次实训,我不仅学到了专业知识和技能,还培养了团队合作和解决问题的能力。
单片机综合实训教案
单片机综合实训教案一、教学目标1. 了解单片机的基本概念、结构和原理。
2. 掌握单片机的编程方法和应用技巧。
3. 能够独立完成单片机系统的设计和调试。
二、教学内容1. 单片机概述单片机的定义和发展历程单片机的结构和组成部分2. 单片机编程基础单片机的指令系统编程语言和开发工具程序结构和编程规范3. 单片机应用系统设计系统需求分析硬件选型和电路设计软件设计和编程4. 单片机系统调试与优化调试方法和工具常见问题和解决方案系统性能优化技巧5. 单片机应用案例解析温度控制器设计智能家居系统设计控制系统设计三、教学方法1. 讲授法:讲解单片机的基本概念、原理和编程方法。
2. 实践法:动手操作单片机开发板,进行编程和系统设计。
3. 案例分析法:分析实际应用案例,理解单片机的应用场景。
4. 讨论法:分组讨论,解决实际问题和难点。
四、教学资源1. 教材:单片机原理与应用2. 实验设备:单片机开发板、编程器、调试器等3. 软件工具:Keil、MPLAB等编程软件4. 在线资源:相关教程、案例和答疑论坛五、教学评价1. 平时成绩:考察学生的出勤、提问和讨论情况。
2. 实验报告:评估学生的实践操作能力和编程水平。
3. 课程设计:评价学生的系统设计和调试能力。
4. 期末考试:测试学生对单片机知识的掌握程度。
六、教学安排1. 课时:共计32课时,其中理论讲授16课时,实验操作16课时。
2. 教学计划:第1-4课时:单片机概述及结构原理第5-8课时:单片机编程基础第9-12课时:单片机应用系统设计第13-16课时:单片机系统调试与优化第17-20课时:单片机应用案例解析第21-24课时:实践操作与实验第25-28课时:课程设计第29-32课时:期末复习与考试七、教学重点与难点1. 教学重点:单片机的基本概念、结构和原理。
单片机的编程方法和应用技巧。
单片机系统的设计、调试与优化。
2. 教学难点:单片机指令系统的理解与应用。
硬件电路设计与故障排除。
单片机c语言程序设计实训100例——基于arduino+proteus仿真
单片机c语言程序设计实训100例——基于arduino+proteus仿真单片机C语言程序设计是电子信息类专业中的一门重要课程,通过学习这门课程可以掌握基本的嵌入式系统开发技术。
为了提高学生对于单片机编程能力和实践操作能力的培养,通常会进行相关实训。
在这篇文章中,我将介绍一个基于Arduino+Proteus仿真环境下的100个例题来帮助大家更好地理解和掌握单片机C语言程序设计。
每个例题都包含详细说明、代码示例以及相应功能模块在Proteus上面运行效果图等内容。
1. 闪烁LED灯:使用延时函数使得连接到Arduino引脚13上面的LED灯周期性地闪烁。
2. 控制舵机角度:根据输入信号改变舵机转动角度,并且利用串口监视器显示当前角度值。
3. 温湿度传感器读取数据并显示:通过DHT11温湿度传感器获取周围环境温湿度数值,并将其显示出来。
4. 数码管计数器: 使用74HC595芯片驱动四位共阳极数字管,在7段数码管上循环从0-9递增或者递减展示数字5. 蜂鸣器播放音调: 通过PWM信号控制蜂鸣器发出不同频率的声音。
6. 红外遥控LED灯: 使用红外接收模块读取来自红外遥控器发送的指令,并根据指令点亮或者熄灭连接到Arduino引脚上面的LED灯。
这些例题涵盖了单片机C语言程序设计中常见且基础性较强的内容,可以帮助学生逐步提高编程能力和实践操作技巧。
在Proteus仿真环境下进行实验也有以下几个优点:1. 安全可靠:在环境下进行实验,不存在电路元件损坏、线路错误等问题,保证了安全性和稳定性。
2. 节约成本:无需购买昂贵而易损耗品(如传感器、舵机等),只需要使用软件即可完成相关功能测试。
3. 方便快速:Proteus具备图形化界面以及大量现成组建库文件, 只要简单地将所需元素放入画布并连好线就可以开始调试代码4.多样化场景设置: Proteus支持各种设备与芯片之间相互联动关系搭配总结起来说,“100例——基于arduino+proteus仿真”这个实训项目是一个非常有价值的单片机C语言程序设计学习资源。
单片机实训教案
单片机实训教案单片机是嵌入式系统中最基础的芯片,也是嵌入式系统所涉及的最主要的技术之一、单片机实训教案旨在通过理论和实践的结合,使学生掌握单片机的基本原理、组成结构和编程方法,并能够独立完成一些简单的单片机应用设计与调试。
一、教学目标:1.理解单片机的基本原理和组成结构;2.掌握单片机编程方法和技巧;3.能够设计、调试简单的单片机应用程序;4.具备一定的创新思维和实践能力。
二、教学内容:1.单片机基础概念:介绍单片机的基本原理、发展历程、应用领域和市场需求;2.单片机硬件结构:介绍单片机的体系结构、存储器结构、输入输出端口、定时器、串行通信口等基本硬件构成;3.单片机编程技巧:介绍汇编语言、C语言、单片机流程控制等编程技巧;4.单片机应用设计:结合实际应用场景,介绍单片机的控制、测量、通信、显示等应用设计方法;5.单片机调试技巧:介绍单片机调试的基本流程、方法和技巧,包括单步调试、断点调试、仿真调试等。
三、教学方法:1.理论讲授结合实践操作;2.小组合作学习、探究式学习;3.项目式教学、案例分析、问题导向学习;4.讨论交流、互动授课、评价反馈。
四、教学内容设计:五、评价方法:评价方式应该符合实际需求和学生的特点。
可采取口头报告、验收资料、实际应用效果等相关方法。
针对不同学生提供不同的评价方式,避免评价体系单调性。
通过评价及时掌握学生的情况,并采纳学生的反馈和意见,进一步提高实训教学的效果。
六、总结:本教案融合了理论、实践、思考和反思的课程设计模式。
从单片机的基础知识到单片机应用程序的设计和调试,每个环节都贯穿实践环节的举措,使得学生可以在独立完成实际任务中,培养解决问题的能力和应用能力。
同时,在教学设计中结合了多元评价体系,科学、客观且有针对性地评估学生的实践能力,旨在帮助学生建立自信、增强实用技能和创新思维。
单片机实训计算器报告
一、引言随着科技的飞速发展,单片机技术作为嵌入式系统的重要组成部分,已经在各个领域得到了广泛的应用。
为了提高学生对单片机技术的理解和实践能力,我们开展了单片机实训课程。
本次实训报告以设计一个简易计算器为例,详细介绍单片机在计算器中的应用及其设计过程。
二、实训目的1. 熟悉单片机的基本原理和编程方法。
2. 掌握单片机外围设备的接口技术。
3. 培养学生的实际动手能力和创新意识。
三、实训内容1. 设计要求本次实训要求设计一个基于单片机的简易计算器,能够实现以下功能:(1)加、减、乘、除四则运算;(2)结果显示在LCD1602显示屏上;(3)具有简单的错误处理功能。
2. 系统组成本计算器系统主要由以下几部分组成:(1)AT89C51单片机:作为系统的核心控制器,负责控制整个计算器的运行;(2)LCD1602显示屏:用于显示输入的数字、运算符和计算结果;(3)矩阵键盘:用于输入数字和运算符;(4)按键:用于控制计算器的开关、清零和退出等功能。
3. 硬件设计(1)AT89C51单片机:选用AT89C51单片机作为核心控制器,具有丰富的I/O端口和片内资源,可以满足计算器的需求。
(2)LCD1602显示屏:通过单片机的PORTD端口与LCD1602显示屏相连,实现数据显示功能。
(3)矩阵键盘:采用4x4矩阵键盘,将行线连接到单片机的PB0-PB3端口,列线连接到PB4-PB7端口。
(4)按键:设置三个按键,分别用于控制计算器的开关、清零和退出功能。
4. 软件设计(1)初始化:首先对单片机的I/O端口、LCD1602显示屏和矩阵键盘进行初始化。
(2)键盘扫描:通过扫描矩阵键盘,获取用户输入的数字和运算符。
(3)运算逻辑处理:根据用户输入的数字和运算符,进行相应的运算。
(4)结果显示:将计算结果显示在LCD1602显示屏上。
(5)错误处理:当输入错误或发生溢出时,显示错误信息。
四、实训过程1. 硬件电路搭建:根据设计要求,将AT89C51单片机、LCD1602显示屏、矩阵键盘和按键连接到一起,搭建计算器的硬件电路。
单片机程序设计实训报告
一、实训目的通过本次单片机程序设计实训,使学生掌握单片机程序设计的基本方法和步骤,提高学生的实际操作能力和编程技巧,培养学生在电子工程领域中的实践能力。
同时,通过实训加深对单片机原理、指令系统、接口技术等方面的理解,为后续单片机技术课程的学习打下坚实基础。
二、实训内容1. 实训环境本次实训采用Keil C51软件进行单片机程序设计,仿真平台为Proteus。
2. 实训任务(1)熟悉单片机硬件结构及指令系统;(2)掌握单片机C语言编程技巧;(3)熟练运用Proteus进行仿真实验;(4)设计并实现以下功能:①控制LED灯闪烁;②实现按键输入,控制LED灯点亮或熄灭;③实现定时器中断,控制LED灯以一定频率闪烁。
三、实训过程1. 熟悉单片机硬件结构及指令系统在实训过程中,我们首先学习了单片机的硬件结构,包括CPU、存储器、输入/输出接口等。
同时,我们掌握了8051单片机的指令系统,包括数据传送、算术运算、逻辑运算、控制转移等指令。
2. 掌握单片机C语言编程技巧在实训过程中,我们学习了单片机C语言的语法规则,掌握了变量声明、数据类型、运算符、函数等基本概念。
通过编写简单的程序,我们熟悉了单片机C语言编程的基本技巧。
3. 熟练运用Proteus进行仿真实验Proteus是一款功能强大的仿真软件,能够模拟单片机的硬件电路和程序运行。
在实训过程中,我们学会了如何使用Proteus创建电路图、添加元器件、设置仿真参数等操作。
通过仿真实验,我们验证了程序的正确性,提高了编程能力。
4. 设计并实现以下功能(1)控制LED灯闪烁设计思路:使用定时器中断,每隔一定时间改变LED灯的状态。
程序代码:```c#include <reg51.h>void Timer0_Init() {TMOD = 0x01; // 设置定时器模式为模式1TH0 = 0xFC; // 设置定时器初值TL0 = 0x18; // 设置定时器初值ET0 = 1; // 使能定时器0中断EA = 1; // 使能全局中断}void main() {P1 = 0xFF; // 初始化LED灯状态Timer0_Init(); // 初始化定时器while (1) {// 主循环}}void Timer0_ISR() interrupt 1 {TH0 = 0xFC; // 重新装载定时器初值TL0 = 0x18; // 重新装载定时器初值P1 ^= 0x01; // 切换LED灯状态}```(2)实现按键输入,控制LED灯点亮或熄灭设计思路:使用外部中断,检测按键状态,控制LED灯点亮或熄灭。
项目9单片机应用技能实训(C语言)教案
单片机应用技能实训(C语言)教案—项目9 项目9 点阵LED屏显示电路制作任务1 项目相关知识学习一、案头二、教学实施过程讲授新课一、LED点阵显示模块的结构、工作原理及显示方式1、LED点阵显示模块结构及工作原理LED点阵显示模块是一种能显示图形、字符和汉字的显示器件。
一个LED点阵显示模块一般由8×8个LED发光二极管方阵组成,其外形如图9-2所示。
8×8LED点阵显示模块原理结构如图9-3所示。
我们可以把每一个LED发光点理解为一个像素,8×8点阵显示屏可以显示在64像素范围内的任何图形。
图9-3 图9-22、LED点阵显示模块的显示方式LED点阵显示模块的显示方法必须采用动态扫描方式,一般采用逐行扫描。
以图9-3所示为例,一幅图形的每行由一个8位二进制数据构成,将这些数据称为显示数据点阵码。
比如显示字符“O”的点阵码为:3CH、42H、42H、42H、42H、42H、42H、3CH(如图9-4所示)。
一般显示汉字采用的是16×16的点阵模式或者更多,但是原理是相同的。
用多媒体展示图9-2、图9-3。
对照图9-3介绍其工作原理。
细致说明点阵码的含义。
图9-43、LED显示模块与单片机的连接一个8×8LED显示模块与单片机的连接需要两个并行端口,一个端口接行线,另一个端口接列线。
用两个8×8LED 显示模块可构成8×16点阵,则要有三个并行端口与其相连,一个并行端口接8位行线,另两个并行端口与16位列线相连。
当并行端口不够用时,可用项目十中介绍的并行I/O端口扩展方法进行端口的扩展。
图9-5是单片机与两个8×8LED显示模块的接线示意图。
图9-5重点说明连接原理及实际使用时的注意事项。
任务2 LED屏显示电路硬件、软件设计一、案头二、教学实施过程导入在学习了LED屏的相关知识后,我们利用所学知识进行项目硬件电路设计。
单片机实训模拟量输入输出设计与实现
单片机可以通过编程实现各种数字和模拟信号 的处理和控制,具有灵活性和可编程性。
单片机的应用领域
智能仪表
01
单片机可以用于实现各种仪表的智能化,如温度计、压力计、
流量计等。
工业自动化
02
单片机可以用于控制各种工业设备的运行,如电机、阀门、灯
光等。
智能家居
03
单片机可以用于实现家居智能化,如智能照明、智能安防、智
能家电等。
单片机的发展历程
单片机的起源
单片机的发展可以追溯到20世纪70年代,当时出现了一 些简单的集成电路芯片,集成了少量的逻辑门电路,可以 用于简单的控制和计算。
8位单片机的普及
8位单片机是目前应用最广泛的单片机类型,它们具有丰 富的外设接口和强大的计算能力,可以满足各种应用需求 。
02 03
单片机
对数字信号进行处理和控制。
显示模块
将液位值实时显示出来,并设定液位 上下限,当液位超过或低于设定值时, 触发报警。
05
04
执行机构
根据单片机输出的控制信号,驱动电 动阀或水泵等执行机构,调节液位高 度。
06 总结与展望
单片机在模拟量输入输出方面的优势与局限性
低成本
单片机价格相对较低,适合于需要大量使用模拟量输入输出 功能的项目。
根据单片机型号和需求,设计合适的输出驱动电 路,包括功率放大、信号调制等部分。
数字模拟转换
利用DAC(数模转换器)将数字信号转换为模拟 信号,满足输出信号的精度和稳定性要求。
输出控制与调节
将转换后的模拟信号进行控制和调节,实现与外 部设备的通信和控制。
单片机门铃设计实训报告
一、实训背景随着科技的不断发展,单片机技术已经广泛应用于各个领域。
为了提高学生的实践能力和创新意识,我们选择了单片机门铃设计作为实训项目。
本项目旨在让学生通过实际操作,掌握单片机的基本原理和应用,提高动手能力和工程实践能力。
二、实训目标1. 熟悉单片机的基本原理和结构;2. 掌握51单片机的编程方法;3. 学习数字电路的基本知识和应用;4. 培养团队协作和工程实践能力;5. 设计并实现一个基于单片机的门铃系统。
三、实训内容1. 硬件设计(1)单片机选择:本设计采用STC89C51单片机作为核心控制单元。
(2)电路设计:主要包括单片机最小系统、按键模块、蜂鸣器模块、数码管显示模块等。
(3)电路原理图:利用Protel软件绘制电路原理图,确保电路连接正确。
2. 软件设计(1)编程语言:使用C语言进行单片机编程。
(2)程序设计:主要包括初始化程序、按键扫描程序、蜂鸣器控制程序、数码管显示程序等。
(3)程序调试:使用Keil软件进行程序编译和调试,确保程序正常运行。
3. 系统功能(1)按键控制:通过按键实现门铃音量的增减和音乐播放。
(2)蜂鸣器播放:蜂鸣器根据程序控制发出不同音调的声音。
(3)数码管显示:数码管显示当前音量和音乐编号。
(4)音乐播放:预设多种音乐,通过按键切换播放。
四、实训过程1. 前期准备(1)查阅相关资料,了解单片机的基本原理和应用。
(2)学习Protel软件和Keil软件的使用方法。
(3)确定项目实施方案,明确分工。
2. 硬件设计(1)根据电路原理图,购买所需元器件。
(2)按照电路原理图,焊接电路板。
(3)检查电路连接是否正确,确保电路功能正常。
3. 软件设计(1)使用C语言编写程序,实现各项功能。
(2)使用Keil软件进行程序编译和调试。
(3)检查程序运行是否稳定,确保系统功能完善。
4. 系统集成(1)将硬件和软件集成到一起,进行系统测试。
(2)检查系统功能是否满足设计要求。
(3)修改和完善系统,提高系统性能。
单片机实训报告抢答器
一、实训目的1. 熟悉单片机的编程环境和调试方法。
2. 掌握单片机外围电路的设计与连接。
3. 学会使用单片机实现抢答器的功能。
4. 提高实际动手能力和解决问题的能力。
二、实训背景随着电子技术的不断发展,单片机在各个领域得到了广泛应用。
抢答器作为一种常见的电子设备,在竞赛、培训等场合中发挥着重要作用。
本实训项目旨在通过设计一款基于单片机的抢答器,使学生掌握单片机的编程、调试及外围电路设计等方面的知识。
三、实训内容1. 硬件设计(1)主控芯片:选用AT89C52单片机作为主控芯片。
(2)按键模块:设计6个按键K0~K5,分别对应6个选手。
(3)显示模块:采用LED数码管显示选手编号。
(4)声音模块:采用蜂鸣器发出报警声响。
(5)其他电路:电源电路、复位电路等。
2. 软件设计(1)程序编写:使用C语言编写单片机程序,实现抢答器功能。
(2)程序调试:使用Keil uVision5软件进行程序编译、调试。
3. 抢答器功能(1)选手抢答:6个选手分别按动对应的按键,抢答器会根据按键优先级显示选手编号,并发出报警声响。
(2)锁存功能:优先抢答的选手编号会一直保持,直至主持人清除系统。
(3)显示功能:LED数码管显示抢答选手的编号。
(4)报警功能:蜂鸣器发出报警声响。
四、实训步骤1. 硬件搭建(1)将AT89C52单片机、按键、LED数码管、蜂鸣器等元器件焊接在电路板上。
(2)连接电源电路和复位电路。
2. 程序编写(1)在Keil uVision5软件中创建新工程,并添加AT89C52单片机头文件。
(2)编写按键扫描程序,实现按键的识别和优先级判断。
(3)编写LED数码管显示程序,显示抢答选手的编号。
(4)编写蜂鸣器报警程序,实现报警声响。
(5)编写主函数,实现抢答器的整体功能。
3. 程序调试(1)在Keil uVision5软件中编译程序,生成HEX文件。
(2)使用Proteus仿真软件进行仿真,观察程序运行效果。
单片机设计实训小结报告
一、实训背景随着科技的飞速发展,单片机作为一种低功耗、高性能的微控制器,在各个领域得到了广泛应用。
为了提高学生对单片机原理及应用的了解,增强动手实践能力,我们开展了单片机设计实训课程。
本次实训以单片机STC89C52RC为核心,通过实践操作,让学生掌握单片机的基本原理、编程方法以及在实际应用中的调试技巧。
二、实训目标1. 熟悉单片机的硬件结构,了解其工作原理;2. 掌握Keil和Proteus软件的使用,进行程序编写和仿真调试;3. 学会使用单片机进行基本的外设控制,如LED灯、数码管、按键等;4. 培养学生独立思考、分析问题和解决问题的能力。
三、实训内容1. 单片机硬件知识学习:了解单片机的内部结构、引脚功能、工作原理等;2. 程序设计基础:学习Keil软件的使用,掌握C语言编程方法;3. 仿真调试:利用Proteus软件对程序进行仿真调试,确保程序正确;4. 外设控制:实现LED灯、数码管、按键等外设的控制;5. 项目实践:设计并实现一个实际应用项目,如交通灯控制系统、秒表等。
四、实训过程1. 理论学习:通过课堂讲解、参考资料等方式,掌握单片机的基本原理和编程方法;2. 硬件搭建:根据实训要求,搭建单片机实验平台,连接LED灯、数码管、按键等外设;3. 程序编写:在Keil软件中编写程序,实现所需功能;4. 仿真调试:在Proteus软件中仿真调试程序,确保程序正确;5. 项目实践:根据实训要求,设计并实现一个实际应用项目,并进行调试和优化。
五、实训成果1. 熟悉单片机的硬件结构和工作原理;2. 掌握Keil和Proteus软件的使用,能够进行程序编写和仿真调试;3. 学会使用单片机进行基本的外设控制;4. 培养了独立思考、分析问题和解决问题的能力;5. 设计并实现了一个实际应用项目,如交通灯控制系统。
六、实训体会1. 通过本次实训,我对单片机有了更加深入的了解,掌握了单片机的编程方法和调试技巧;2. 实训过程中,我学会了如何查阅资料、分析问题、解决问题,提高了自己的实践能力;3. 在项目实践过程中,我体会到团队合作的重要性,学会了与他人沟通交流,共同完成任务;4. 通过本次实训,我对单片机应用领域产生了浓厚的兴趣,为今后的学习和工作打下了坚实的基础。
单片机彩灯设计实训报告
一、引言随着科技的不断发展,单片机技术已经广泛应用于各个领域。
单片机以其体积小、功耗低、成本低、可靠性高等优点,在电子设计中占有重要地位。
本实训报告主要介绍了单片机彩灯设计的过程,包括硬件设计、软件设计、调试与测试等环节。
二、硬件设计1. 单片机选型本次实训选用AT89C51单片机作为控制核心。
AT89C51是一款经典的51系列单片机,具有丰富的片上资源,包括定时器、串口、中断等,能够满足彩灯设计的需求。
2. 彩灯组件选型根据设计需求,本次实训选用了RGB彩灯作为主要组件。
RGB彩灯具有红、绿、蓝三种颜色,可以组合出多种颜色,满足不同场合的需求。
3. 驱动电路设计由于单片机的IO端口输出电流有限,无法直接驱动RGB彩灯,因此需要设计驱动电路。
驱动电路主要包括LED驱动芯片和电流限流电阻。
4. 控制电路设计控制电路负责接收单片机的控制信号,实现对彩灯的颜色、亮度、闪烁频率等参数的控制。
控制电路主要包括单片机、驱动芯片、按键、电阻等元器件。
三、软件设计1. 软件框架本实训软件采用模块化设计,主要分为以下模块:(1)初始化模块:初始化单片机IO端口、定时器等资源。
(2)彩灯控制模块:根据用户需求,实现彩灯的颜色、亮度、闪烁频率等参数的控制。
(3)按键处理模块:检测按键状态,实现彩灯模式的切换。
(4)定时器中断模块:实现彩灯的定时控制。
2. 软件实现(1)初始化模块初始化模块主要负责设置单片机IO端口为输出模式,初始化定时器等资源。
具体代码如下:```void Init(){P1 = 0xFF; // 设置P1端口为输出模式TMOD = 0x01; // 设置定时器模式TH0 = 0xFC; // 设置定时器初值TL0 = 0x18;ET0 = 1; // 开启定时器0中断EA = 1; // 开启全局中断}```(2)彩灯控制模块彩灯控制模块根据用户需求,实现彩灯的颜色、亮度、闪烁频率等参数的控制。
具体代码如下:```void LightControl(unsigned char color, unsigned char brightness, unsigned char frequency){switch(color){case RED:P1 = 0x01 << brightness; // 设置红灯亮度break;case GREEN:P1 = 0x02 << brightness; // 设置绿灯亮度break;case BLUE:P1 = 0x04 << brightness; // 设置蓝灯亮度break;case WHITE:P1 = (0x01 << brightness) | (0x02 << brightness) | (0x04 << brightness); // 设置白灯亮度break;}delay(frequency); // 设置彩灯闪烁频率}```(3)按键处理模块按键处理模块负责检测按键状态,实现彩灯模式的切换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机的数字电压表设计报告作者王兆奇学号1016407003年级专业 10电子信息工程一、设计要求1利用单片机AT89S51 芯片与ADC0809 芯片以及74HC245芯片设计一个数字电压表2能够测量0―5V 之间的直流电压3能连续,稳定的显示所测电压4误差要求小于0.025能够脱机稳定工作二、器件清单:1 . AT89S51 芯片 1块2 . ADC0809 芯片 1块3 . 74HC245 芯片 1块4 . 数码管 1个5 . 12MHZ 晶振 1个6 . 30pF 电容 2个7 . 10uF 电解电容 1个8 . 复位电容 1个9 . 510Ω电阻 8个10. 10KΩ电阻 1个11. 导线若干三、元件介绍1.AT89S51AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash 存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。
主要性能特点1、4k Bytes Flash片内程序存储器;2、128 bytes的随机存取数据存储器(RAM);3、32个外部双向输入/输出(I/O)口;4、2个中断优先级、2层中断嵌套中断;5、6个中断源;6、2个16位可编程定时器/计数器;7、2个全双工串行通信口;8、看门狗(WDT)电路;9、片内振荡器和时钟电路;10、与MCS-51兼容;11、全静态工作:0Hz-33MHz;12、三级程序存储器保密锁定;13、可编程串行通道;14、低功耗的闲置和掉电模式2.ADC0809ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
是目前国内应用最广泛的8位通用A/D芯片主要性能特点1)8路输入通道,8位A/D转换器,即分辨率为8位。
2)具有转换起停控制端。
3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)4)单个+5V电源供电5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度7)低功耗,约15mW。
四、程序设计本设计采用AT89S51 单片机配合 ADC0809 模/数转换器构成一个简易的数字电压表。
该电路通过 ADC0809 芯片采样输入口 AI0 输入的0~5V 的模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道D0~D7 传送给AT89S51 芯片的F0口。
AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码,并通过P1 口传送给数码管。
同时它还通过其三位I/O 口 P3.0、P3.1、P3.2 产生位片选信号,控制数码管的亮灭。
另外,AT89S51 还控制着 ADC0809 的工作。
其ALE管脚为 ADC0809提供了 1MHZ 工作的时钟脉冲;P2.3 控制 ADC0809 的地址锁存端(ALE); P2.4 控制 ADC0809 的启动端(START); P2.5 控制 ADC0809 的输出允许端(OE); P3.7 控制 ADC0809 的转换结束信号(EOC)。
五、实验原理图六、程序设计1、主程序设计由于ADC0809 在进行A/D转换时需要有CKL 信号,而此时的 ADC0809 的CLK 是连接在 AT89C51 单片机的30管脚,也就是要求从30管脚输出CLK 信号供ADC0809 使用。
因此产生 CLK 信号的方法就等于从软件产生。
电压表系统有主程序,A/D 转换子程序和显示子程序,如下流程1-2所示:开始初始化调用A/D转化程序调用数据处理程序调用显示程序图1-2主程序流程图2、A/D 转换子程序启动 ADC0809 对模拟量输入信号进行转换,通过判断 EOC(P3.7)来确定转换是否完成,若EOC 为0则继续等待;若 EOC为1,则把OE 置位,将转换完成的数据存储到 70H 中。
程序流程图如图1-3 所示3、数据处理子程序数据处理子程序主要根据标度变换公式1-1,把0~255十进制数转换为0.00~5.00V. A X =A 0+(A m -A 0)(N X -N 0/N m -N 0) (1-1) Ax: 模拟测量值; A 0: 模拟输入最小值; A m : 模拟输入最大值; N X : 模数转换后的值;N 0:模/数转换后的最小值; N m :模/数转换后的最大值 。
在本设计中,根据要求知:A 0=0V ,A m =5V ,N 0=0,N m =255,则公式1-1可化简为: A X =A 0+(A m -A 0)(N X -N 0/N m -N 0)=5·N X /255=N X /51 (1-2) 程序流程图如图1-4所示:开始A/D 转换结束? (P3.7=1?)启动A/D 转化器初始化是P2.5置位,允许输出 将转换得到的数据存储结 束开始图1-3 A/D 转换程序流程图4、显示子程序显示子程序采用动态扫描法实现三位数码管的数值显示。
测量所得的A/D 转换数据放在70H 内存单元中,测量数据在显示时需转换成10进制BCD 码放在78H ~7AH 单元中。
寄存器R1用作显示数据地址指针。
从70H 中取数据,除以51得到个 位,存放在70H 中,余数移入A余数与51的一半即1AH 借位相 减比较,以便四舍五入,利用P0开始余数×10,再除以51 商放入A 中P0=1?是四舍否数据调整,相当于五入 A 放入79H 中,得到十分位再将余数放入A 中,进行除51操作P0=1?是否A = A + 5四舍A 放入7AH 中,得到百分位结 束图1-4 数据处理子程序流程图程序流程图如1-5所示:开始初始化R1=78H,P1置高,P2置低R1 → A查表取得相应段码输出显示置位P1.7点亮小数点R1=R1+1R1→ A查表取得相应段码输出显示R1=R1+1R1→ A查表取得相应段码输出显示结束图1-5 显示子程序流程图七程序代码ORG 0000HORG 0030H;初始化参数START: CLR ASETB P3.7 ;初始化EOCCLR P3.0 ;初始化LED位选,全不选中。
CLR P3.1CLR P3.2MOV P2,A ;初始化P2口,清除对ADC0809的控制信号。
MOV 70H, A ;初始化数据采样后存储空间。
MOV 78H, A ;初始化数据处理后3位有效数字的存储空间 MOV 79H, AMOV 7AH, AMOV A ,#0FFH ;初始化P0,P1口,写入高电平MOV P0, AMOV P1, A;主程序MAIN: LCALL AD_SUB ;调用A/D转换子程序,开始采样并转换。
LCALL TURN_SUB ;调用数码转换子程序,将采样转换来的0-255转换成意义对应的;0.00-5.00LCALL DISP_SUB ;调用显示子程序。
LJMP MAIN;A/D转换子程序AD_SUB: CLR AMOV P2, A ;初始化P2口,清除对ADC0809的控制信号。
MOV R0,#70HLCALL AD_SUB ;调用采样子程序WAIT: JB P3.7,DATASAVE ;判断采样转换是否完毕,完毕则跳转到DATASAVE进行存储。
AJMP WAIT ;否则继续等待。
;启动采样,送脉冲时序AD_SUB: SETB P2.3 ;ALE 脉冲时序NOPNOPSETB P2.4 ;START脉冲时序NOPNOPCLR P2.4NOPNOPRET;采样转换的数据存储DATASAVE: SETB P2.5 ;置位OE端,允许ADC0809输出数据 MOV A , P0 ;将转换的数据存储到70H中MOV @R0,ACLR P2.5CLR A ;初始化P0,P1,P2口MOV P2 ,AMOV A,#0FFHMOV P0 ,AMOV P1 ,ARET;将0-255转换为0.00-5.00TURN_SUB: MOV A ,@R0MOV A ,#51DIV ABMOV 78H, A ;以上这一段是整数部分放入78HMOV A , B ;余数部分放入ACLR F0SUBB A ,#1AH ;余数和51的一半即1AH比较,以便四舍五入MOV F0 , CMOV A ,#10MUL AB ;余数乘以10,以便再除以51MOV B , #51DIV ABJB F0,LOOP1 ;判断四舍五入,跳到LLOP1是“四舍”ADD A ,#5 ;这是“五入”LOOP1: MOV 79H,A ;十分位MOV A ,BCLR F0SUBB A ,#1AHMOV F0 ,CMOV A ,#10MUL ABMOV B , #51DIV ABJB F0,LOOP2ADD A ,#5LOOP2: MOV 7AH, A ;百分位RET;显示子程序DISP_SUB: MOV R1 ,#78H ;R1辅助寄存器,用于存放要显示的数据的地址CLR AMOV P1,#0FFH ;初始化P1,P2口ANL P2 ,ALCALL PLAY ;调用显示位码子程序CLR P1.7 ;显示最高位后的小数点SETB P3.2 ;选中最高位LED 数码管LCALL DELAY ;调用延迟子程序CLR P3.2 ;取消最高位位选INC R1 ;提取第二位有效数字的数据地址LCALL PLAY ;调用显示位码子程序SETB P3.1 ;选中第二位LED 数码管LCALL DELAY ;调用延迟子程序CLR P3.1 ;取消第二位位选INC R1 ;提取最低位有效数字的数据地址LCALL PLAY ;调用显示位码子程序SETB P3.0 ;选中最低位LED 数码管LCALL DELAY ;调用延迟子程序CLR P3.0 ;取消最低位位选RET;位码显示PLAY: MOV A,@R1 ;送偏移量MOV DPTR,#TAB ;送表首地址MOVC A,@A+DPTR ;查表得出相应LED段码MOV P1, A ;输出显示RET;延时程序DELAY: MOV R6,#10HDL1:MOV R7,#10HDL2:DJNZ R7,DL2DJNZ R6,DL1RET;0—9段码TAB: DB 0C0H , 0F9H , 0A4H , 0B0H , 99H , 92H , 82H , 0F8H , 80H , 90HEND八调试过程及问题解决方法1首页接入仿真器进行仿真测试,能够正常显示,将烧制好程序的AT89S51芯片后插于电路脱机无法正常工作没有任何数值显示,重新根据电路图检查电路是否有焊接错误,核对后没有发现任何错误,于是重新焊接了一个晶振电路,再次进行测量后可以正常工作。