给初学单片机的40个实验
单片机常见实验

单片机常见实验实验一Proteus及Keil 2 的认知实验一、实验目的掌握Proteus的基本操作,练习原理图的绘制;学习Keil中工程建立和程序调试的基本方法。
二、实验内容1、在Proteus中绘制如下电路。
2、在Keil中编写程序把7000H的内容(0x34H)拆开,高位送7001H低位,低位送7002H低位。
7001H、7002H高位清零,一般本程序用于把数据送显示缓冲区时用。
成功后,7001H和7002H单元中的内容应为03H和04H。
三、实验程序框图注:本实验不用交实验报告。
开始7000内容送A 高低位交换屏蔽高位后送7001H 7000H内容送A屏蔽高位后送7002H结束实验二外中断与定时器实验一、实验目的掌握外中断0(或1)、定时器0(或1)相关寄存器的配置,正确使用外中断及定时/计数器。
二、实验内容根据外中断0引脚上的按键(接P1.0)触发信号,控制定时器0工作。
具体要求为:首次按下按键时,启动定时器控制外接发光二极管闪烁(接P1.1),亮灭时间间隔为1秒。
当再次按下按键时,停止定时器工作,二极管停止闪烁。
如此反复,不断循环。
三、具体要求在Proteus中画原理图,在Keil中建立工程,编写程序,最后两者连调仿真。
交实验报告。
实验三4X4键盘及数码管显示实验一、实验目的掌握4X4行列式键盘的工作原理,掌握数码管显示器的工作原理。
二、实验内容参考实验一中绘制的原理图及提供的相关例程,用查询方式编写识别4X4键盘的程序,16个键分别代表0~F,并将相应的键值在两位数码管上以十进制形式显示出来。
三、具体要求在Proteus中画原理图,在Keil中建立工程,编写程序,最后两者连调仿真。
交实验报告。
单片机部分实验指导书

目录1、实验一多路开关实验 (3)2、实验二可编程增益放大器实验 (5)3、实验三A/D转换实验 (7)4、实验四D/A转换实验 (11)5、实验五静态显示实验 (13)6、实验六动态扫描显示实验 (15)7、实验七液晶显示实验 (18)8、实验八矩阵式键盘实验 (23)9、实验九开关量输入输出实验 (28)10、实验十24WC02串行E2PROM的读写实验 (30)11、实验十一PCF8563时钟/日历芯片的应用实验 (37)12、实验十二外部程序存储器EPROM的扩展实验 (45)13、实验十三 SRAM外部数据存储器扩展实验 (47)14、实验十四单片机与PC机的RS232串行通信实验 (50)15、实验十五单片机与PC机的MAX485串行通信实验 (52)16、实验十六打印机实验 (54)17、实验十七 USB通信实验 (57)18、实验十八网络控制器实验 (102)实验一多路开关实验一.实验目的1.掌握多路开关与单片机的接口方法。
了解按键识别的编程方法。
2.通过实验了解单片机如何进行多路开关实验。
二.实验内容利用线路板DSC-SCM01提供CPU处理器,利用线路板DCP-SCM02上的发光二级管显示及查询式键盘完成多路开关实验。
当对应的按键按下时,相应的发光二极管亮。
三.实验器材1.主控屏+5V电源2. DCP-SCM01 单片机电路3. DCP-SCM02 键盘及显示电路四.实验原理图五.实验说明该实验通过线路板DCP-SCM01及线路板DCP-SCM02完成,线路板DCP-SCM02上发光二极管的阳极接正5V电源,所以要使某个发光二极管亮,只要使对应的发光二极管的阴极为低电平即可。
六.实验步骤1.利用导线按表格中的对应关系将DCP-SCM01对应的端口与DCP-SCM02对应的端口连接起来即可DCP-SCM02 DCP-SCM01发光二极管显示单元的插座U3 P0查询式键盘区域的插座U4 P1EA脚接+5VD_SWITCH.C3.输入并编辑D_SWITCH.C文件,并且编译生成HEX文件。
单片机的40个实验

147
f) 把“单片机系统”区域中的 P3.3 与“模数转换模块”区域中的 CLK 端子 用导线相连接。 g) 把“模数转换模块”区域中的 A2A1A0 端子用导线连接到“电源模块”区 域中的 GND 端子上。 h) 把“模数转换模块”区域中的 IN0 端子用导线连接到“三路可调电压模 块”区域中的 VR1 端子上。 i) 把“单片机系统”区域中的 P0.0-P0.7 用 8 芯排线连接到“模数转换模 块”区域中的 D0D1D2D3D4D5D6D7 端子上。 4. 程序设计内容 i. 由于 ADC0809 在进行 A/D 转换时需要有 CLK 信号,而此时的 ADC0809 的 CLK 是接在 AT89S51 单片机的 P3.3 端口上,也就是要求从 P3.3 输出 CLK 信号供 ADC0809 使用。因此产生 CLK 信号的方法就得用软 件来产生了。 ii. 由于 ADC0809 的参考电压 VREF=VCC,所以转换之后的数据要经过 数据处理,在数码管上显示出电压值。实际显示的电压值 (D/256*VREF) 5. 汇编源程序 (略) 6. C 语言源程序 #include <AT89X52.H> unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00}; unsigned char dispbuf[8]={10,10,10,10,0,0,0,0}; unsigned char dispcount; unsigned char getdata; unsigned int temp; unsigned char i; sbit sbit sbit sbit ST=P3^0; OE=P3^1; EOC=P3^2; CLK=P3^3;
单片机实验资料大全

一、熟悉学习工具开发板二、点亮LED1.单片机及最小系统电路1)电源电路2)晶振电路3)复位电路2.74HC245和74HC13874HC245的输入:DB_0 即P0.0DB_1 即P0.1DB_2 即P0.2DB_3 即P0.3DB_4 即P0.4DB_5 即P0.5DB_6 即P0.6DB_7 即P0.7U3 74HC138的输入:ADDR0即P1.0ADDR1即P1.1ADDR2即P1.2ADDR3即P1.3 E3ENLED即P1.4 E1 E2 3.跳线4.LED三极管基极端输入LEDS6是U3 74HC138的输出Y68个LED小灯阴极端的8个输入是74HC245的8个输出:DB 0 也就是P0.0DB 1 也就是P0.1DB 2 也就是P0.2DB 3 也就是P0.3DB 4 也就是P0.4DB 5 也就是P0.5DB 6 也就是P0.6DB 7 也就是P0.75.点亮一个LED的程序新建工程,添加.c文件,编辑编译,生成hex文件编译成功会出现reg2.h,,双击可以打开STP-ISP下载程序到板子,小灯被点亮1)点亮第1个小灯,熄灭第1个小灯2)点亮第2个小灯,熄灭第2个小灯3)点亮第3个小灯,熄灭第3个小灯4)点亮第1、2小灯,熄灭第1、2小灯5)点亮第1、3、5、7小灯,熄灭第1、3、5、7小灯三、闪烁LED修改小灯闪烁的时间:低于20ms,大于50HZ,小灯的闪烁人眼看到是连续的四、流水灯1、用P0点亮小灯2、依次点亮每个小灯,依次要赋给P0 的数值就是:0xFE、0xFD、0xFB、0xF7、0xEF、0xDF、0xBF、0x7F。
•左移<<右移>>•左移,最低位填0补充;右移,最高位填0补充•0xf0 11100000 01111000流水灯程序1.将流水灯左移理解透彻后,独立完成流水灯右移操作。
2.独立完成一个左移到头接着右移,右移到头再左移的花样流水灯程序。
单片机的40个实验图

如图4.1.2所示图4.2.1图4.2.2图4.3.1图4.3.2图4.4.15.程序框图图4.4.2图4.5.1图4.5.2图4.6.1图4.6.2图4.7.1图4.8.1图4.8.2图4.8.35.程序框图图4.8.4图4.9.1图4.9.2图4.10.1图4.11.1图4.11.2图4.12.1图4.12.2图4.13.1图4.13.2图4.14.1图4.14.2图4.15.1图4.15.2图4.16.1图4.16.2图4.17.1图4.17.2图4.18.1图4.18.2图4.19.1图4.20.1图4.21.1图4.21.2图4.22.1图4.22.2图4.23.1图4.24.18X8点阵LED结构如下图所示图4.24.2图4.25.13.硬件系统连线(1).把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上;(2).把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上;4.程序设计内容(1).数字0-9点阵显示代码的形成如下图所示,假设显示数字“0”1 2 3 4 5 6 7 800 00 3E 41 41 41 3E 00因此,形成的列代码为00H,00H,3EH,41H,41H,3EH,00H,00H;只要把这些代码分别送到相应的列线上面,即可实现“0”的数字显示。
送显示代码过程如下所示送第一列线代码到P3端口,同时置第一行线为“0”,其它行线为“1”,延时2ms左右,送第二列线代码到P3端口,同时置第二行线为“0”,其它行线为“1”,延时2ms左右,如此下去,直到送完最后一列代码,又从头开始送。
数字“1”代码建立如下图所示1 2 3 4 5 6 7 8其显示代码为00H,00H,00H,00H,21H,7FH,01H,00H数字“2”代码建立如下图所示1 2 3 4 5 6 7 8数字“3”代码建立如下图所示1 2 3 4 5 6 7 800H,00H,22H,49H,49H,49H,36H,00H 数字“4”代码建立如下图所示1 2 3 4 5 6 7 800H,00H,0CH,14H,24H,7FH,04H,00H 数字“5”代码建立如下图所示1 2 3 4 5 6 7 8数字“6”代码建立如下图所示1 2 3 4 5 6 7 800H,00H,3EH,49H,49H,49H,26H,00H 数字“7”代码建立如下图所示1 2 3 4 5 6 7 800H,00H,40H,40H,40H,4FH,70H,00H 数字“8”代码建立如下图所示1 2 3 4 5 6 7 8数字“9”代码建立如下图所示1 2 3 4 5 6 7 800H,00H,32H,49H,49H,49H,3EH,00H图4.26.13.硬件系统连线(1).把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上;(2).把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上;(3).把“单片机系统”区域中的P2.0/A8端子用导线连接到“独立式键盘”区域中的SP1端子上;4.程序设计内容(1).“★”在8X8LED点阵上显示图如下图所示1 2 3 4 5 6 7 812H,14H,3CH,48H,3CH,14H,12H,00H(2).“●”在8X8LED点阵上显示图如下图所示1 2 3 4 5 6 7 800H,00H,38H,44H,44H,44H,38H,00H(3).心形图在8X8LED点阵上显示图如下图所示1 2 3 4 5 6 7 830H,48H,44H,22H,44H,48H,30H,00H图1.27.1图1.28.1图4.29.1图4.30.1图4.31.1图4.32.1图4.33.1DS1624的功能结构图如图4.34.2所示:图4.34.2(3). DS1624工作原理温度测量图4.34.3是温度测量的原理结构图图4.34.3 温度测量的原理结构图表2 温度与输出数据关系表由于数据在总线上传输时MSB在前,所以DS1624读出的数据可以是一个字节(分辨率为1℃),也可以是两个字节,第二个字节包含的最低位为0.03125℃。
给初学单片机的40个实验

5.广告灯(利用取表方式)1.实验任务利用取表的方法,使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。
2.电路原理图图4.5.13.系统板上硬件连线把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。
4.程序设计内容在用表格进行程序设计的时候,要用以下的指令来完成(1).利用MOV DPTR,#DATA16的指令来使数据指针寄存器指到表的开头。
(2).利用MOVC A,@A+DPTR的指令,根据累加器的值再加上DPTR的值,就可以使程序计数器PC指到表格内所要取出的数据。
因此,只要把控制码建成一个表,而利用MOVC A,@A+DPTR做取码的操作,就可方便地处理一些复杂的控制动作,取表过程如下图所示:5.程序框图图4.5.27. C语言源程序#include <AT89X51.H>unsigned char code table[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe, 0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe, 0x00,0xff,0x00,0xff, 0x01};unsigned char i;void delay(void) {unsigned char m,n,s; for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--); }void main(void){while(1){if(table[i]!=0x01){P1=table[i];i++;delay();}else{i=0;}}}6.报警产生器1.实验任务用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz 信号响100ms,500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。
单片机 跑马灯实验精选全文

可编辑修改精选全文完整版实验一跑马灯实验一、实验内容1、基本的流水灯根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。
每点亮一个LED,采用软件延时一段时间。
2、简单键控的流水灯不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。
松手后,又按正序点亮流水灯。
3、键控的流水灯上电,不点亮LED,按一下K1键,按正序点亮流水灯。
按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。
二、实验方案1、总体方案设计考虑到K4键未被使用,所以将实验内容中的三项合并到一个主函数中:K4键代替实验内容第二项中的K1键;单片机一开机即执行实验内容第一项;K1、K2、K3键实现实验内容第三项。
所用硬件:AT89C52、BUTTON、LED-BLUE、电源输入:P2.0-K1;P2.1-K2;P2.2-K3;P2.3-K4。
低电平有效输出:P0.0~P0.7-D0~D7。
LED组连线采用共阳极,低电平有效软件设计:软件延时采用延时函数delay(t),可调整延迟时间:void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}由于涉及到按键变化所以要设置一个变量oldK保留按键键值,要在延时程序中检测是否按键,当按键后立即设置oldK的值。
按键判断采用在while循环中利用条件语句判断P2的值然后执行该键对应的代码段,达到相应的响应。
为了让K4键的效果优化,即状态变化从当前已亮灯开始顺序点亮或逆序点亮,利用全局变量n来记录灯号,利用算法即可实现。
主要算法:1、全局变量的定义:uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;2、顺序、逆序点亮流水灯:void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}3、实验内容第二项流水灯灯亮顺序变换:void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){out=D[n];n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}4、对应实验内容第一项,开机顺序点亮流水灯:while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}2、实验原理图图2-1 实验原理图3、程序流程图图2-2 程序流程图三、源程序#include"reg51.h"#define uchar unsigned char#define uint unsigned int#define out P0uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;//记录当前亮的灯号void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}void delay10ms(){uint i;for(i=0;i<10000;i++);}void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}int delay4(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK){ //按键变化退出循环return 1;}}return 0;}void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}void main(){oldK=K[0];while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}while(1){out=AllOff;if((P2&0x0f)!=0x0f){//检测有键按下delay10ms();//延时10ms再去检测//P2.0_K1键按下正序点亮流水灯if(P2==K[1]){oldK=K[1];while(1){forward();if(P2!=K[1]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.1_K2键按下逆序点亮流水灯if(P2==K[2]){while(1){backward();if(P2!=K[2]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.2_K3键按下关闭全部LEDif(P2==K[3]){oldK=K[3];out=AllOff;}//P2.3_K4键按下长按逆序点亮流水灯,不按正序点亮流水灯,直到其他键按下停止if(P2==K[4]){hold();}}}}四、实验结果1、基本的流水灯:开机后即重复顺序点亮流水灯,等待其他按键。
单片机个必做实验

第一部分软件实验实验一二进制到BCD码转换一、实验目的1、掌握简单的数值转换算法2、基本了解数值的各种表达方法二、实验说明单片机中的数值有各种表达方式,这是单片机的基础.掌握各种数制之间的转换是一种基本功.我们将给定的一个二进制数,转换成二十进制<BCD)码.将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123.EKO7sEcVR7b5E2RGbCAP三、实验内容及步骤1、启动计算机,打开伟福仿真软件,进入仿真环境.首先进行仿真器的设置,选择使用伟福软件模拟器.2、打开TH2.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA>,点击暂停按钮,观察地址30H、31H、32H的数据变化,30H更新为01,31H更新为02,32H更新为03.用键盘输入改变地址30H、31H、32H的值,点击复位按钮后,可再次运行程序,观察其实验效果.修改源程序中给累加器A的赋值,重复实验,观察实验效果.EKO7sEcVR7p1EanqFDPw3、打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解.EKO7sEcVR7DXDiTa9E3d四、流程图及源程序1.源程序RESULT EQU 30HORG 0000HLJMP STARTBINTOBCD:MOV B,#100DIV ABMOV RESULT,A ;除以100得百位数MOV A,BMOV B,#10DIV ABMOV RESULT+1,A ;余数除以10得十位数MOV RESULT+2,B ;余数为个位数RETSTART:MOV SP,#40HMOV A,#123CALL BINTOBCDLJMP $END2.流程图一、实验目的12二、实验说明.若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序.EKO7sEcVR75PCzVD7HxA三、实验内容及步骤1、启动计算机,打开伟福仿真软件,进入仿真环境.首先进行仿真器的设置,选择使用伟福软件模拟器.2、打开TH4.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA>,点击暂停按钮,观察地址30H、31H、32H、33H的数据变化,30H更新为0,31H更新为1,32H更新为2,33H更新为 3.用键盘输入改变地址30H、31H、32H、33H的值,点击复位按钮后,可再次运行程序,观察其实验效果.修改源程序中给30H~33H的赋值,重复实验,观察实验效果.EKO7sEcVR7jLBHrnAILg3、打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解.EKO7sEcVR7xHAQX74J0X四、流程图及源程序1、流程图2.源程序ORG 0LJMP STARTFUNC0: MOV 30H,RETFUNC1: MOV 31H,#1RETFUNC2: MOV 32H,#2RETFUNC3: MOV 33H,#3RETFUNCENTER:ADD A,ACC ;AJMP为二字节指令,调用号×2MOV DPTR,#FUNCTABJMP @A+DPTRFUNCTAB:AJMP FUNC0AJMP FUNC1AJMP FUNC2AJMP FUNC3START:MOV A,#0CALL FUNCENTERMOV A,#1CALL FUNCENTERMOV A,#2CALL FUNCENTERMOV A,#3CALL FUNCENTERLJMP $END第二部分硬件基础实验实验七 P1口输入、输出实验一、实验目的1、学习P1口的使用方法2、学习延时子程序的编写和使用二、实验说明P1口是准双向口,它作为输出口时与一般的双向口使用方法相同.由准双向口结构可知当P1口用为输入口时,必须先对它置“1”.若不先对它置“1”,读入的数据是不正确的.EKO7sEcVR7LDAYtRyKfE三、实验内容及步骤实验(一>:用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮.1、使用单片机最小应用系统1模块.关闭该模块电源,用扁平数据线连接单片机P1口与八位逻辑电平显示模块.EKO7sEcVR7Zzz6ZB2Ltk2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,打开仿真器电源.EKO7sEcVR7dvzfvkwMI13、启动计算机,打开伟福仿真软件,进入仿真环境.首先进行仿真器的设置,选择仿真器型号、仿真头型号、CPU类型.选择通信端口,点击测试串行口,通信成功既可退出设置,进行仿真.EKO7sEcVR7rqyn14ZNXI4、打开TH7A.ASM源程序,进行编译.编译无误后,点击全速执行按钮运行程序,观察发光二极管显示情况.发光二极管单只从右到左轮流循环点亮.EKO7sEcVR7EmxvxOtOco5、把源程序编译成OBJ文件,再烧录到89C51芯片中.实验(二>:用P1.0、P1.1作输入接两个拨断开关,P1.2、P1.3作输出接两个发光二极管.程序读取开关状态,并在发光二极管上显示出来.EKO7sEcVR7SixE2yXPq51、用导线连接P1.0、P1.1到两个拨断开关,P1.2、P1.3到两个发光二极管.2、打开TH7B.ASM源程序,编译无误后,全速运行程序,拨动拨断开关,观察发光二极管的亮灭情况.向上拨为点亮,向下拨为熄灭.EKO7sEcVR76ewMyirQFL3、把源程序编译成OBJ文件,再烧录到89C51芯片中.四、流程图及源程序1.流程图<一)实验一ORG 0 Loop: mov a, #0FEhmov r2,#8Output: mov P1,arl aAcall Delaydjnz r2,OutputLjmp LoopDelay: mov r6,#0mov r7,#0DelayLoop: ;延时程序 djnz r6,DelayLoopdjnz r7,DelayLoopretend<二)实验二KeyLeft BIT P1.0 ;定义KeyRight BIT P1.1Ledleft BIT P1.2LedRight BIT P1.3ORG 0SETB KeyLeft ;欲读先置一SETB KeyRightLoop: Mov c,keyleftMov LEDLeft,cMOV C,KeyRightMov LEDRIGHt,cLJMP LoopEND五、思考题<1)对于本实验延时子程序Delay: MOV R6,0MOV R7, 0DelayLoop:DJNZ R6,DelayLoopDJNZ R7,DelayLoopRET本模块使用12MHz晶振,粗略计算此程序的执行时间为多少?六、电路图实验十 8255输入、输出实验一、实验目的1、了解8255芯片结构及接口方式2、掌握8255输入、输出的编程方法 二、实验说明了解用到的芯片引脚及功能:8255是可编程的并行输入/输出接口芯片,通用性强且使用灵活.8255按功能可分为三个部分,即:总线接口电路,口电路和控制逻辑电路.EKO7sEcVR7y6v3ALoS891、口电路:8255共有三个八位口,其中A口和B口是单纯的数据口,供数据I/O口使用.2、总线接口电路:它用于实现8255和单片机芯片的信号连接.(1>CS——片选信号.(2>RD——读信号.(3>WR——写信号.(4>A0、A1——端口选择信号.8255共有四个可寻址的端口,用二位编码可以实现.3、控制逻辑电路:它是控制寄存器,用于存放各口的工作方式控制字.本实验是利用8255可编程并行口芯片,实现数据的输入、输出.可编程通用接口芯片8255A有三个八位的并行的I/O口,它有三种工作方式.本实验采用的方式为0:PA口输出,PB口输入.工作方式0是一种基本的输入输出方式.在这种方式下,三个端口都可以由程序设置为输入或输出,其基本功能可概括如下:EKO7sEcVR7M2ub6vSTnP1、可具有两个八位端口<A、B)和两个4位端口<C口的上半部分和下半部).2、数据输出时可以锁存,输入时不需锁存.本实验中,8255的端口地址由单片机的P2.0、P2.1和P2.7决定.控制口的地址为7FFFH;A口的地址为7CFFH;B口的地址为7DFFH;C口的地址为7CFFH.EKO7sEcVR70YujCfmUCw三、内容及步骤本实验分两种情况来进行:(一> PA口作为输出口. (二> PA 口作为输出口,PB口作为输入口.(一>PA口作为输出口,接8位发光二极管,程序功能使发光二极管单只从右到左轮流循环点亮.1、单片机最小应用系统1的 P0口接8255的D0~D7口,8255的PA0~PA7接八位逻辑电平显示,单片机最小应用系统1的P2.0、P2.1、P2.7、RD、WR分别接8255的A0、A1、CS、RD、WR,RESET接上复位电路.EKO7sEcVR7eUts8ZQVRd2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,打开仿真器电源.EKO7sEcVR7sQsAEJkW5T3、启动计算机,打开伟福仿真软件,进入仿真环境.选择仿真器型号、仿真头型号、CPU 类型;选择通信端口,测试串行口.EKO7sEcVR7GMsIasNXkA4、打开TH10A.ASM 源程序,编译无误后,全速运行程序.发光二极管单只从右到左轮流循环点亮.5、可把源程序编译成OBJ 文件,烧录到89C51芯片中. (二>PA 口作为输出口,PB 口作为输入口,PA 口读入键信号送八位逻辑电平显示模块显示.1、8255的PA0~PA7接八位逻辑电平显示,PB0~PB7口接查询式键盘模块,单片机最小应用系统1的P2.0、P2.1、P2.7、RD 、WR 分别接8255的A0、A1、CS 、RD 、WR ,RESET 接上复位电路.EKO7sEcVR7TIrRGchYzg2、打开TH10B.ASM 源程序,编译无误后,全速运行程序.按查询式键盘各键,观察发光二极管的亮灭情况,发光二极管与按键相对应,按下为点亮,松开为熄灭.EKO7sEcVR77EqZcWLZNX3、可把源程序编译成OBJ 文件,烧录到89C51芯片中. 四、流程图及源程序EKO7sEcVR7lzq7IGf02E源程序如下:<一)PA口输出:org 0hporta equ 7CFFh ;A口Portb equ 7DFFh ;B口Portc equ 7EFFh ;C口caddr equ 7FFFh ;控制字地址 mov a,#80h ;方式0mov dptr, #caddrmovx @dptr, aLoop: mov a, #0FEhmov r2, #8Output:mov dptr, #portamovx @dptr, acall Delayrl adjnz r2, Outputljmp LoopDelay: mov r6, #0mov r7, #0DelayLoop:djnz r6, DelayLoopdjnz r7, DelayLoopretend<二)PA口输出,PB口输入ORG 0PortA equ 7CFFh ;A口PortB equ 7DFFh ;B口PortC equ 7EFFh ;C口CAddr equ 7FFFh ;控制字地址SJMP STARTSTART:org 30hmov a, #82h ;方式0,PA,PC输出,PB输入mov dptr, #caddrmovx @dptr, amov dptr, #PortBmovx a, @dptr ;读入B口mov dptr, #PortAmovx @dptr, a ;输出到A口call delaySjmp STARTend五、思考题试用8255PA口作为输出口,PB作为输入口,PC作为输入口完成8255的输入、输出实验<其中PA口LED数码显示,PB接拨断开关,PC接查询式键盘实验模块).EKO7sEcVR7zvpgeqJ1hk六、电路图实验十二 5LED静态串行显示一、实验目的1、掌握数字、字符转换成显示段码的软件译码方法2、静态显示的原理和相关程序的编写 二、实验电路1、静态显示,电路中图所示.显示器由5个LED 数码管组成.输入只有两个信号,它们是串行数据线DIN 和移位信号CLK.5个串/并移位寄存器芯片74LS164首尾相连.每片的并行输出作为LED 数码管的段码.EKO7sEcVR7NrpoJac3v174LS164的引脚图如图所示;74LS164为8位串入并出移位寄存器,1、2为 串行输入端,Q0~Q7为并行输出端,CLK 为移位时钟脉冲,上升沿移入一位;MR 为清零端,低电平时并行输出为零.EKO7sEcVR71nowfTG4KI 三、实验内容及步骤单片机的P3.0作数据串行输出,P3.1作移位脉冲输出,可参考实验十一串行数转换并行数.1、使用单片机最小应用系统1模块,用导线连接RXD 、TXD 到串行静态显示模块的DIN 、CLK 端.2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,打开仿真器电源.EKO7sEcVR7fjnFLDa5Zo74LS1643、启动计算机,打开伟福仿真软件,进入仿真环境.选择仿真器型号、仿真头型号、CPU类型;选择通信端口,测试串行口.EKO7sEcVR7tfnNhnE6e54、打开TH12.ASM源程序,编译无误后,全速运行程序.5LED 显示“89C51”.程序停止运行时,显示不变,说明静态显示模块具有数据锁存功能.EKO7sEcVR7HbmVN777sL5、可把源程序编译成OBJ文件,烧录到89C51芯片中.四、流程图及源程序1、流程图2、源程序;置存储区首址;置缓冲区首址;置串行输出口;置时钟输出口ORG 0MOV 30H, #8 ;存入显示数据MOV 31H, #9MOV 32H, #CMOV 33H, #5MOV 34H, #1DISP: MOV R0, #DBUF0MOV R1, #TEMPMOV R2, #5DP10: MOV DPTR, #SEGTAB ;表头地址MOV A, @R0MOVC A, @A+DPTR ;查表指令MOV @R1, AINC R0INC R1DJNZ R2, DP10MOV R0, #TEMP ;段码地址指针MOV R1, #5 ;段码字节数DP12: MOV R2, #8 ;输出子程序 MOV A, @R0 ;取段码DP13: RLC A ;段码左移MOV DIN, C ;输出一位段码CLR CLK ;发送移位脉冲一位SETB CLKDJNZ R2, DP13INC R0DJNZ R1, DP12SJMP $SEGTAB:DB 3FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5EKO7sEcVR7V7l4jRB8HsDB 7DH,07H,7FH,6FH,77H,7CH ;6,7,8,9,A,BDB 58H,5EH,7BH,71H,00H,40H ;C,D,E,F,,-DELAY: MOV R4, #03H ;延时子程序AA1: MOV R5, #0FFHAA: DJNZ R5, AADJNZ R4, AA1RETEND五、电路图实验十四查询式键盘一、实验目的1、掌握键盘和显示器的接口方法和编程方法2、掌握键盘和八段码显示器的工作原理3、静态显示的原理和相关程序的编写二、实验说明本实验提供了8个按钮的小键盘,落如果有键盘按下,则相应输出为低,如果没有键按下,则输出为高.通过这样可以判断按下什么键.在有键按下后,要有一定的延时,防止键盘抖动.EKO7sEcVR783lcPA59W9三、实验步骤及内容1、用一根扁平数据线插头连接查询式键盘实验模块与八位逻辑电平显示模块,无键按下时,键盘输出全为“1”发光二极管全部熄灭,有键按下,对应发光二极管点亮.此种电路的程序要判断是否有2个或2个以上的键盘同时按下,以免键盘分析错误.阵列式键盘的编程同样也有这样的问题要注意.EKO7sEcVR7mZkklkzaaP2、一根扁平8线插头连接查询式键盘实验模块与扫描显示实验模块.无键按下时,LED数码显示八段全部熄灭,有键按下时,则对应LED段点亮.EKO7sEcVR7AVktR43bpw3、使用静态串行显示模块显示键值.单片机最小应用系统1的 P1口接查询式键盘输出口,RXD接静态数码显示DIN,TXD接CLK.EKO7sEcVR7ORjBnOwcEd4、安装好伟福仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头.EKO7sEcVR72MiJTy0dTT5、启动计算机,打开伟福仿真软件,进入仿真环境.选择仿真器型号、仿真头型号、CPU 类型;选择通信端口,测试串行口.EKO7sEcVR7gIiSpiue7A6、打开TH14.ASM 源程序,编译无误后运行程序,在键盘上按下某个键,观察数显是否与按键值一致,键值从左至右为0~7.EKO7sEcVR7uEh0U1Yfmh7、可把源程序编译成OBJ 文件,烧录到89C51芯片中. 五、流程图及源程序1、流程图EKO7sEcVR7IAg9qLsgBX2KEY : MOV P1,存器置“1”EKO7sEcVR7WwghWvVhPE 主程序框MOV A,P1 ;读取键盘状况CJNE A, #0FFH,K00 ;有键按下AJMP KEY ;无键按下K00: ACALL DELAY ;延时去抖动MOV A,P1CJNE A,#0FFH,K01 ;确有键按下AJMP KEYK01: MOV R3, #8 ;8个键MOV R2,#0 ;键码MOV B,A ;暂存键值MOV DPTR,#K0TABK02: MOV A,R2MOVC A,@A+DPTR ;从键值表中取键值CJNE A,B,K04 ;键值比较K03: MOV A,P1 ;相等CJNE A #0FFH,K03 ;等键释放ACALL DELAY ;延时去抖动MOV A,R2 ;得键码RETK04: INC R2 ;不相等,到继续访问键值表DJNZ R3,K02MOV A,#0FFH ;键值不在键值中,即多键同时按下AJMP KEYK0TAB:DB 0FEH,0FDH,0FBH, 0F7H ;键值表DB 0EFH,0DFH,0BFH, 07FHDISP: MOV DBUF,AMOV DBUF+1,#16MOV DBUF+2,#16MOV DBUF+3,#16MOV DBUF+4,#16MOV R0, #DBUFMOV R1, #TEMPMOV R2, #5DP10: MOV DPTR,#SEGTABMOV A, @R0MOVC A, @A+DPTRMOV @R1, AINC R0INC R1DJNZ R2, DP10MOV R0, #TEMPMOV R1, #5DP12: MOV R2, #8MOV A, @R0DP13: RLC AMOV 0B0H,CCLR 0B1HSETB 0B1HDJNZ R2, DP13INC R0DJNZ R1, DP12RETSEGTAB: DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH,77H,7CH DB 58H, 5EH,79H,71H,00H,40H DELAY: MOV R4, #02HAA1: MOV R5,#0F8HAA: DJNZ R5,AADJNZ R4,AA1RETEND五、思考题1、程序如何确保每按一次键,只处理一次.六、原理图途。
单片机原理及应用实验报告

单片机原理及应用实验报告一、引言单片机(Microcontroller Unit,简称MCU)是一种集成电路芯片,内部集成了微处理器、存储器、输入输出接口和定时器等功能模块,广泛应用于各种电子设备和控制系统中。
本实验报告将介绍单片机的基本原理以及其在实际应用中的实验。
二、单片机的基本原理单片机的核心是微处理器,它负责执行程序指令。
单片机的存储器包括程序存储器(Program Memory)和数据存储器(Data Memory)。
程序存储器用于存储程序指令,数据存储器用于存储数据和中间结果。
单片机通过输入输出接口与外部设备进行通信,通过定时器来控制程序的执行时间。
三、单片机的应用实验1. LED闪烁实验LED闪烁实验是单片机入门实验的经典案例。
通过控制单片机的输出口,周期性地改变LED的状态,从而实现LED的闪烁效果。
这个实验可以帮助初学者了解单片机编程的基本概念和操作。
2. 温度测量实验温度测量实验可以通过连接温度传感器和单片机的输入口,实时地获取环境温度,并通过数码管或LCD显示器来显示温度数值。
这个实验可以帮助学生掌握单片机输入输出口的使用方法,以及模拟信号的处理和显示。
3. 蜂鸣器控制实验蜂鸣器控制实验可以通过连接蜂鸣器和单片机的输出口,实现对蜂鸣器的控制。
通过编写程序,可以使蜂鸣器发出不同的声音,如单调的蜂鸣声、警报声等。
这个实验可以帮助学生学习单片机的数字输出和PWM(脉冲宽度调制)技术。
4. 电机控制实验电机控制实验可以通过连接电机和单片机的输出口,实现对电机的控制。
通过编写程序,可以控制电机的转动方向和速度。
这个实验可以帮助学生理解单片机输出口的电流和电压特性,以及电机的控制原理。
5. 红外遥控实验红外遥控实验可以通过连接红外接收器和单片机的输入口,实现对红外遥控信号的解码和处理。
通过编写程序,可以实现对各种红外遥控器的解码和按键处理。
这个实验可以帮助学生学习单片机输入口的中断处理和红外通信原理。
单片机小实验

1、用位操作和总线操作两种方法完成以下题目1.熟练建立KEIL工程2.点亮第一个发光管.3.点亮最后一个发光管4.点亮1、3、5、75.点亮二、四、五、六6.尝试让第一个发光管闪烁7.尝试设计出流水灯程序2、1. 第一个发光管以间隔200ms闪烁2. 8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。
3. 8个发光管来回流动,第个管亮100ms,流动时让蜂鸣器发出“滴滴”声。
4. 用8个发光管演示出8位二进制数累加过程。
5. 8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms 间隔全部闪烁5次。
重复此过程。
6. 间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后5重复整个过程。
7. 间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。
3、1、利用定时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz。
2、利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个指示灯依次一个一个闪动,闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。
3、同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波。
4、用定时器以间隔500MS在6位数码管上依次显示0、1、2、3….C、D、E、F,重复。
4、1. 利用动态扫描方法在六位数码管上显示出稳定的654321.2. 用动态扫描方法和定时器1在数码管的前三位显示出秒表,精确到1%秒,即后两位显示1%秒,一直循环下去。
3. 利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO”。
初学者的单片机实验

11. 00-59秒计时器(利用软件延时)1.实验任务如下图所示,在AT89S51单片机的P0和P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个位。
2.电路原理图图4.11.13.系统板上硬件连线(1.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。
(2.把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。
4.程序设计内容(1.在设计过程中我们用一个存储单元作为秒计数单元,当一秒钟到来时,就让秒计数单元加1,当秒计数达到60时,就自动返回到0,重新秒计数。
(2.对于秒计数单元中的数据要把它十位数和个数分开,方法仍采用对10整除和对10求余。
(3.在数码上显示,仍通过查表的方式完成。
(4.一秒时间的产生在这里我们采用软件精确延时的方法来完成,经过精确计算得到1秒时间为1.002秒。
DELY1S: MOV R5,#100D2: MOV R6,#20D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1DJNZ R5,D2RET5.程序框图图4.11.26.汇编源程序Second EQU 30HORG 0START: MOV Second,#00HNEXT: MOV A,SecondMOV B,#10DIV ABMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,AMOV A,BMOVC A,@A+DPTRMOV P2,ALCALL DELY1SINC SecondMOV A,SecondCJNE A,#60,NEXTLJMP STARTDELY1S: MOV R5,#100D2: MOV R6,#20D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1DJNZ R5,D2RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END7. C语言源程序#include <AT89X51.H>unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};unsigned char Second;void delay1s(void){unsigned char i,j,k;for(k=100;k>0;k--)for(i=20;i>0;i--)for(j=248;j>0;j--);}void main(void){Second=0;P0=table[Second/10];P2=table[Second%10];while(1){delay1s();Second++;if(Second==60){Second=0;}P0=table[Second/10];P2=table[Second%10];}}12.可预置可逆4位计数器1.实验任务利用AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,用来指示当前计数的数据;用P1.4-P1.7作为预置数据的输入端,接四个拨动开关K1-K4,用P3.6/WR和P3.7/RD端口接两个轻触开关,用来作加计数和减计数开关。
单片机原理及应用实验

单片机原理及应用实验
单片机是一种微型计算机,它集成了中央处理器、内存、输入输出端口和其他外设接口等功能模块在一个芯片上。
单片机通过程序控制,能够完成各种处理任务,因此在很多电子产品中得到了广泛的应用。
单片机的工作原理是通过电子信号实现的。
当外部设备或传感器与单片机连接后,单片机可以通过输入输出端口收集、处理和输出数据。
单片机内部的中央处理器执行存储在其内部存储器中的程序,通过运算和逻辑操作控制外部设备或实现其他功能。
单片机的应用实验非常丰富。
下面介绍几个常见的实验:
1. LED闪烁实验:连接一个或多个LED到单片机的输出端口,通过编写程序控制LED的亮灭,实现不同的闪烁效果。
2. 温度测量实验:通过连接温度传感器到单片机的输入端口,采集传感器输出的模拟信号,进行模数转换后得到温度值,并通过输出端口显示或者通过通信接口传输到其他设备。
3. 蜂鸣器控制实验:连接蜂鸣器到单片机的输出端口,通过编写程序控制蜂鸣器的开关,实现不同的声音和音乐效果。
4. 数码管显示实验:连接数码管到单片机的输出端口,通过编写程序控制数码管的显示,实现数字、字符和动画等效果。
5. 无线通信实验:通过单片机的通信接口连接无线模块,实现与其他设备的无线数据传输,可以用于远程控制、传感器网络等应用。
以上是单片机原理及应用实验的简要介绍,单片机在电子技术领域有着广泛的应用前景,通过不断学习和实践,可以进一步掌握其原理和应用。
单片机实验内容

1.数据传送实验
要求:将片内从30H开始连续7个单元的内容送入从40H开始的地址单元中。
(先在30H~36H中送初值)
2.排序实验
要求:将片内从30H单元开始的10个无符号数,按由小到大的顺序排列。
(先在30H~39H中送排序初值)
3.并行接口实验
要求:使用P1口控制LED1~LED8进行花样显示。
显示顺序规律为:(1)8个LED依次左移单个点亮。
(2)8个LED依次左移逐个点亮。
(3)8个LED依次左移逐个熄灭,然后再从(1)进行循环,中间延迟时间1s。
4.定时器/计数器实验
要求:使用定时/计数器作为延时控制,在两灯P0.0和P0.1之间按1s互相闪烁。
5.模拟交通灯实验
要求:使用单片机P0口模拟交通灯控制。
模拟控制就是以红、绿、黄色4组12个发光二极管表示交通信号灯。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1,东西方向的绿灯亮,东西方向可以通车,而南北方向的红灯亮,南北方向的车禁止通行。
过一段时间转状态2,东西绿灯灭后,黄灯亮,延时几秒,南北仍然红灯。
再转状态3,南北方向的绿灯亮,南北方向可以通车,而东西方向的红灯亮,东西方向禁止车辆通行。
过一段时间转状态4,南北绿灯灭后亮黄灯,延时几秒,东西方向仍然红灯亮。
最后循环至状态1。
6.LED显示器
要求:设计一个59秒计时器,使用两位共阳极LED数码管将其显示出来。
实验电路图要求自己设计,可参考书上例子或上网查询。
40个经典单片机实验帮你成功

1. 实验任务
如图 4.3.1 所示,AT89S51 单片机的 P1.0-P1.3 接四个发光二极管 L1-L4, P1.4-P1.7 接了四个开关 K1-K4,编程将开关的状态反映到发光二极管上。 (开关闭合,对应的灯亮,开关断开,对应的灯灭)。
2. 电路原理图
图 4.3.1
即 P1.0=0 时,发光二极管 L1 亮;我们可以使用 SETB P1.0 指令使 P1.0
端口输出
高电平,使用 CLR P1.0 指
令使 P1.0
端口输出低电平。
5. 程序框图
如图 4.1.2 所
示
图 4.1.2
6. 汇编源程序 ORG 0 START: CLR P1.0 LCALL DELAY SETB P1.0 LCALL DELAY LJMP START DELAY: MOV R5,#20 ;延时子程序,延时 0.2 秒 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END
3. 系统板上硬件连线
(1. 把“单片机系统”区域中的 P1.0-P1.3 用导线连接到“八路发光二 极管指示模块”区域中的 L1-L4 端口上;
(2. 把“单片机系统”区域中的 P1.4-P1.7 用导线连接到“四路拨动开 关”区域中的 K1-K4 端口上;
4. 程序设计内容
(1. 开关状态检测
对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状 态,根据每个开关的状态让相应的发光二极管指示,可以采用 JB P1.X,REL 或 JNB P1.X,REL 指令来完成;也可以一次性检测四路开关状态,然后让其指 示,可以采用 MOV A,P1 指令一次把 P1 端口的状态全部读入,然后取高 4 位的 状态来指示。
单片机实验内容

;然后继续两个灯亮两个灯灭的路口的正常状态,正常状态是每3秒钟信号切换一次;R7为1代表有急救车通过,为0表示正常状态
;需要的硬件连线有P1.0~P1.4连发光二极管,单片机的P3.0与P3.1连EXB51仿真板旁边的RXD与TXD
SUBB A,R3
JC LOOP1
SETB F0
MOV A,R3
XCH A,@R1
DEC R1
XCH A,@R1
INC R1
LOOP1:MOV A,@R1
DJNZ R5,LOOP
JB F0,START
ORG 0000H
LJMP START
ORG 0100H
START: MOV R2,#10H
MOV R0,#40H
MOV A,#00H
LP:MOV @R0 ,A
INC R0
INC A
DJNZ R2,LP
MOV R2 ,#08H
MOV R0,#40H
MOV R1,#50H
LP1:MOV A,@R0
INC R0
ADD A,@R0
MOV @R1,A
INC R0
TIME0:
PUSH PSW
CJNE R7,#0H,SOS
DJNZ R0,TIMEOUT
MOV R0,#30
CPL P1.0
CPL P1.1
CPL P1.2
CPL P1.3
MOV B,P1
TIMEOUT:
MOV TH0,#03CH
MOV R0,#30
单片机代码实验

2014年EDA 实验第一次实验:实验1:QII 软件及实验板的使用;用图形输入法和语言输入法完成点灯实验(用两个按键控制两个灯的亮灭:灯的状态随按键状态改变而改变)。
完成软件仿真。
实验2:联控点灯实验:用两个按键独立控制同一个灯亮灭,第三个按键同时控制该灯和另一个灯亮灭。
实验3:流水灯实验:完成一个8路流水灯控制实验,要求有以下3种花型:1)8路灯同时亮灭;2)从左至右再从右至左逐个亮(每次只有1路亮);3)8路灯每次4路灯亮,4路灯灭,且亮灭相间,交替亮灭。
用3个按键控制3种花型。
按下花型按键就一直显示相应花型,再按该键可暂停。
可设置1个复位键关闭显示。
(亮灭时间自定。
)第二次实验:实验4:数据分配器实验:用2个按键代表输入数据in (2位),用2个按键代表选择控制数据位s1s0,用四组发光管(每组2位)代表四路数据输出out0-out3。
当输入数据或控制数据改变时,要求输出数据进行相应变化(原理和真值表如下)。
实验5:七段译码器实验:用一个按键代表数据输入,每按一次数据加一,从0开始到F ,再到0,依次循环,相应数字在数码管上显示。
第三次实验:实验6:数控分频器实验:用24MHz 时钟分频,通过不同按键控制输出不同的频率信号,输出信号用LED 指示。
1)1Hz 频率信号;2)10Hz 频率信号;3)0.5Hz 频率信号。
实验7:加法计数器实验在时钟信号(选择1Hz)作用下,通过使能端和复位信号完成加法计数器的计数。
用2个按键分别表示使能和复位,用4个发光管表示计数的二进制结果。
第四次实验:实验8:动态扫描实验:用4个按键分别代表加、减、暂停、复位,四位数码管代表四位十进制数,从0000开始到9999循环,自动计数,数据显示时间不大于1秒。
第五次实验:实验9:序列检测实验:用一个按键代表时钟,一个按键代表输入数据,(时钟和数据要用LED显示其电平或数值,)当检测到1101序列时,蜂鸣器响动,指示灯点亮。
给初学单片机学员的40个实验

1.闪烁灯1.实验任务如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
2.电路原理图图4.1.13.系统板上硬件连线把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4.程序设计内容(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒MOV R6,#20 2个机器周期 2D1: MOV R7,#248 2个机器周期 2 2+2×248=498 20×DJNZ R7,$ 2个机器周期2×248498DJNZ R6,D1 2个机器周期2×20=4010002因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。
如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2).输出控制如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5.程序框图如图4.1.2所示图4.1.26.汇编源程序ORG 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY: MOV R5,#20 ;延时子程序,延时0.2秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <AT89X51.H>sbit L1=P1^0;void delay02s(void) //延时0.2秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}void main(void){while(1){L1=0;delay02s();L1=1;delay02s();}}2.模拟开关灯1.实验任务如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。
Proteus仿真单片机实验

目录引言 (2)实验1 PROTUES环境及LED闪烁综合实验 (7)实验2 多路开关状态指示 (10)实验3 报警产生器 (13)实验4 I/O并行口直接驱动LED显示 (16)实验5 按键识别方法之一 (19)实验6 一键多功能按键识别技术 (22)实验7 定时计数器T0作定时应用技术 (25)实验8定时计数器T0作定时应用技术 (28)实验9 “嘀、嘀、......”报警声 (32)实验10 8X8 LED点阵显示技术 (36)实验11电子琴 (40)引言单片机体积小,重量轻,具有很强的灵活性而且价格便宜,具有逻辑判断,定时计数等多种功能,广泛应用于仪器仪表,家用电器,医用设备的智能化管理和过程控制等领域。
以单片机为核心的嵌入式系统已经成为目前电子设计最活跃的领域之一。
在嵌入式系统的中,开发板成本高,特别是对于大量的初学者而言,还可能由于设计的错误导致开发板损坏。
利用Proteus我们可以很好地解决这个问题,由此我们可以快速地建立一个单片机仿真系统。
1. Proteus介绍Proteus是英国Labcenter Electronics公司开发的一款电路仿真软件,软件由两部分组成:一部分是智能原理图输入系统ISIS(Intelligent Schematic Input System)和虚拟系统模型VSM(Virtual Model System);另一部分是高级布线及编辑软件ARES (Advanced Routing and Editing Software)也就是PCB。
1.1 Proteus VSM的仿真Proteus可以仿真模拟电路及数字电路,也可以仿真模拟数字混合电路。
Proteus可提供30多种元件库,超过8000种模拟、数字元器件。
可以按照设计的要求选择不同生产厂家的元器件。
此外,对于元器件库中没有的元件,设计者也可以通过软件自己创建。
除拥有丰富的元器件外,Proteus还提供了各种虚拟仪器,如常用的电流表,电压表,示波器,计数/定时/频率计,SPI调试器等虚拟终端。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.闪烁灯1.实验任务如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
2.电路原理图图4.1.13.系统板上硬件连线把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4.程序设计内容(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒MOV R6,#20 2个机器周期 2D1: MOV R7,#248 2个机器周期 2 2+2×248=498 20× DJNZ R7,$ 2个机器周期2×248 498DJNZ R6,D1 2个机器周期2×20=40 10002因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。
如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2).输出控制如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5.程序框图如图4.1.2所示图4.1.26.汇编源程序ORG 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY: MOV R5,#20 ;延时子程序,延时0.2秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <AT89X51.H>sbit L1=P1^0;void delay02s(void) //延时0.2秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}void main(void){while(1){L1=0;delay02s();delay02s();}}2.模拟开关灯1.实验任务如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。
2.电路原理图图4.2.13.系统板上硬件连线(1).把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上;(2).把“单片机系统”区域中的P3.0端口用导线连接到“四路拨动开关”区域中的K1端口上;4.程序设计内容(1).开关状态的检测过程单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关K1拨上去,即输入高电平,相当开关断开,当拨动开关K1拨下去,即输入低电平,相当开关闭合。
单片机可以采用JB BIT,REL或者是JNB BIT,REL指令来完成对开关状态的检测即可。
(2).输出控制如图3所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5.程序框图图4.2.26.汇编源程序 ORG 00HSTART: JB P3.0,LIGCLR P1.0SJMP STARTLIG: SETB P1.0SJMP STARTEND7. C语言源程序#include <AT89X51.H>sbit K1=P3^0;sbit L1=P1^0;void main(void){while(1){if(K1==0){L1=0; //灯亮}else{L1=1; //灯灭}}}3.多路开关状态指示1.实验任务如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。
(开关闭合,对应的灯亮,开关断开,对应的灯灭)。
2.电路原理图图4.3.13.系统板上硬件连线(1.把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4端口上;(2.把“单片机系统”区域中的P1.4-P1.7用导线连接到“四路拨动开关”区域中的K1-K4端口上;4.程序设计内容(1.开关状态检测对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用JB P1.X,REL 或JNB P1.X,REL指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用MOV A,P1指令一次把P1端口的状态全部读入,然后取高4位的状态来指示。
(2.输出控制根据开关的状态,由发光二极管L1-L4来指示,我们可以用SETB P1.X和CLR P1.X指令来完成,也可以采用MOV P1,#1111XXXXB方法一次指示。
5.程序框图读P1口数据到A CC中A CC内容右移4次A CC内容与F0H相或A CC内容送入P1口<![endif]-->图4.3.26.方法一(汇编源程序)ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR ARR ARR AORl A,#0F0HMOV P1,ASJMP STARTEND7.方法一(C语言源程序)#include <AT89X51.H> unsigned char temp;void main(void){while(1){temp=P1>>4;temp=temp | 0xf0;P1=temp;}}8.方法二(汇编源程序)ORG 00HSTART: JB P1.4,NEXT1 CLR P1.0SJMP NEX1NEXT1: SETB P1.0NEX1: JB P1.5,NEXT2CLR P1.1SJMP NEX2NEXT2: SETB P1.1NEX2: JB P1.6,NEXT3CLR P1.2SJMP NEX3NEXT3: SETB P1.2NEX3: JB P1.7,NEXT4CLR P1.3SJMP NEX4NEXT4: SETB P1.3NEX4: SJMP STARTEND9.方法二(C语言源程序)#include <AT89X51.H>void main(void){while(1){if(P1_4==0){P1_0=0;}else{P1_0=1;}if(P1_5==0){P1_1=0;}else{P1_1=1;}if(P1_6==0){P1_2=0;}else{P1_2=1;}if(P1_7==0){P1_3=0;}else{P1_3=1;}}}4.广告灯的左移右移1.实验任务做单一灯的左移右移,硬件电路如图4.4.1所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。
2.电路原理图图4.4.13.系统板上硬件连线把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。
4.程序设计内容我们可以运用输出端口指令MOV P1,A或MOV P1,#DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。
每次送出的数据是不同,具体的数据如下表1所示:表15.程序框图图4.4.26.汇编源程序ORG 0START: MOV R2,#8MOV A,#0FEHSETB CLOOP: MOV P1,ALCALL DELAYRLC ADJNZ R2,LOOPMOV R2,#8LOOP1: MOV P1,ALCALL DELAYRRC ADJNZ R2,LOOP1LJMP STARTDELAY: MOV R5,#20 ;D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <AT89X51.H>unsigned char i;unsigned char temp;unsigned char a,b;void delay(void){unsigned char m,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);}void main(void){while(1){temp=0xfe;P1=temp;delay();for(i=1;i<8;i++){a=temp<<i;b=temp>>(8-i);P1=a|b;delay();}for(i=1;i<8;i++){a=temp>>i;b=temp<<(8-i);P1=a|b;delay();}}}5.广告灯(利用取表方式)1.实验任务利用取表的方法,使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。
2.电路原理图图4.5.13.系统板上硬件连线把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。
4.程序设计内容在用表格进行程序设计的时候,要用以下的指令来完成(1).利用MOV DPTR,#DATA16的指令来使数据指针寄存器指到表的开头。