山东大学单片机实验

合集下载

基于STM32单片机的智能绿篱修剪机的设计

基于STM32单片机的智能绿篱修剪机的设计

基于STM32单片机的智能绿篱修剪机的设计摘要:由于绿化养护设备的应用范围不断扩大,未来十年,国内绿化养护设备的市场容量有望达到400亿元。

然而,目前国内绿化养护设备的市场现状存在两大问题:功能单一和自动化程度低。

这些局限性阻碍了它的进一步推广和广泛应用。

绿篱种植面积的指数级增长,使绿篱的维护和修剪成为一项日益重要的任务。

然而这项任务的市场需求量大大增加了对于劳动力的需求,而路边修剪作业中频繁发生的交通事故对工人的安全构成了重大威胁。

本文在现有车载电动绿篱修剪机的基础上,提出了基于STM32微控制器的智能绿篱修剪机的总体设计方案。

该设计是对国内外绿篱修剪机的现状和发展趋势进行全面比较和分析后的结果。

其成本低廉,工作效率高,结构简单。

在设计了硬件方案与软件方案后,对整机系统进行了模拟仿真,子系统的优化设计等。

本文设计的智能绿篱修剪机相较于现有的车载式绿篱机,大幅优化了结构重量,降低了生产作业成本,提高了实际作业中的安全系数,这对提高产品的市场竞争力与性价比具有重要意义。

关键词:绿篱修剪机;STM32单片机;电子控制;远程控制1引言随着中国城市化进程的加快,人们对于环保化,生态化的道路绿化环境的需求不断提高。

这种需求导致了园林养护行业市场的扩大,也对园林企业的设计、技术水平和施工能力提出了更高的要求[1]。

绿篱种植面积的指数级增长,使绿篱的维护和修剪成为一项日益重要的任务,园林养护的市场需求量大大增加了对于劳动力的需求,而路边修剪作业中频繁发生的交通事故对工人的安全构成了重大威胁。

统计数据显示,路边事故在所有交通事故中占到了惊人的30%,凸显了解决这一问题的严重性和紧迫性。

园林企业面临着众多挑战,包括繁重的工作量、安全问题、技术专长、季节性变化和环境因素,所有这些都必须仔细管理,以确保绿篱的健康和外观,同时维护工人的安全。

2绿篱修剪机国内外研究现状(1)国外现状国外绿篱机的历史跨越了几十年,从最初的手动大剪刀式发展到背负便携式绿篱机,最后发展到具有独立动力的机动式修剪机。

基于单片机的智能牛奶箱系统研究与设计

基于单片机的智能牛奶箱系统研究与设计

2019年第8期信息通信2019 (总第200期)INFORMATION&COMMUNICATIONS(Sum.No200)基于单片机的智能牛奶箱系统研究与设计杨皓明,高煦庭(山东大学(威海),机电与信息工程学院,山东威海264200)摘要:随着人们生活水平的提高,人们对饮食质量和品质有了更高的要求。

牛奶成为当前居民生活■的必要营养品,人们对于牛奶品质的要求越来越高。

为了解决牛奶箱存储牛奶的过程中无法实现监挫的功能,本文采用单片机控制检测牛奶箱是否有奶存储,并通过APP实现牛奶送达提醒,扫码和刷卡取奶等功能。

同时,在改进牛奶箱机械机构设计方面也进行了一些改进。

实验测试表明,智能牛弼箱系统能够满足人们取弼和送弼监控的过程。

关键词:智能牛奶箱;嵌入式系统;物联网技术中图分类号:TP277文献标识码:A文章编号:1673-1131(2019)08-0127-020引言随着我国社会经济的快速发展,城镇居民的生活水平日益提高。

人们的饮食也朝着健康营养合理搭配的方向发展。

牛奶日渐成为我国居民餐桌上的必备品。

鲜奶具有营养丰富,无添加剂的优点,受到大多数人的喜爱。

然而,由于鲜奶的保质时间短,容易变质,成为鲜奶行业首要解决的问题。

人工送奶和检査奶箱是否有奶,无法准确知道送奶时间和奶瓶的存放和收取。

传统牛奶箱不仅给居民及时取奶和冷藏带来不便,而且送奶公司无法检测奶箱的情况,不利于奶瓶的回收和骨理。

针对鲜奶配送中存在的问题,本文提出智能奶箱系统,方便居民和送奶公司去奶瓶的管理,有利于居民的日常鲜奶的安全。

1系统总体设计(1)系统总体方案设计如图1所示,智能牛奶箱系统的设计总体分为硬件和软件部分的搭建。

主要包括三个部分分别是硬件箱体平台搭建和电路设计,无线射频识别模块的设计和APP软件开发与数据库设计。

主要工作过程是首先利用压力传感器实现对牛奶箱是否有奶进行判断,若有奶,通过无线通信系统发送给居民用户,提醒用户及时取出新鲜牛奶,防止长时间放置。

山大单片机实验

山大单片机实验

单片机实验报告孙洪悦2011实验1:汇编程序实验1自我完成实验(1)实验内容将片内RAM 30H 单元中的8 位二进制数转换成10 进制数。

希望转换后的结果保存于31H和32H,31H 低 4 位存放个位,高 4 位存放十位,32H 低 4 位存放百位,高 4 位为0自我完成实验程序ORG 0000H!AJMP MAINORG 0030HMAIN:MOV SP,#62H ;MOV 30H,#0AFH ;先将30H写上100MOV R0,#32H ;将百位地址送R0MOV A,30H ;这句写错了,应该是将30H的内容送给A,而不是30H,我误写成了#30HMOV B,#64H ;除数为100DIV AB ;AB相除…MOV @R0,A ;将百位的数送给32H地址MOV A,B ;将余数送给AMOV B,#0AH ;将10送BDIV AB ;AB相除SWAP A ;高低四位交换DEC R0 ;R0减1 到31HMOV @R0,A ;将十位送31H的高四位MOV A,BANL A,#0FHORL 31H,A ;31高低四位分别存十和百位~SJMP $END总结与提高:本程序用了一个小算法,一个三位数数X除以100,商a为百位,余数为:X-100*a 再用此余数除10,商为十位,余数为个位。

实验2:汇编程序实验2自我完成实验(1)实验内容:将片内RAM 30H 开始的32 个单元中分布着随机的有符号8 位二进制数,请按从小到大的顺序进行排序,排序后的数据仍然保存到30H 开始的32 个单元中(低地址存放小数据)。

程序及其注释②自我完成实验程序第一种排序方法:ORG 0000HAJMP MAINORG 0090H:MAIN:MOV SP,#62H ;MOV A,#0HMOV R1,#30HMOV R7,#20HMOV DPTR,#TABLEMOV R0,#1FH ;执行31次LOOP1:MOVC A,@A+DPTR}MOV @R1,AINC R1INC DPTRMOV A,#0HDJNZ R7,LOOP1 ;执行32次循环,在30-4F写表格数据LOOP2: MOV R1,#30H ;将起始地址给R1MOV A,R0 ;R0为执行31次MOV R2,A ;把进行一次冒泡的次数存到R2中|LOOP3:CLR C ;清CMOV A,@R1 ;;比较开始,取第一个数MOV R3,A ; 腾出累加器INC R1 ;指向下一个地址SUBB A,@R1 ;取后一个数,并与前一个数相减,看是否有CY位溢出,溢出则说明前一个数小,要换位JC LOOP4 ;前一个数小的情况下,两个数交换位置,否则,继续执行MOV A,R3 ;把后一个数存到累加器下XCH A,@R1 ;累加器的数与R1指向的数交换位置,即;前一个数和后一个数交【DEC R1 ;R1自减,准备将后面的数存到前面MOV @R1,A ;将后面的数存到前面INC R1 ;R1自增,准备下次转换,以上五行为交换LOOP4: DJNZ R2,LOOP3 ;R2自减,为下次冒泡准备DJNZ R0,LOOP2 ;跳回去进行下一轮冒泡SJMP $·ORG 30HTABLE: DB 1,3,9,2,17,4,11,6DB 5,20,100,64,21,14,79,35DB 92,7,91,23,65,16,13,18DB 18,73,65,101,27,19,62,69END第二种排序方法;!ORG 0000HAJMP MAINORG 0090HMAIN:MOV SP,#62H ;MOV A,#0HMOV R1,#30HMOV R7,#20HMOV DPTR,#TABLEMOV R0,#1FH ;执行31次(LOOP1:MOVC A,@A+DPTRMOV @R1,AINC R1INC DPTRMOV A,#0HDJNZ R7,LOOP1 ;执行32次循环,在30-4F写表格数据…LOOP2: MOV R1,#30H ;将起始地址给R1MOV A,R0 ;R0为执行31次MOV R2,A ;把进行一次冒泡的次数存到R2中MOV R4,#30H ;R4存的是最大数的位置LOOP3:CLR C ;清CMOV A,@R1 ;;比较开始,取第一个数MOV R3,A ; 腾出累加器INC R1 ;指向下一个地址、MOV A,@R4SUBB A,@R1 ;取后一个数,并与前一个数相减,看是否有CY位溢出,溢出则说明前一个数小,要换位JC LOOP4 ;前一个数小的情况下,两个数交换位置,否则,继续执行;MOV A,R3 ;把后一个数存到累加器下;XCH A,@R1 ;累加器的数与R1指向的数交换位置,即;前一个数和后一个数交;DEC R1 ;R1自减,准备将后面的数存到前面;MOV @R1,A ;将后面的数存到前面;INC R1 ;R1自增,准备下次转换,以上五行为交换>DJNZ R2,LOOP3 ;R2自减,为下次冒泡准备LOOP4:MOV A,R1 ;MOV R4,ADJNZ R2,LOOP3DJNZ R0,LOOP2 ;跳回去进行下一轮冒泡SJMP $#ORG 30HTABLE: DB 1,3,9,2,17,4,11,6DB 5,20,100,64,21,14,79,35DB 92,7,91,23,65,16,13,18DB 18,73,65,101,27,19,62,69END.总结与提高:所谓冒泡法,有两种理解方式:1.相邻的两个数比较,大的数放后一个位置,直到一轮循环后,最后一个数为此轮遍历的最大的数。

山东大学飞思卡尔单片机教学C语言程序设计PPT课件

山东大学飞思卡尔单片机教学C语言程序设计PPT课件
所有函数访问; 在模块内声明静态的函数,只能被模块内其它函数调用。 如:static int func(int x,int y);当一个C语言工程由多个程序员进
行编写时,就不用担心自己所定义的函数与别人定义的重 名了。 如果在函数名和函数类型前加extern,则表示此函数是外部函 数,可以被其他文件中的函数调用。如: extern int func(int x,int y)。
12
第六章 C语言程序设计
File1.c #include <File2.h>
/* 包含文件FILE2.c中的函数 */
void main (void)
{ MyFunction(); MyFunction();
/* 第一次进入MyFunction之前,myVar=0 */ /* 第二次进入MyFunction之前,myVar=1 */
实验5:使用仿真方法,编写并调试复杂的C语言程序 1.自定义一个包含10个无符号int型的数组,数组元素分别是10, 9,8,7,6,5,4,3,2,1,0。使用冒泡排序法对该数组元 素进行从小到大排序,调试并观察存储器区数据变化,程序要 有注释。
2
第六章 C语言程序设计
本周实验安排
2.基于上个程序,把排序好的数组进行数字滤波:去除最大的3 个和最小的3个,剩下的求平均,调试并观察存储器区数据变化, 程序要有注释。 3.课本195页例2、例3,课本196页例4 调试并观察存储器区数据变化。
6
第六章 C语言程序设计
其它C语言基础知识参见补充课件: “补充(自己看)_C语言基础.PPT”
7
第六章 C语言程序设计
§6-2 MC9S12的C编程与ANSI C的不同
CodeWarrior数据类型

五年制高等职业教育专业点设置申报

五年制高等职业教育专业点设置申报

山东省五年制高等职业教育专业点设置申报表学校名称_____________________ (高职学校)________________________________________ (中职学校)专业名称计算机应用技术专业代码590101 (高职学校)计算机应用_______ 专业代码090100 (中职学校)联系人姓名__________ 电话0633—8172877 (高职学校)电子信箱 _______ (高职学校)姓名 _________________ 电话 ___________ (中职学校)电子信箱 ______________________________ (中职学校)申报时间___________________________________________山东省教育厅印制填表说明一、申报五年一贯制和三二连读专业均须填写此表。

申报学校须在封面加盖公章。

二、中等职业学校与高等职业学校联合举办三二连读专业应如实填写表格中全部内容;高等职业学校举办五年一贯制专业,应如实填写中职学校及专业基本情况以外的全部内容。

可加页。

三、每个申报专业分别填写,与其他资料合并成册,左侧装订,一式7 份。

装订顺序:(1)山东省五年制高等职业教育专业点设置申报表;(2)专业点设置论证报告(包括拟设专业的人才需求分析,专业点设置可行性论证);(3)专业人才培养方案(主要包括培养目标、课程设置及教学要求、教学进程表等);(4)三二连读联合办学协议;(5)其他相关材料。

四、举办五年一贯制的由高等职业学校报学校驻地市级教育行政部门,举办三二连读的由中等职业学校报学校驻地市级教育行政部门。

各市教育行政部门组织论证(省属职业学校举办为本行业服务且特色鲜明的五年制高等职业教育专业,也可由省直行业主管部门组织论证),提出设置意见并于每年9 月30 日之前报省教育厅(申报材料一式 6 份,其中职业教育与成人教育处5份、规划处1 份)、市教育行政部门留存 1 份。

山东大学成人教育《单片机原理及应用》期末考试复习题及参考答案

山东大学成人教育《单片机原理及应用》期末考试复习题及参考答案

《单片机原理及应用》模拟卷除非特别声明,编程题可以使用汇编语言编写,也可以使用C语言编写1、分析程序的执行结果,将结果填写到空格中。

ORG 0000HMOV 30H,#50HMOV R0,#30HMOV A,@R0 ;(A= 50H )MOV A,#79HMOV B,#20H ;(A= 79H B= 20H )DIV AB ;(A= 03H B= 19H )PUSH BMOV B,#0AHMUL AB ;(A= 1EH B= 00H )POP BADD A,B ;(A= 37H B= 19H )MOV 30H,A ;(30H单元的内容= 37H )MOV 20H,30HCLR 01H ;(20H单元的内容= 37H )MOV A,20H ;(PSW中P的内容= 1 )CPL ARR A ;( PSW中C的内容= 0 )SWAP A ;(A= 46H )ADDC A,#0F0H ;(A= 36H );(PSW中P的内容= 0 );( PSW中C的内容= 1 )RL A ;(A= 6CH );(PSW中P的内容= 0 );( PSW中C的内容= 0 ) LOOP: AJMP LOOP2、将MCS51内部RAM60H~65H单元存放的12个16进制数变为ASCII码,放到0090H单元开始的外部RAM中。

[使用汇编语言编写]MAIN:MOV R0,#60HMOV R2,#6MOV DPTR, #0090HHASC:MOV A,@R0ANL A,#0FH ;屏蔽高四位ADD A,#0DHMOVC A,@A+PC ;查表低四位转换为ASCII码MOVX @DPTR,A ;送如外部RAMINC DPTRMOV A,@R0ANL A,#0F0HSWAP AADD A,#6MOVC,@A+PC ;高四位转换为ASCII码MOVX @DPTR,AINC R0INC DPTRDJNZ R2,HASCENDASCTAB:DB 30H 31H 32H 33H 34 H 35H 36H 37H 38H 39HDB41H 42H 43H 44H 45H 46H3、某一故障检测系统,当出现故障1时,线路1上出现上升沿;当出现故障2时,线路2上出现下降沿。

山东大学单片机原理与应用第一次实验报告

山东大学单片机原理与应用第一次实验报告

、单片机原理与应用实验报告单片机原理与应用第一次实验报告第一章软件仿真实验1.1实验1:汇编程序实验1①示例程序实验(1)实验内容在Keil环境下建立工程,并将以下程序加入工程,构造工程,并运行可执行程序,记录执行结果。

分析程序功能。

(2)添加注释后的程序ORG 0000HAJMP MAINORG 0030HMAIN:MOV SP,#60H ;堆栈底设置在60HMOV A,#0H ;A置零MOV R1,#30H ;起始单元地址为30HMOV R7,#10H ;R7用于计数,初值为10HLOOP1: ;将30H开始的16个内存单元置零MOV @R1,AINC R1DJNZ R7,LOOP1NOPMOV R1,#30HMOV R7,#10H ;重新赋计数初值和起始单元地址LOOP: ;将0到F赋给30H开始的16个单元中;MOV @R1,AINC R1 ;地址自增INC A ;A自增DJNZ R7,LOOPSJMP $END(3)示例程序的功能将30H开始的16个内存单元清0,然后将值0到F赋给30H开始的16个单元。

(4)运行结果截图②自我完成实验(1)实验内容将片内RAM 30H单元中的8位二进制数转换成10进制数。

希望转换后的结果保存于31H 和32H,31H低4位存放个位,高4位存放十位,32H低4位存放百位,高4位为0。

程序流程图:(2)程序及其注释org 0000hajmp mainorg 0030hmain:mov 30h,#68h ;待转化的数存于30H单元mov a,30h ;取数mov b,#64h ;100赋给Bdiv ab ;待转化的数除以100clr 32h ;清32H单元mov 32h,a ;商为十进制百位,存于32Hmov a,bmov b,#0ahdiv ab ;余数赋给A,余数除以10swap a ;商为个位,自交换后存于A高四位add a,bmov 31h,a ;A,B相加可以将十进制数个位十位存于31H单元sjmp $end(3)实验过程1、新建工程:二进制十进制转化.uV2;2、设置工程:二进制十进制转化.uV2属性,将其晶振频率设置为12MHz,选择输出可执行文件,仿真方式为“Use Simulator”;3、建立源程序,编写程序,程序编写思路:将待转化数存于30H单元,取出待转化的数给A,将待转化的数除以100,商位于A,余数在B。

山东大学飞思卡尔单片机教学补充(自己看)_C语言基础

山东大学飞思卡尔单片机教学补充(自己看)_C语言基础

基本运算符和表达式
1.运算符的种类
丰富的运算符和表达式使C语言功能十分完善。这也是其主要特 点之一。
C语言的运算符不仅具有不同的优先级,而且还具有结合性。在 表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别 的规定,还要受运算符结合性的制约,以便确定是自左向右进行运算 还是自右向左进行运算。C语言的运算符可分为以下几类: 算术运算符:用于各类数值运算。包括加(+)、减(-)、乘 (×)、除(/)、求余(或称模运算,%)、自增(++)、自减(--) 共七种。 关系运算符:用于比较运算。包括大于(>)、小于(<)、等于 (==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。 逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!) 三种。 位操作运算符:参与运算的量,按二进制位进行运算。包括位与 (&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移 (>>)六种。
1.函数定义的一般形式
(1)无参函数的一般形式 类型说明符 函数名() { 类型说明; 语句; } 其中类型说明符和函数名称为函数头。类型说明符指明了本 函数的类型,函数的类型实际上是函数返回值的类型。函数名是 由用户定义的标识符,函数名后有一个空括号,其中无参数,但 括号不可少。{ }中的内容称为函数体。在函数体中也有类型说明, 这是对函数体内部所用到的变量的类型说明。在很多情况下都不 要求无参函数有返回值,此时函数类型符可以写为void。
x=a+b w=sin(a)+sin(b) 如果赋值运算符两边的数据类型不相同,系统将自动进行类型 转换,即把赋值号右边的类型换成左边的类型。具体规定如下:

山东大学汇编实验一报告

山东大学汇编实验一报告

实验一DEBUG程序的使用一、实验目的1.学习使用DEBUG程序的各种命令。

2.利用DEBUG学习3.了解计算机取指令、执行指令的工作过程。

4.掌握用DEBUG调试自编程序的方法。

二、实验任务1.参照附录1,掌握DEBUG程序的各种命令,重点是命令R,D ,A,U,T,P,G命令的使用。

2.用命令A汇编下列指令,判断指令正误并说明原因。

(1)ROR AX,8;错误,因为ROR指令的源操作数只能是数字1或是CL。

(2)LEA DI,[AX];错误,因为LEA指令的目的操作数不能是DI。

(3)MOV DS,2010;错误,因为段寄存器和立即数不能在MOV指令间传。

(4)PUSH AL;错误,因为PUSH指令的目的操作数只能是通用寄存器或是内存。

(5)OUT 900,AL;错误,因为900已经超过了8位二进制数的范围。

(6)MOV [BX],0;错误,因为内存和立即数之间的类型没有确定。

3.用命令查看8086/8088 CPU在开机后执行的第一条指令。

4.用命令D查看DS:200~22F和F000:200~22F两内存块内容,用命令F将字符“A”分别填入这两个内存块,比较填入前后结果,了解可读写内存RAM和只读内存ROM 的区别。

5.用A命令汇编一条INT 1C指令,用命令T单步执行该指令,比较指令执行前后CS和IP、堆栈指针SP及堆栈内容变化情况,了解什么是中断向量表,中断向量和中断子程,掌握中断指令的执行过程。

6.利用T,P,G命令,执行下列指令段,注意它们的不同之处。

i.MOV DI,300MOV SI,400MOV CX,3CLDREP MOVSBINT 3ii.MOV AH,2MOV DL,41INT 21INT 3iii.先在CS:200处汇编一条RET指令,再在CS:100处汇编。

MOV BX,200CALL BXINT 3然后从MOV BX,200处开始执行。

7.用命令A汇编下列程序段,并将程序写到硬盘上,然后调试程序段,观察程序段能否完成指定功能,若不能,说明原因,并修改程序。

潍坊学院单片机课程设计

潍坊学院单片机课程设计

潍坊学院单片机课程设计一、课程目标知识目标:1. 学生能够理解单片机的基本原理,掌握其硬件结构、工作原理及编程方法。

2. 学生能够掌握单片机课程的常用指令、寄存器配置及其功能。

3. 学生能够运用单片机解决实际问题,如设计简单的控制系统、数据采集系统等。

技能目标:1. 学生能够运用Keil、Proteus等软件进行单片机程序设计、仿真与调试。

2. 学生能够独立完成单片机硬件电路的设计、搭建与调试。

3. 学生能够分析并解决单片机在实际应用中遇到的问题,提高实际操作能力。

情感态度价值观目标:1. 学生通过学习单片机课程,培养对电子技术的兴趣,增强自主学习能力。

2. 学生能够树立正确的工程观念,注重实践操作,提高动手能力。

3. 学生能够在团队协作中发挥个人优势,培养沟通、协作能力。

课程性质:本课程为实践性较强的专业课程,旨在培养学生的单片机应用能力,提高学生的编程、电路设计及实际操作技能。

学生特点:学生具备一定的电子技术基础,对单片机有一定了解,但编程和实际操作能力有待提高。

教学要求:结合课本内容,注重理论与实践相结合,强调学生动手实践,培养学生解决实际问题的能力。

将课程目标分解为具体的学习成果,以便于后续教学设计和评估。

二、教学内容1. 单片机原理概述:介绍单片机的发展历程、分类及特点,重点讲解51系列单片机的工作原理、内部结构及其应用领域。

教材章节:第一章 单片机概述2. 单片机编程语言与指令系统:详细讲解单片机的指令集、寻址方式、编程技巧等,使学生掌握汇编语言编程。

教材章节:第二章 单片机编程语言与指令系统3. 单片机I/O接口技术:介绍单片机I/O口的工作原理、编程方法,以及常用的I/O接口电路设计。

教材章节:第三章 单片机I/O接口技术4. 中断系统与定时器/计数器:讲解中断系统的工作原理、中断处理程序设计,以及定时器/计数器的应用。

教材章节:第四章 中断系统与定时器/计数器5. 单片机通信技术:介绍单片机串行通信原理、编程方法,以及常用的串行通信接口电路设计。

山东大学单片机原理第七章

山东大学单片机原理第七章

dn dx n
n n0ex
n n0ed
nnn0n0(ed1)
第7章 高电压绝缘与试验
7.1.2.3 自持放电条件
汤逊自持放电判据
(ed 1) 1
ed 1

d ln 1
γ-表示一个正离子到达阴极使阴极表面平均释放的自由电子数。γ 值与 阴极材料、气体种类有关。阴极的表面状况(光洁度、污染程度 等)对 γ也有一定影响。 这就是汤逊自持放电判据。
电介质)
第7章 高电压绝缘与试验
7.1 气体放电的基本理论
质点的平均自由行程
一个质点在每两次碰撞间自由地通过的距离称为自由 行程。平均自由行程 是众多质点自由行程的平均值。
电子在其自由行程内从外电场获得动能,能量除决定 于电场强度外,还和其自由行程有关。
第7章 高电压绝缘与试验
7.1 气体放电的基本理论

1.8

3.1

3.9

3.9
氧化铜
5.3
(a)正离子撞击阴极
(b)光电子发射
(c)强场发射
(d)热电子发射
第7章 高电压绝缘与试验
7.1.1 带电粒子的产生与消失 7.1.1.2 带电质点的消失
(1)带电质点向电极移动并进入电极形成回路电流。
(2)带电质点的扩散 带电质点从浓度较大的区域向浓度较小的区域的
➢气体电子和离子的自由行程是它们与气体分子发生碰撞 时的行程。
➢电子的平均自由行程比分子和离子的大得多。
➢分子密度越大,质点的平均自由行程越小,自由行程正 比于T/p。在温度高压力小的气体中带点质点的平均自由行 程大。
第7章 高电压绝缘与试验
7.1.1 带电粒子的产生与消失

山东大学计算机组成原理实验五

山东大学计算机组成原理实验五

微程序控制的存储器读写系统设计这是山东大学计算机组成原理课程设计的实验五,考虑到搜索这个实验的同学应该想要的都是图样和操作步骤,所以,设计目的,设计简述什么的就略去了。

不多说,直接开始。

首先打开程序,新建项目(new project),这个操作流程就不用说了吧;然后选择器件,1032E,70之类,不多说了。

打开菜单栏Source—new—Schematic—取名“add”—开始画下图:画好之后,生成元件符号(点击File菜单中的Matching Symbol,或者直接在做好的add文件上操作)。

打开菜单栏Source—new—Schematic—取名“add8”—开始画下图:画好之后,生成元件符号(点击File菜单中的Matching Symbol)。

这时候add应该在add8下方(层次化)。

打开菜单栏Source—new—Schematic—取名“count8”—开始画下图:这里要提一点,该元件用来当做uPC使用,是最简单的图,还有更加复杂的图,不过实际上对该实验基本无影响,所以此处采取最简单的方法,在末尾附有复杂图。

画好之后,生成元件符号(点击File菜单中的Matching Symbol)。

打开菜单栏Source—new—Schematic—取名“reg”—开始画下图:画好之后,生成元件符号(点击File菜单中的Matching Symbol)。

打开菜单栏Source—new—Schematic—取名“top_alu”—开始画下图:这是最顶层的设计,所以比较复杂,我截图的时候分成了两个,两个合在一起才是完整的图。

编写完毕后,“Fit Design”,若画图没有错误,选择的器件型号正确,那应该是显示成功的。

接下来,将该实验下载到实验板上,下载的时候,实验板应置于统调(开关向上,左上角八个灯亮着,即是统调)。

下载完毕后,将开关置于分调,输入以下指令:这里要使用实验板右下角的键盘,下面的数字对应实验台的数字(X表示随便一个数都可以)先输入指令:1 00 X41# 第一条指令XXXX01001 01 X21# 第二条指令XXXX00101 02 X11# 第三条指令XXXX0001输入数据:2 00 05 (05H,地址)2# 第一条指令000001012 01 55 (55H,数据)2# 第二条指令01010101输入完毕后,开关置于统调,按下RET2,然后按右下角的单脉冲,总共按三次。

山东大学单片机硬件实验

山东大学单片机硬件实验

《单片机原理与应用》实验文档存放目录:一、实验题目:实验1:按键声光报警实验实验5:8255 并行I/O 扩展及交通信号灯控制实验实验7:7279 键盘扫描及动态LED 显示实验二、实验要求实验1:本实验联系静态按键识别,发光二极管驱动,要求利用外部硬件中断,按键按下一次产生一次外部中断,在中断服务程序中计数器加1,同时,通过发光二极管的闪烁和蜂鸣器响的次数,指示计数器的当前值。

当计数到10 时,再次按键将重新从1 开始计。

实验2:本实验利用8255 实现可编程的并行IO 扩展功能,并利用其完成交通灯控制。

实验要求红灯常亮30S,绿灯常亮25S 后闪烁5S。

使用静态数码管显示绿灯常亮倒计时。

本实验中的东西方向信号灯同步控制,南北方向信号灯同步控制,即:东西方向上同种颜色的灯同时亮或灭,南北方向上同种颜色的灯同时亮或灭。

实验3:本实验利用7279 进行键盘扫描及动态LED 数码管显示控制。

当按下某个按键时所按按键对应的字符显示在最右端LED 数码管上,如果再次按下一个按键’2’,则原来显示的内容往左移 1 位,将新按下的按键’2’,的字符显示在最右端,依次类推显示0~F。

三、实验过程及结果记录(截图)实验1实验2实验3四、实验源程序实验1#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit bell=P3^1; //P3.1口位赋值给铃声sbit led=P3^0; //P3.0口位赋值给灯sbit key0=P3^2; //P3.2口位赋值给按键uint count;void delay(uint count) //延时1ms {uint x,y;for(x=count;x>0;x--)for(y=110;y>0;y--);}void show(uint count){ uint i;for(i=0;i<=count;i++){led=0;bell=0; //灯亮,铃响delay(500); //延时0.5sled=1;bell=1; //灯灭,铃不响delay(500);}}void s_timer0() interrupt 0 using 0{EA=0; //屏蔽所有中断请求show(count); //调用子程序count++;delay(50);if(count>=10)count=0;EA=1; //开放中断}/**************************主程序**********************************/ void main(){ EA=1; //开放中断EX0=1; //允许外部中断0中断IT0=0; //外部中断0为电平触发方式while(1); //循环执行}实验2#include<reg51.h>#include<stdio.h>#include <absacc.h>#define uchar unsigned char#define uint unsigned int#define PA XBYTE[0x7FFC] //CS--A15#define COM XBYTE[0x7FFF]sbit P30=P3^0;sbit P31=P3^1;uint temp,shi,ge,t;uchar a;void xianshi(uint temp);void delay();void delays();void init_8255();void init_8255(){COM=0x80; // c = out, a = out,b = out }void delay() //延时500MS子程序{uint i,j;for( i=500;i>0;i--)for(j=120;j>0;j--);}void delays() //延时1S子程序{uint i,j;for(i=1000;i>0;i--)for(j=120;j>0;j--);}/***************************主程序*****************************/void main(){init_8255();TMOD=0x01; //设定工作模式1EA=1; //开放中断ET0=1; //允许T0中断TF0=0; //定时器0溢出标志位while(1){a=0x26; //变量a赋初值for(temp=25;temp>19;temp--) //绿灯倒计时25s{a=a-1;PA=0x69; //东西绿灯亮xianshi(a); //调用数码管显示子程序 delays(); //延时1s}a=0x1a; //变量a赋值for(temp=19;temp>9;temp--) //倒计时{a=a-1;PA=0x69; //东西绿灯亮xianshi(a);delays();}a=0x0a;for(temp=9;temp>0;temp--){a=a-1;PA=0x69;xianshi(a);delays();}for(t=5;t>0;t--) //绿灯闪烁5s{a=0; //当计时值为0时闪烁xianshi(a);PA=0xeb; //东西绿灯灭delay(); //延时0.5sPA=0x69; //东西绿灯亮delay(); //延时0.5s}a=0x26;for(temp=25;temp>19;temp--) //绿灯倒计时25s{a=a-1;PA=0x96; //南北绿灯亮xianshi(a);delays();}a=0x1a;for(temp=19;temp>9;temp--){a=a-1;PA=0x96;xianshi(a);delays();}a=0x0a;for(temp=9;temp>0;temp--){a=a-1;PA=0x96;xianshi(a);delays();}for(t=5;t>0;t--) //绿灯闪烁5s {a=0; //当计时值为0时闪烁xianshi(a);PA=0xbe; //南北绿灯灭delay(); //延时0.5sPA=0x96; //南北绿灯亮delay(); //延时0.5s}}}void xianshi(uint a) //显示子程序{SCON=0x00; //工作模式0SBUF=a; //将变量a的值送给缓存寄存器while(!TI) //等待发送是否完成TI=0; //中断标志位清零}实验3#include<reg51.h>#include<stdio.h>sbit CS=P1^0;// cs at P1.0sbit CLK=P1^1; // clk 连接于 P1.1sbit DATA=P1^2; // dat 连接于 P1.2sbit KEY=P1^3; // key 连接于 P1.3//******************** HD7279A 指令******************/#define RESET 0xa4 // 复位指令#define RL 0xa1 //左移指令#define DECODE1 0xc8 //译码方式1#define READ 0x15 //读键盘指令/*********************长延时子程序******************/void ldelay() //25us{unsigned char a,b;for(b=1;b>0;b--)for(a=20;a>0;a--);}/***************短延时子程序****************/void sdelay(){unsigned char a;for(a=3;a>0;a--);}void send(unsigned char out) // 发送一个字节{unsigned char i;CS=0; //芯片使能ldelay(); //长延时for(i=0;i<8;i++) //分8次移入数据{if(out&0x80) //先传高位DATA=1;else DATA=0;CLK=1;sdelay();CLK=0;sdelay();out=out<<1; //数据左移}DATA=0;}void write(unsigned char command,unsigned char dat){send(command);send(dat);}unsigned char receive() //接收一个字节{unsigned char i,inbyte;ldelay(); //长延时for(i=0;i<8;i++) //分8次读入数据高位在前{CLK=1;sdelay();inbyte=inbyte<<1;if(DATA)inbyte=inbyte|0x01; //数据左移CLK=0;sdelay();}DATA=0;return inbyte;}/********************键盘扫描子程序*****************************/ unsigned char keyscan(){unsigned char key;if(!KEY) //检测P1.3是否口为低电平{send(READ);key=receive(); //将接收到的数赋给keyswitch(key) //按键编码{case 0x1b:return 0x00;break;case 0x13:return 0x01;break;case 0x0b:return 0x02;break;case 0x03:return 0x03;break;case 0x1a:return 0x04;break;case 0x12:return 0x05;break;case 0x0a:return 0x06;break;case 0x02:return 0x07;break;case 0x19:return 0x08;break;case 0x11:return 0x09;break;case 0x09:return 0x0a;break;case 0x01:return 0x0b;break;case 0x18:return 0x0c;break;case 0x10:return 0x0d;break;case 0x08:return 0x0e;break;case 0x000:return 0x0f;break;}}return 0xff;}/*******************主程序**********************/void main(){unsigned char i,key;send(RESET);while(1){if(!KEY) //检测P1.3是否口为低电平{key=keyscan(); //将键盘扫描所得值赋给keysend(RL);write(DECODE1,key);while(!KEY); //当P1.3口为低电平,循环执行}}。

430单片机实习报告8篇

430单片机实习报告8篇

430单片机实习报告8篇下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!写实习报告是记录我们实习收获的重要方式,实习报告的写作是可以让自己实习的过程都记录下来的,以下是小文学小编精心为您推荐的430单片机实习报告8篇,供大家参考。

430单片机实习报告篇1一、实习说明(1)实习时间:20xx.x-20xx.x(2)实习地点:xx科技有限公司(3)实习性质:顶岗实习(主要基于xx平台从事中小型企业管理软件定制开发,使用现在主流的一些框架,在开发中担当设计、编码角色。

)二、实习的性质、目的和意义毕业实习是教学过程中的重要组成部分,是使学生获取生产、经营实际知识和技能,巩固和加深对理论知识的理解,培养与提高能力的重要实践环节。

通过本次实习,学生将进一步加深对计算机理论知识的理解,进一步熟悉计算机文员的相关运作过程,为学生毕业后的实际工作打下良好基础。

xx在人事部门的广泛使用,改进了统计手段,改革了统计方法,提高了统计工计算机在人事部门的广泛应用,将为我国的人事管理工作,提供现代化的管理手段和科学的管理方法,并将为开创人事管理工作的新局面创造条件。

目前,计算机在我国的人事管理工作中,主要可用来进行报表处理,档案管理,文书编辑,信息查询,综合分析。

干部统计作为人事管理的一个重要组成部分,是通过对干部情况的调查,整理和分析,了解干部队伍的发展趋势,为各级领导机关制定干部工作的方针,政策,加强干部管理,改革干部制度提供准确数字的依据。

其工作除涉及到干部的基本情况统计之外,还包括干部的工资统计,干部编制情况统计,干部奖惩情况统计,军转干部安置情况统计,老干部情况统计等方面,其涉及的面之广,数据量之大可想而知,若利用手工进行干部的统计工作,大致要经过干部统计调查,干部统计资料的整理,干部统计分析三个过程,但这种手工统计过程,存在着几个明显的问题,比如说统计资料缺乏准确性,及时性,需要花费大量的人力,物力,财力等。

山东建筑大学单片机实验整理

山东建筑大学单片机实验整理

1、0-99数码管显示ORG 00HAJMP MAINORG 30HMAIN: MOV 30H,#0MOV 31H,#0 LP: ACALL PLAYACALL DELAYINC 30HMOV A,30HCJNE A,#10,LPMOV 30H,#0INC 31HMOV A,31HCJNE A,#10,LPAJMP MAIN PLAY: MOV R0,#30HMOV DPTR,#TAB LL: MOV A,@R0MOVC A,@A+DPTRSETB P2.1MOV P1,ACLR P2.1INC R0MOV A,@R0MOVC A,@A+DPTRSETB P2.0MOV P1,ACLR P2.0RETDELAY:MOV R7,#0DEL: MOV R6,#0DJNZ R6,$DJNZ R7,DELRETTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,8 0H,90HEND0-9实验ORG 00HAJMP MAINORG 30H MAIN:MOV 30H,#0 LOOP:ACALL PLAYACALL DELAYINC 30HMOV A,30HCJNE A,#10,LOOPMOV 30,#0AJMP LOOP PLAY:MOV R0,#30HMOV DPTR,#TAB LP:MOV A,@R0MOVC A,@A+DPTRMOV P1,ARETDELAY:MOV R7,#0DEL:MOV R6,#0DJNZ R6,$DJNZ R7,DELRETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END9数码管动态显示ORG 0HAJMP MAIN ORG 30HMAIN:MOV 30H,#0 MOV 31H,#0LOP1: MOV DPTR,#TAB MOV R0,#30H ACALL DISPLAY ACALL DELAYINC 30H MOV A,30H CJNE A,#10,LOP1 MOV 30H,#0 INC 31H MOV A,31H CJNE A,#10,LOP1 AJMP MAINDISPLAY: MOV A,@R0 MOVC A,@A+DPTRMOV P0,A SETB P2.1 CLR P2.1INC R0 MOV A,@R0 MOVC A,@A+DPTRSETB P2.0 MOV P0,A CLR P2.0 RETDELAY: ;误差 0usMOV R7,#0A7HDL1:MOV R6,#0ABHDL0:MOV R5,#10H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1NOP RETTAB: DB 3FH 06H 5BH 4FH 66H 6DH DB 7DH 07H 7FH 6FH 77H 7CH 3DB 9H 5EH 79H 71H 80HEND10数码管动态显示138位选; 数码管动态显示0~99,; 用74HC138控制77SEG-MPX2-CC-BULL数码管位选,; 当138输入**10 0000(取20H)时位1开,位2关; 当138输入**10 0001(取21H 时位1关,位2开ORG 0AJMP MAINORG 30HMAIN:MOV 30H,#0HMOV 31H,#0HLOP1: MOV DPTR,#TABMOV R0,#30HACALL DISPLAY;ACALL DELAYINC 30HMOV A,30HCJNE A,#10,LOP1MOV 30H,#0INC 31HMOV A,31HCJNE A,#10,LOP1AJMP MAINDISPLAY: MOV R4,#013HLOP4: MOV R3,#014HLOP3: MOV R2,#82HLOP2: MOV A,@R0MOVC A,@A+DPTRMOV P0,AMOV P2,#01H;ACALL DELAY1MOV P2,#3HINC R0MOV A,@R0MOVC A,@A+DPTRMOV P0,AMOV P2,#0;ACALL DELAY1MOV P2,#3HMOV R0,#30HDJNZ R2,LOP2DJNZ R3,LOP3DJNZ R4,LOP4RETDELAY: ;误差0us 1MSMOV R7,#0A7HDL1:MOV R6,#0ABHDL0:MOV R5,#10HDJNZ R5,$DJNZ R6,DL0DJNZ R7,DL1NOPRETDELAY1: ;误差0us 10USMOV R6,#01HDL01:MOV R5,#02HDJNZ R5,$DJNZ R6,DL01RETTAB: DB 3FH 06H 5BH 4FH 66H 6DHDB 7DH 07H 7FH 6FH 77H 7CH 3DB 9H 5EH 79H 71H 80HEND164驱动0-99ORG 00HAJMP MAINORG 30H MAIN:MOV DPTR,#TABMOV 30H,#0MOV 31H,#0 LOOP:ACALL DISPLAYACALL DELAYINC 30HMOV A,30HCJNE A,#10,LOOPMOV 30H,#0INC 31HMOV A,31HCJNE A,#10,LOOPMOV 31H,#0AJMP LOOP DISPLAY:MOV R0,#30HMOV DPTR,#TAB LP:MOV A,@R0MOVC A,@A+DPTRMOV SBUF,AJNB TI,$CLR TIINC R0CJNE R0,#32H,LPRETDELAY:MOV R7,#0DEL:MOV R6,#0DJNZ R6,$DJNZ R7,DELRETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80 H,90HEND独立按键识别ORG 00HAJMP MAINORG 30 MAIN:JB P1.0,KEY1MOV P2,#0C0HACALL DELAY KEY1:JB P1.1,KEY2MOV P2,#0F9HACALL DELAY KEY2:JB P1.2,KEY3MOV P2,#0A4HACALL DELAY KEY3:JB P1.3,KEY4MOV P2,#0B0HACALL DELAY KEY4:JB P1.4,KEY5MOV P2,#99HACALL DELAY KEY5:JB P1.5,KEY6MOV P2,#92HACALL DELAY KEY6:JB P1.6,KEY7MOV P2,#82HACALL DELAY KEY7:JB P1.7,LOOPMOV P2,#0F8HACALL DELAY DELAY:MOV R7,#0 DEL:MOV R6,#0DJNZ R6,$DJNZ R7,DELRETLOOP:END交通灯ORG 00HAJMP MAIN ORG 30H MAIN:MOV P2,#00010001B MOV R1,#100 L1:ACALL DELAY DJNZ R1,L1MOV P2,#00100001B MOV R1,#10 L2:ACALL DELAY DJNZ R1,L2MOV P2,#00001010B MOV R1,#100 L3:ACALL DELAY DJNZ R1,L3MOV P2,#00010100B MOV R1,#10 L4:ACALL DELAY DJNZ R1,L4 AJMP MAINDELAY:MOV R7,#0 DEL:MOV R6,#0 DJNZ R6,$ DJNZ R7,DEL RET END流水灯ORG 00H AJMP MAINORG 30HMAIN: MOV A,#0FEHLOOP:MOV P0,ARL A ACALL DELAY SJMP LOOP DELAY: MOV R7,#0DEL:MOV R6,#0DJNZ R6,$ DJNZ R7,DELRETEND流水灯与闪烁交替RG 00HAJMP MAINORG 03HAJMP WWORG 30HMAIN:MOV A,#0FEHSETB IT0SETB EASETB EX0LOOP:MOV P0,ARL AACALL DELAYSJMP LOOPWW:MOV P0,#0ACALL DELAYMOV P0,#0FFHACALL DELAYSJMP WWRETI DELAY: MOV R7,#0DEL: MOV R6,#0 DJNZ R6,$ DJNZ R7,DELRETEND闪烁灯AJMP loopORG 30HLOOP: MOV P0,#0ACALL DELAYMOV P0,#0FFHACALL DELAYSJMP LOOPDELAY:MOV R7,#0DEL: MOV R6,#0DJNz R6,$DJNz R7,DELRETend定时器org 00hajmp mainorg 0bhajmp aaorg 30hmain: mov tmod,#01hmov th0,#0d8hmov tl0,#0f0hmov p1.0,#0ffhsetb easetb et0setb tr0ajmp $aa: clr eamov th0,#0d8hmov tl0,#0f0hcpl p1.0setb earetiORG 0HMAIN:MOV 40H,#253 ;测试显示用语句LOP:ACALL DISPLAY ;调用显示子程序ACALL AD0808 ;调用AD转换子程序ACALL DELAY ;调用延时子程序SJMP LOP ;循环进行AD0808:MOV DPTR,#7FF8H ;给出ADC0808的芯片地址P2.7, A0,A1,A2为0MOV A,#0 ;无意义MOVX @DPTR,A ;通过给DPTR送数,使P2.7为0,WR为低,从而使START为高,使ADC0808启动转换ACALL DELAY ;延时等待ADC0808转换完毕MOVX A,@DPTR ;将ADC0808转换完的数据送AMOV 40H,A ;A将转换完的数据转存40HRET ;转换子程序返回DISPLAY: ;显示子程序MOV DPTR,#TAB ;显示码表首地址MOV A,40H ;取出ADC转换结果MOV B,#100 ;以100为除数DIV AB ;进行除法运算MOV 32H,A ;将百位送32HMOV A,B ;十位、个位数送AMOV B,#10 ;以10为除数DIV AB ;进行除法运算MOV 31H,A ;10位数送31HMOV 30H,B ;个位数送30HMOV R0,#30H ;以R0为寄存器间址的首地址DISLOP:MOV A,@R0 ;将30H内的数送AMOVC A,@A+DPTR ;取显示码MOV SBUF,A ;送串行口显示JNB TI,$ ;未送出(TI<>1)等待CLR TI ;已送出将TI清零INC R0 ;指向下一个单元CJNE R0,#33H,DISLOP;若不是到33H继续RET ;已经显示到32H,返回DELAY:MOV R7,#0DEL1:MOV R6,#0DJNZ R6,$DJNZ R7,DEL1RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END2LED流水灯ORG 0HAJMP MAINORG 30HMAIN:MOV A,#0FEHLOOP:RL AMOV P0,AACALL DELAYSJMP LOOPDELAY: MOV R7,#0DEL1: MOV R6,#0DJNZ R6,$DJNZ R7,DEL1RETEND3LED闪烁(延时)ORG 0HAJMP MAINORG 30HMAIN:MOV P0, #0FFHACALL DELAYMOV P0,00HACALL DELAYAJMP MAINDELAY::MOV R7,#0HDEL: MOV R6,#0HDJNZ R6,$DJNZ R7,DELRETEND4现流水灯和闪烁的交替出现(利用中断ORG 0HAJMP MAINORG 03HAJMP INT0ORG 30HMAIN: MOV SP,#60HSETB IT0SETB EX0SETB EAMOV A,#0FEH LOP:RL AMOV P0,AACALL DELAY1SJMP LOPINT0: PUSH P0CLR EAMOV P0,#0HACALL DELAY2MOV P0,#0FFHACALL DELAY2MOV P0,#0HACALL DELAY2MOV P0,#0FFHACALL DELAY2SETB EAPOP P0CLR IE0RETIDELAY1:MOV R7,#0 DEL1: MOV R6,#0DJNZ R6,$DJNZ R7,DEL1RETDELAY2: MOV R5,#0 DEL3: MOV R4,#0del4: mov r3,#03djnz r3,$DJNZ R4,del4DJNZ R5,DEL3RETEND12矩阵式按键识别ORG 0HMAIN:MOV R0,#0HMOV DPTR,#TAB KEYSCAN:KEY1:CLR P1.0SETB P1.1JB P1.6,KEY2MOV 32H,#1SJMP DIS1KEY2:JB P1.7,KEY3MOV 32H,#2SJMP DIS1KEY3:SETB P1.0CLR P1.1JB P1.6,KEY4MOV 32H,#3SJMP DIS1KEY4:JB P1.7,KEYSCANMOV 32H,#4DIS1:ACALL DISPLAYACALL DELAYAJMP KEYSCAN DISPLAY:MOV A,32HMOVC A,@A+DPTRSETB P2.2CLR P2.1CLR P2.0MOV P0,AACALL DELAYRETDELAY:MOV R7,#0FHDEL: MOV R6,#0HDJNZ R6,$DJNZ R7,DELRETTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END两个数比较大小:DATA1 EQU 2000HDATA2 EQU 2001HDATA3 EQU 2002HORG 00HAJMP MAINORG 30HMAIN:CLR CMOV DPTR,#DA TA1MOVX A,@DPTRMOV R3,AINC DPTRMOVX A,@DPTRSUBB A,R3JNC BIG2XCH A,R3SJMP BIG1BIG2:MOVX A,@DPTRBIG1:INC DPTRMOVX @DPTR,AEND流水灯ORG 00HAJMP MAINORG 30HMAIN: MOV A,#0FEHLOOP: MOV P0, ARL AACALL DELAYSJMP LOOPDELAY: MOV R7,#0DEL : MOV R6,#0DJNZ R6,$DJNZ R7,DELRETEND定时org 0hajmp mainorg 1bhajmp t1intorg 30hmain:mov a,#0mov dptr,#tabmov tmod,#10hmov th1,#3chmov tl1,#0b0hsetb easetb et1setb tr1sjmp $t1int:mov th1,#3chmov tl1,#0b0hinc 30hmov r1,30hcjne r1,#10,loopmov 30h,#0inc acjne a,#10,lp1clr alp1:mov 31h,amovc a,@a+dptrmov p0,amov a,31hloop:retitab:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90hend中断:ORG 00HAJMP MAINORG 03HAJMP INTOORG 30HMAIN:MOV SP,#60HSETB IT0SETB EX0SETB EAMOV A,#0FEHLOP:RL AMOV P0,AACALL DELAY1SJMP LOP INTO:PUSH P0CLR EAMOV P0,#0HACALL DELAY2MOV P0,#0FFHACALL DELAY2MOV P0,#0HACALL DELAY2MOV P0,#0FFHACALL DELAY2SETB EAPOP P0RETDELAY1:MOV R7,#0 DEL:MOV R6,#0DJNZ R6,$DJNZ R7,DELRETDELAY2:MOV R5,#0 DEL2:MOV R4,#0DJNZ R4,$DJNZ R5,DEL2RETEND按键显示:org 000hajmp mainorg 30h main:jb p1.0,key1mov p0,#0c0hacall delaykey1:jb p1.1,key2mov p0,#0f9hacall delaykey2:jb p1.2,key3mov p0,#0a4hacall delaykey3:jb p1.3,key4mov p0,#0b0hacall delay key4:jb p1.4,key5mov p0,#99hacall delay key5:jb p1.5,key6mov p0,#99hacall delay key6:jb p1.4,key7mov p0,#92hacall delay key7:jb p1.4,key8mov p0,#82hacall delay delay:mov r7,#0 del:mov r6,#0djnz r6,$djnz r7,delretend矩阵式按键识别独立按键控制数码管控制LED灯两个数比较大小:DATA1 EQU 2000HDATA2 EQU 2001HDATA3 EQU 2002HORG 00HAJMP MAINORG 30HMAIN:CLR CMOV DPTR,#DA TA1MOVX A,@DPTRMOV R3,AINC DPTRMOVX A,@DPTRSUBB A,R3JNC BIG2XCH A,R3SJMP BIG1BIG2:MOVX A,@DPTRBIG1:INC DPTRMOVX @DPTR,AEND流水灯ORG 00HAJMP MAINORG 30HMAIN: MOV A,#0FEHLOOP: MOV P0, ARL AACALL DELAYSJMP LOOPDELAY: MOV R7,#0DEL : MOV R6,#0DJNZ R6,$DJNZ R7,DELRETEND定时org 0hajmp mainorg 1bhajmp t1intorg 30hmain:mov a,#0mov dptr,#tabmov tmod,#10hmov th1,#3chmov tl1,#0b0hsetb easetb et1setb tr1sjmp $t1int:mov th1,#3chmov tl1,#0b0hinc 30hmov r1,30hcjne r1,#10,loopmov 30h,#0inc acjne a,#10,lp1clr alp1:mov 31h,amovc a,@a+dptrmov p0,amov a,31hloop:retitab:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90hend中断:ORG 00HAJMP MAINORG 03HAJMP INTOORG 30HMAIN:MOV SP,#60HSETB IT0SETB EX0SETB EAMOV A,#0FEHLOP:RL AMOV P0,AACALL DELAY1SJMP LOPINTO:PUSH P0CLR EAMOV P0,#0HACALL DELAY2MOV P0,#0FFHACALL DELAY2MOV P0,#0HACALL DELAY2MOV P0,#0FFHACALL DELAY2SETB EAPOP P0RETDELAY1:MOV R7,#0 DEL:MOV R6,#0DJNZ R6,$DJNZ R7,DELRETDELAY2:MOV R5,#0 DEL2:MOV R4,#0DJNZ R4,$DJNZ R5,DEL2RETEND按键显示:org 000hajmp mainorg 30h main:jb p1.0,key1mov p0,#0c0hacall delaykey1:jb p1.1,key2mov p0,#0f9hacall delaykey2:jb p1.2,key3mov p0,#0a4hacall delaykey3:jb p1.3,key4mov p0,#0b0hacall delaykey4:jb p1.4,key5mov p0,#99hacall delaykey5:jb p1.5,key6mov p0,#99hacall delaykey6:jb p1.4,key7mov p0,#92hacall delaykey7:jb p1.4,key8mov p0,#82hacall delaydelay:mov r7,#0del:mov r6,#0djnz r6,$djnz r7,delretendADC0808:ORG 0HMAIN: mov 40h,#234ACALL DISPLAYmov p1,#0ADLOOP: MOV A,#0MOV DPTR,#7FF8HMOVX @DPTR,AACALL DELAYMOVX A,@DPTRMOV 40H,AACALL DISPLAYACALL DELAYSJMP ADLOOPDISPLAY: MOV A,40HMOV B,#100DIV ABMOV 32H,AMOV A,BMOV B,#10DIV ABMOV 31H,AMOV 30H,BMOV DPTR,#TABMOV R0,#30HDISLOP: MOV A,@R0MOVC A,@A+DPTRMOV SBUF,AJNB TI,$CLR TIINC R0CJNE R0,#33H,DISLOPRETDELAY: MOV R7,#0DEL1: MOV R6,#0DJNZ R6,$DJNZ R7,DEL1RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND21。

单片机实验总结报告3000字范文

单片机实验总结报告3000字范文

单片机实验总结报告一、实验目的与意义单片机实验是电子、电气、计算机等专业学生必须掌握的基本技能之一。

本实验旨在通过实践操作,使学生掌握单片机的应用,了解单片机的内部结构、工作原理及编程方法,为后续专业课程和实际项目开发奠定基础。

本实验具有重要的实践意义,能够提高学生的动手能力、分析问题和解决问题的能力,培养学生的创新思维和团队协作精神。

二、实验原理单片机是一种集成度高、体积小、价格低、可靠性高的微控制器,广泛应用于工业控制、智能仪表、通信设备等领域。

单片机内部包含中央处理器、存储器、定时器/计数器、串行通信接口等模块,可以通过编程实现各种数字和模拟信号的处理和控制。

本实验采用常见的8051单片机作为实验对象,介绍单片机的最小系统、I/O口操作、中断系统、定时器/计数器、串行通信等基本功能。

通过实验,学生将了解单片机的内部结构和工作原理,掌握单片机的编程方法和常用外设的控制方式。

三、实验步骤与操作方法1、单片机最小系统搭建(1)准备实验器材:8051单片机开发板、杜邦线若干、USB 转串口线等。

(2)按照开发板上的标识,将各个元件焊接或插接到对应的焊盘上。

(3)连接电源,检查开发板上的电源和地线是否连接正确。

(4)通过USB转串口线将PC与开发板连接,确认通信正常。

2、I/O口操作实验(1)编写一个简单的程序,使单片机的P1口输出一个全高电平和一个全低电平,观察LED灯的状态变化。

(2)通过编程控制P1口输出不同的信号,如方波、三角波等。

(3)尝试使用P2口和P3口进行类似的实验操作。

3、中断系统实验(1)编写一个中断服务程序,当按下开发板上的按钮时,触发外部中断0(INT0),使P1口的LED灯闪烁。

(2)了解中断优先级的概念,并尝试改变中断优先级,观察实验结果。

4、定时器/计数器实验(1)编写一个程序,使定时器0在1秒内自动溢出,通过中断服务程序实现LED灯的闪烁。

(2)尝试改变定时器初值,观察LED灯闪烁的频率变化。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息科学与工程学院
2016-2017学年第二学期
实验报告
课程名称:单片机原理与应用
实验名称: 3.8 ADC0808/9信号采集实验
实验报告
【实验题目】
本实验利用LCD1602和AD0808实现简单的交流信号过零检测与频率分析。

要求信号幅度变化时(满量程的5%~95%),不影响检测的结果。

频率检测的结果通过LCD1602的第1行显示出来,信号过零时,能够通过P2.6输出一个脉冲宽度为5微秒的脉冲信号。

【实验要求】
1.编写源程序并进行必要的注释;
2.记录实验过程;
3.记录程序运行结果;
【实验过程及结果记录】
自我完成实验
A.电路图
B.运行结果频率监测
过零检测
【实验源程序】
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;
sbit AD_CLK=P2^3;
sbit Start=P2^4;
sbit OE=P2^5;
sbit Out_pulse=P2^6;
sbit EOC=P2^7;
uchar tx50=0;
uchar f=0;
uchar date,lastdate,ge,shi; void delay_ms(uint xms) {
uint i,j;
for(i=xms;i>0;i--)
{
for(j=110;j>0;j--); }
}
bit lcd_busy()
{
bit result;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=(bit)(P1&0x80);
LCD_EN=0;
return result;
}
void lcd_wcmd(uchar cmd) {
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P1=cmd;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=0;
}
void lcd_clr()
{
lcd_wcmd(0x01);
delay_ms(2);
}
void lcd_wdat(uchar dat) {
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P1=dat;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=0;
}
void lcd_init()//初始化子程序
{
delay_ms(15);
lcd_wcmd(0x38);//8位数据总线,显示2行,5*7点阵delay_ms(5);
lcd_wcmd(0x0c);//显示开,关光标,不闪烁
delay_ms(5);
lcd_wcmd(0x06);//进入模式设置指令中,地址自动增加delay_ms(5);
lcd_wcmd(0x01);//清楚LCD显示内容
delay_ms(5);
}
void s_timer0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
tx50=tx50+1;
if(tx50==20)
{
TR0=0;
tx50=0;
f=f/2;
shi=f/10;
shi=shi+'0';
ge=f%10;
ge=ge+'0';
lcd_wcmd(0x80);
lcd_wdat('F');
delay_ms(5);
lcd_wdat('=');
delay_ms(5);
lcd_wdat(shi);
delay_ms(5);
lcd_wdat(ge);
delay_ms(5);
lcd_wdat('H');
delay_ms(5);
lcd_wdat('z');
f=0;
TR0=1;
}
}
void s_timer1() interrupt 3 {
AD_CLK=~AD_CLK; }
void main()
{
delay_ms(10);
lcd_init();
lcd_clr();
delay_ms(2);
TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1)
{
Start=1;
Start=0;
while(EOC!=1);
OE=1;
P0=0xff;
lastdate=date;
date=P0;
OE=0;
if(((lastdate<128)&&(date>=128))||((lastdate>=128)&&(date<128)))
{
f++;
Out_pulse=1;
_nop_();
_nop_();
_nop_();
_nop_();
Out_pulse=0;
}
}
}
(注:文档可能无法思考全面,请浏览后下载,供参考。

可复制、编制,期待你的好评与关注!)。

相关文档
最新文档