单片机个实验代码详细
单片机程序流程图及源代码
单片机上机实验报告【实验一】端口实验,掌握通过端口编程实现数据输出和输入的方法,并观察结果。
实验内容:1)输出实验:假定4个端口全部连接发光二极管,编程实现所有发光二极管同时亮,延迟一定时间(自定)后,又同时灭,如此循环。
2)输入:从P0口输入某个数据到累加器A,打开观察窗口观察数据是否进入累加器A。
实现方式:通过peripherals实现端口数据观察实验。
程序流程图:将P0到P3端口先赋值为0,调用延迟后,再赋1,然后循环执行。
源代码:ORG 0000H ;程序入口地址LJMP MAIN ;跳转到主程序ORG 0300H ;主程序地址MAIN:MOV P0,#00H;MOV P1 ,#00H;MOV P2 ,#00H;MOV P3 ,#00H ;P0~P3均赋值为0ACALL DEL;调用延迟MOV P0 ,#0FFH;MOV P1 ,#0FFH;MOV P2 ,#0FFH;MOV P3 ,#0FFH;P0~P3均设为1MOV A,P0;将P0口值赋给累加器ACALL DEL;AJMP MAIN;跳转到主程序入口ORG 0200H;延迟程序入口地址DEL:MOV R5,#04H;寄存器实现延迟,F3:MOV R6,#0FFH;若主频为12MHZ则F2:MOV R7,#0FFH;延时为256*256*4F1:DJNZ R7,F1;0.26S,人眼可分辨DJNZ R6,F2;DJNZ R5,F3;RET;从延迟程序返回END;结束3.假设P0口外接一个数码管(共阴),如图,请在数码管上轮流显示数字0~9(采用软件延时)。
程序流程图:将数码管的真值编码0~9依次赋给P0并调用延迟,然后循环运行程序即可。
源代码:ORG 0000H; 程序入口SJMP MAIN; 跳转到主程序ORG 0300H; 主程序入口地址MAIN:MOV P0,#0FCH; 将数码管0的编码赋给P0口ACALL DELAY; 调用延迟,使数码管亮0持续0.33SMOV P0,#60H; show 1ACALL DELAY;MOV P0,#0DAH; show 2ACALL DELAY;MOV P0,#0F2H; show 3ACALL DELAY;MOV P0,#66H; show 4ACALL DELAY;MOV P0,#0B6H; show 5ACALL DELAY;MOVP0,#0BEH; show 6ACALL DELAY;MOV P0,#0E0H; show 7ACALL DELAY;MOV P0,#0FEH; show 8ACALL DELAY;MOV P0,#0F6H; show 9ACALL DELAY;AJMP LOOP; 跳转到主程序入口ORG 0200H; 延迟程序入口DEL:MOV R5,#05H; 采用软件延迟,若主频为12MHz,则DEL1:MOV R6,#0FFH; 定时时间为256*256*5*1uS=0.33S,DEL2:MOV R7,#0FFH; 人眼可分辨。
(单片机)
实验四一、实验题目:当K1键按下后,首先使蜂鸣器响一声,然后使LED1-LED8完成3种闪亮的花样(自己定义),每一种花样循环3次,然后周而复始。
二、keil代码:/*当K1键按下后,首先使蜂鸣器响一声,然后使LED1- LED8完成3种闪亮的花样(自己定义),每一种花样循环3次,然后周而复始。
*/#include<reg51.h>sbit P2_0=P2^0;//接蜂鸣器sbit P2_7=P2^7;sbit P1_0=P1^0;sbit P1_1=P1^1;sbit P1_2=P1^2;sbit P1_3=P1^3;sbit P1_4=P1^4;sbit P1_5=P1^5;sbit P1_6=P1^6;sbit P1_7=P1^7;void DELAY(int time)//延时{while(time--){}}void BUZ_ON(){if(P2_7==0){P2_0=1;}else{ P2_0=0;}}void F1(void){int i;char data_group_mide[5]={0x00,0x18,0x24,0x42,0x81};//向两边延伸for(i=0;i<5;i++){P1=data_group_mide[i];DELAY(20000);}P1=0x00;}void F2(void){int i;char data_group_left[8]={0xFF,0x7F,0x3F,0x0F,0x07,0x03,0x01,0x00};//向左延伸for(i=0;i<8;i++){P1=data_group_left[i];DELAY(20000);P1=0x00;}void F3(void){int i;char date_group_right[8]={0x00,0x01,0x03,0x07,0x0f,0x3f,0x7f,0xff};//向右延伸for(i=0;i<8;i++){P1=date_group_right[i];DELAY(20000);}P1=0x00;}void main(){unsigned int i; //每种花样循环三次P2_0=0;P2_7=1;BUZ_ON();P1=0x00;while(P2_7==0){for(i=0;i<3;i++)//花样1 {F1();}for(i=0;i<3;i++)//花样2 {F2();}for(i=0;i<3;i++)//花样3 {F3();}}}三、protues电路图:四、实验截图:五、实验小结:通过本次实验,我们熟悉了protues的编译环境,对以后的单片机学习有很大帮助。
单片机代码例子
单片机代码例子
单片机是一种集成电路,具有微处理器、存储器和各种输入输出接口,可用于控制各种电子设备。
下面是一些单片机代码例子:
1. LED闪烁:通过控制IO口的高低电平,使LED灯交替闪烁,实现简单的呼吸灯效果。
2. 温度测量:利用温度传感器采集环境温度,并将温度值转换为数字信号,通过串口输出或显示在LCD屏幕上。
3. 红外遥控:通过接收红外信号,并解码得到对应的遥控指令,实现对电视、空调等家电的遥控操作。
4. 超声波测距:利用超声波传感器发射超声波,并接收反射回来的信号,通过计算时间差来测量到障碍物的距离。
5. 矩阵键盘输入:通过矩阵键盘将按键输入转换为数字或字符信息,并进行相应的处理和反馈。
6. 电机控制:通过PWM技术控制直流电机的转速和方向,实现电机的正转、反转和变速等操作。
7. 温湿度监测:利用温湿度传感器采集环境的温度和湿度值,并将数据通过无线通信模块传输到上位机进行实时监测。
8. 蜂鸣器控制:通过控制IO口输出高低电平,实现蜂鸣器的开关
和不同音调的发声。
9. 光线感应:利用光敏电阻或光电二极管检测环境光线强度,并根据光线强度的变化做出相应的控制。
10. 电子钟:通过RTC模块获取当前的时间,并在LCD屏幕上显示或通过蜂鸣器报时。
以上是一些常见的单片机代码例子,涵盖了单片机在各个领域的应用。
通过编写这些代码,可以深入理解单片机的工作原理和应用技巧,为后续的项目开发打下基础。
当然,这只是冰山一角,单片机的应用领域非常广泛,还有许多其他有趣的项目等待我们去探索。
单片机整套实验及程序(交通灯_跑马灯等)
实验1 跑马灯实验一、实验目的●初步学会Proteus ISIS和uVision2单片机集成开发环境的使用;●初步掌握采用汇编语言与C语言开发单片机系统的程序结构;●掌握80C51单片机通用I/O口的使用;●掌握单片机内部定时/计数器的使用及编程方法以及中断处理程序的编写方法。
二、实验设备及器件●硬件:PC机,HNIST-1型单片机实验系统●软件:Proteus ISIS单片机仿真环境,uVision2单片机集成开发环境三、实验内容●编写一段程序,采用P1口作为控制端口,使与P1口相接的四个发光二极管〔D1、D2、D3、D4〕按照一定的方式点亮。
如点亮方式为:先点亮D1,延时一段时间,再顺序点亮D2……D4,然后又是D4……D1,同时只能有一个灯亮;然后每隔一段时间一次使相邻两个灯亮,三个灯亮,四个灯亮,最后闪烁三次,接着循环变化。
●基于Proteus ISIS仿真环境完成上述功能的仿真。
●基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行。
四、实验原理图图3.1 跑马灯实验电路原理图电路原理图如上图3.1所示,AT89S52的P1.0~P1.3控制4个发光二极管,发光二极管按照一定次序发光,相邻发光二极管的发光时间间隔可以通过定时器控制,还可以通过软件延时实现。
五、软件流程图与参考程序●主程序流程图如下:●参考程序#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar aa,num,speed,flag;uchar code table[]={0x0e,0x0d,0x0b,0x07};uchar code table1[]={0x0a,0x05,0x09,0x06};uchar codetable2[]={0x0c,0x09,0x03,0x08,0x01,0x0e,0x0c,0x08,0x00};void delay(uint z)//延时函数{uint x;uchar y;for(x=z;x>0;x--)for(y=200;y>0;y--);}void init()//条件初始化函数{ flag=0;speed=10;//控制跑马灯流水速度TMOD=0x01;//中断方式TH0=(65535-50000)/256;TL0=(65536-50000)%256;//初值EA=1;//翻开总中断ET0=1;//翻开外中断0TR0=1;}void main(){init();//调用初始化函数while(1){if(flag){delay(2000);//调用延时函数for(num=0;num<4;num++)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=3;num>0;num--)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=0;num<4;num++)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=3;num>0;num--)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=0;num<6;num++)//两个,三个,四个跑马灯依次闪烁{P1=table2[num];delay(2000);}for(num=0;num<5;num++)//闪烁5次{P1=0xff;//全暗delay(2000);P1=0X00;//全亮delay(2000);}speed=speed-3;//变速if(speed==4){speed=10;}}}}void timer0() interrupt 1//中断函数{TH0=(65535-50000)/256;TL0=(65536-50000)%256;aa++;if(aa==speed){aa=0;flag=1;}}六、实验思考题●请用汇编指令完本钱实验内容,深刻理解汇编语言程序设计结构。
51单片机流水灯实验汇编代码
ORG 0000HAJMP MAINORG 000BHAJMP TIME0ORG 0030HMAIN: MOV TMOD,01H ;设置定时器工作方式为1MOV TH0, #HIGH(65536-10000) ;MOV TL0, #LOW(65536-10000) ;设10MS初始值SETB EA ;开总中断SETB ET0 ;允许定时器T0MOV 20H, #100MOV 21H, #10 ;20H、21H为软件计数器START:MOV A,#0FEHMOV R0, #08HONE: MOV P2, A ;输出到P2口,每次亮一个灯CALL DELAY ;调用延时程序RL A ;通过CY循环左移DJNZ R0, ONEMOV R1,#04HMOV A,#0FCHTWO: MOV P2, A ;输出到P2口,每次亮两个灯CALL DELAYRL A ;RL A ;循环左移两次,即两个灯同时点亮DJNZ R1, TWOMOV R2, #03HMOV A, #0FCHCLR C ;进位标志位清零THREE:MOV P2, A ;输出到P2口,每次亮三个灯CALL DELAYRLC A ;RLC A ;RLC A ;通过CY进行左移,将做高位溢出的数放入CY中DJNZ R2, THREEMOV P2, #00H ;将所有灯同时点亮CALL DELAYJMP START ;重复以上操作DELAY: ;精确延时子程序DELAYCLR 30H ;标志位30H清零SETB TR0 ;启动定时器T0loop: JBC 30H,LOOP1 ;查询标志位状态AJMP LOOPloop1:CLR TR0 ;关闭定时器T0RETTIME0:MOV TH0, #HIGH(65536-10000) ;MOV TL0, #LOW(65536-10000) ;重设10MS定时DJNZ 20H, GOMOV 20H, #100DJNZ 21H, GOMOV 21H, #10SETB 30H ;计数100*10Ms时,将标志位30H置位GO: RETI ;中断返回END。
单片机实验代码
实验三:查表和散转ORG 0000HLJMP MAINORG 3000H MAIN: MOV DPTR,#0000HMOVX A,@DPTRMOV B,AANL A,#0FHMOV DPTR,#TABLEMOVC A,@A+DPTRMOV 30H,ACLR 00HCLR 01HCLR 02HCLR 03HCLR 04HCLR 05HCLR 06HCLR 07HCLR 08HCLR 09HCLR 0AHCLR 0BHCLR 0CHCLR 0DHCLR 0EHCLR 0FHMOV A,BSWAP AANL A,#0FHMOV R0,ARL AADD A,R0MOV DPTR,#ZYJMP @A+DPTRZY:LJMP PM0LJMP PM1LJMP PM2LJMP PM3LJMP PM4LJMP PM5LJMP PM6LJMP PM7LJMP PM8LJMP PM9LJMP PMALJMP PMBLJMP PMCLJMP PMDLJMP PMELJMP PMFPM0:SETB 00HAJMP HEREPM1:SETB 01HAJMP HEREPM2:SETB 02HAJMP HEREPM3:SETB 03HAJMP HEREPM4:SETB 04HAJMP HEREPM5:SETB 05HAJMP HEREPM6:SETB 06HAJMP HEREPM7:SETB 07HAJMP HEREPM8:SETB 08HAJMP HEREPM9:SETB 09HAJMP HEREPMA:SETB 0AHAJMP HEREPMB:SETB 0BHAJMP HEREPMC:SETB 0CHAJMP HEREPMD:SETB 0DHAJMP HEREPME:SETB 0EHAJMP HEREPMF:SETB 0FHAJMP HERETABLE:DB00H,11H,22H,33H,44H,55H,66H,77H,88H,99H ,0AAH,0BBH,0CCH,0DDH,0EEH,0FFHHERE:END实验一:移数和清零ORG 3000HMOV R2,#10HMOV R0,#50HLP: MOV @R0,#00HINC R0DJNZ R2,LPMOV R2,#40HMOV DPTR,#0010HMOV A,#0000HLP1:MOVX @DPTR,AINC DPTRDJNZ R2,LP1MOV R0,#30HMOV DPTR,#0000HMOV R2,#10HLOOP:MOV A,@R0MOVX @DPTR,AINC R0INC DPTRDJNZ R2,LOOPMOV R0,30HCJNE @R0,#0FH,BDMOV A,#0FHADD A,@R0MOV 40H,ASETB 01HAJMP HEREBD:JC XYCLR CYMOV A,@R0SUBB A,#0FHMOV 40H,ASETB 02HAJMP HEREXY:MOV A,@R0MOV B,@R0MUL ABMOV 40H,AMOV 41H,BSETB 00HHERE:AJMP HEREEND实验四:外中断ORG 0000HLJMP MAINORG 0003HLJMP ZCX1ORG 0013HLJMP ZCX2 MAIN:MOV P1,#00HMOV IE,#10000101BSETB IT0SETB IT1HERE:LJMP HEREZCX1:JB P1.7,QLSETB CYMOV A,P1RLC AMOV P1,ALJMP JIESHU1QL:MOV P1,#00H JIESHU1:RETIZCX2:JNB P1.0,ZYCLR CYMOV A,P1RRC AMOV P1,ALJMP JIESHU2ZY:MOV P1,#0FFH JIESHU2: RETI实验五:定时器ORG 0000HAJMP MAINORG 0003HAJMP WZDORG 000BHAJMP DSZD MAIN:CLR P1.0CLR P1.1MOV R1,#00HSETB IT0SETB EX0SETB EASJMP $WZD:INC R1CJNE R1,#02H,DSYMCLR TR0MOV R1,#00HCLR P1.0CLR P1.1LJMP JISHU DSYM:SETB P1.0CLR P1.1CLR AMOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HSETB ET0SETB EASETB TR0 JISHU:RETIMOV TL0,#0B0HINC ACJNE A,#0AH,JIESHUCPL P1.0CPL P1.1CLR AJIESHU:RETI实验六:定时器和计数器ORG 0000HAJMP MAINORG 000BHAJMP ZD0ORG 0013HAJMP ZDORG 001BHAJMP ZD1ORG 0030HMAIN:MOV TMOD,#01100001BCLR AMOV P1,AMOV R1,#00HMOV TH0,#3CHMOV TL0,#0B0HMOV TH1,#0FFHMOV TL1,#0FFHSETB IT1SETB EX1SETB ET0SETB ET1SETB EASJMP $ZD:CPL TR0CPL TR1MOV C,TR0JC AAAMOV P1,#00HCLR AAAA: RETIMOV TL0,#0B0HINC R1CJNE R1,#0AH,JIESHUMOV R1,#00HCPL P3.2JIESHU:RETIZD1:INC AMOV P1,ARETI实验二:加法和排序ORG 0000HLJMP MAINORG 3000HMAIN:MOV R0,#30HMOV R1,#40HMOV R2,#10CLR CYHE:MOV A,@R0ADDC A,@R1MOV @R1,AINC R0INC R1DJNZ R2,HEMOV R0,#40HMOV R1,#50HMOV R2,#10YW0:MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R2,YW0MOV R0,#40HMOV R1,#60HMOV R2,#10YW1:MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R2,YW1PX:CLR 00HMOV R0,#60HMOV R2,#9 PXA:MOV A,@R0INC R0SUBB A,@R0JC PX2SETB 00HMOV A,@R0DEC R0XCH A,@R0INC R0XCH A,@R0 PX2:DJNZ R2,PXAJB 00H,PXEND 实验七:交通灯S_OK BIT 20H.0ORG 0000HSJMP MAINORG 000BHAJMP SECONDORG 0030H MAIN:MOV P1,#00HMOV SP,#60HCLR EAMOV TMOD,#01HMOV TL0,#0B0HMOV TH0,#3CHSETB ET0SETB PT0SETB EASETB TR0MOV R0,#10 TEST:MOV P1,#03HMOV A,P1JB ACC.0,QK1JB ACC.1,ZIDONGAJMP QK0SJMP TEST ZIDONG:ACALL DXHACALL NBHAJMP TESTQK0:MOV A,#00100100BMOV P1,AAJMP TESTQK1:JB ACC.1,QK11AJMP ZIDONGQK11:MOV A,#10010000BMOV P1,ALP0:JNB S_OK,LP0CLR S_OKMOV A,#00000000BMOV P1,ALP1:JNB S_OK,LP1CLR S_OKLJMP TESTSECOND:CLR EACLR S_OKDEC R0MOV A,R0JZ SECOND_1SJMP SECOND_2 SECOND_1:MOV R0,#10SETB S_OK SECOND_2:MOV TH0,#3CHMOV TL0,#0B0HSETB EARETIDXH:MOV A,#01000100BMOV P1,AMOV R1,#4TLP0:JNB S_OK,TLP0CLR S_OKDJNZ R1,TLP0MOV A,#10000100BMOV P1,ATLP1:JNB S_OK,TLP1CLR S_OKRETNBH:MOV A,#00101000BMOV P1,AMOV R1,#4TLP2:JNB S_OK,TLP2CLR S_OKDJNZ R1,TLP2MOV A,#00110000BMOV P1,ATLP3:JNB S_OK,TLP3CLR S_OKRETEND实验八:串行口主机ORG 0000HAJMP MAINORG 000BHAJMP DINGSHIORG 0030HMAIN:MOV TMOD,#20HMOV TL0,#0B0HMOV TH0,#3CHCLR P3.2CLR P3.3MOV TL1,#0FAHMOV TH1,#0FAHMOV R0,#0AHSETB ET0SETB EASETB TR0SETB TR1MOV PCON,#00HCLR ESCLR TIMOV SCON,#40HSETB RENSJMP $DINGSHI:MOV TL0,#0B0HMOV TH0,#3CHDEC R0CJNE R0,#00H,JIESHUMOV R0,#0AH; MOV TL1,#0FAH; MOV TH1,#0FAH; SETB TR1; MOV PCON,#00HMOV A,P1MOV B,AMOV SBUF,ASETB P3.4WAIT0:JNB TI,WAIT0CLR P3.4CLR TICLR RIWAIT1:JNB RI,WAIT1MOV A,SBUFCJNE A,B,CHUCUOSETB P3.2CLR P3.3AJMP JIESHU CHUCUO:CLR P3.2SETB P3.3 JIESHU:RETIEND从机ORG 0000HAJMP MAIN MAIN:MOV TMOD,#20HMOV TL1,#0FAHMOV TH1,#0FAHSETB TR1MOV PCON,#00HCLR ET1CLR ESCLR EAMOV SCON,#40H START:CLR RIMOV A,SBUFWAIT0:JNB RI,WAIT0MOV P1,ACLR RICLR TIMOV SBUF,AWAIT1:JNB TI,WAIT1CLR TIAJMP STARTEND实验九:定时.计数和显示ORG 0000HAJMP MAINORG 0003HAJMP EINT0ORG 0013HAJMP EINT1ORG 001BHAJMP TINT1MAIN:MOV TMOD,#00010110B MOV TH1,#3CHMOV TL1,#0B0HMOV TH0,#00HMOV TL0,#00HMOV R2,#00HSETB IT0SETB IT1SETB EX0SETB EX1SETB ET1CLR TR0CLR TR1CLR P1.0SETB EATEST:JNB TR1,XUEHAOJNB TR0,XUEHAOACALL DISPAJMP TEST XUEHAO:ACALL XHAJMP TESTEINT0:CPL TR1RETIEINT1:CPL TR0RETITINT1:MOV TH1,#3CHMOV TL1,#0B0HINC R2CJNE R2,#10,JIEHSUCPL P1.0MOV R2,#00H JIEHSU:RETIXH:MOV 35H,#3FHMOV 34H,#6FHMOV 33H,#5BHMOV 32H,#66HMOV 31H,#66HMOV 30H,#06HMOV R3,#6MOV R0,#30HMOV R5,#01HLP2:MOV DPTR,#8002HMOV A,R5MOVX @DPTR,ARL AMOV R5,AMOV DPTR,#8004HMOV A,@R0MOVX @DPTR,AINC R0ACALL DELAY1DJNZ R3,LP2RETDISP:MOV A,TL0MOV B,#100DIV ABMOV 32H,AMOV A,#10XCH A,BDIV ABMOV 31H,AMOV 30H,BMOV R6,#3MOV R1,#30HLP:MOV A,@R1MOV DPTR,#TABMOVC A,@A+DPTRMOV @R1,AINC R1DJNZ R6,LPMOV R6,#3MOV R1,#30HMOV R7,#01HLP1:MOV DPTR,#8002HMOV A,R7MOVX @DPTR,ARL AMOV R7,AMOV DPTR,#8004HMOV A,@R1MOVX @DPTR,AINC R1ACALL DELAY2DJNZ R6,LP1RET(显示子程序可以是下面的笨方法:DISP:MOV A,TL0MOV B,#100DIV ABMOV 30H,AMOV A,BMOV B,#10DIV ABMOV 31H,AMOV 32H,BMOV DPTR,#TABMOV A,30HMOVC A,@A+DPTRMOV DPTR,#8004HMOVX @DPTR,AMOV A,#04HMOV DPTR,#8002HMOVX @DPTR,ALCALL DELAY2MOV DPTR,#TABMOV A,31HMOVC A,@A+DPTRMOV DPTR,#8004HMOVX @DPTR,AMOV A,#02HMOV DPTR,#8002HMOVX @DPTR,ALCALL DELAY2MOV DPTR,#TABMOV A,32HMOVC A,@A+DPTRMOV DPTR,#8004HMOVX @DPTR,AMOV A,#01HMOV DPTR,#8002HMOVX @DPTR,AACALL DELAY2RET)DELAY1:MOV R6,#1000DJNZ R6,$RETDELAY2:MOV R5,#200DJNZ R5,$RETTAB:DB 3FH,06H,5BH,4FHDB 66H,6DH,7DH,07HDB 7FH,6FHEND。
单片机实验程序及流程图
《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义三.程序清单及程序流程框图ORG 0000H Array LJMP MAINMAIN: MOV R0,#30HMOV R2,#10HCLR AA1: MOV @R0,AINC R0INC ADJNZ R2,A1MOV R0,#30HMOV R1,#40HMOV R2,#10HA2: MOV A, @R0MOV @R1,AINC R0INC R1DJNZ R2, A2MOV R1,#40HMOV DPTR ,#4800HMOV R2, #10HA3: MOV A,@R1MOVX @DPTR ,AINC R1INC DPTRDJNZ R2,A3MOV SP,#60HMOV R2,#10HMOV DPTR ,#4800HPUSH DPLPUSH DPHMOV DPTR,#5800HMOV R3,DPLMOV R4,DPHA4: POP DPHPOP DPLMOVX A,@DPTRINC DPTRPUSH DPLPUSH DPHMOV DPL,R3MOV DPH,R4 MOVX @DPTR,A INC DPTRMOV R3,DPLMOV R4,DPHDJNZ R2,A4MOV R0,#50HMOV DPTR,#5800H MOV R2,#10HA5: MOVX A,@DPTR MOV @R0,AINC R0 INC DPTR DJNZ R2,A5POP DPH POP DPL HERE: LJMP HEREEND《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义三.实验电路四.程序清单及流程图程序一ORG 0000HLJMP MAIN ORG 000BH LJMP IPTO MAIN: MOV SP, #30H MOV TMOD, #01HCLR 00H SETB EA SETB ET0 MOV TH0, #3CH MOV TL0, #0B0H MOV R1, #14H SETB TR0 MOV A, #0feH MOV P1, A NT: JNB 00H, NT RL A MOV P1, ACLR 00H LJMP NT IPTO: MOV TH0,#3CH MOV TL0,#0B0HDJNZ R1, TIOMOV R1, #14HSETB 00HTIO: RETIEND程序二只需将程序一中“RL A”改为“RR A”即可实现其功能。
单片机课程设计实验报告 基于单片机的数字时钟 含完整实验代码..
单片机课程设计报告基于单片机的数字时钟姓名:班级:学号:一、前言利用实验板上的4个LED数码管,设计带有闹铃、秒表功能的数字时钟。
功能要求:a)计时并显示(LED)。
由于实验板上只有4位数码管,可设计成显示“时分”和显示“分秒”并可切换。
b)时间调整功能。
利用4个独立按钮,实现时钟调整功能。
这4个按钮的功能为工作模式切换按钮(MODE),数字加(INC),数字减(DEC)和数字移位(SHITF)。
c)定闹功能。
利用4个独立按钮设定闹钟时间,时间到以蜂鸣器响、继电器动作作为闹铃。
d)秒表功能。
最小时间单位0.01秒。
二、硬件原理分析1.电源部分电源部份采用两种输入接口(如上图)。
a)外电源供电,采用2.1电源座,可接入电源DC5V,经单向保护D1接入开关S1。
b)USB供电,USB供电口输入电源也经D1单向保护,送到开关S1。
注:两路电源输入是并连的,因此只选择一路就可以了,以免出问题。
S1为板子工作电源开关,按下后接通电源,提供VCC给板子各功能电路。
电路采用两个滤波电容,给板子一个更加稳定的工作电源。
LED为电源的指示灯,通电后LED灯亮。
2.蜂鸣器蜂鸣器分为有源和无源两种,有源即两引脚有一个直流电源就可以长鸣,无源则需要一个1K左右的脉冲才可以蜂鸣,因此对于按键的提示音及报警蜂鸣使用有源来得方便。
有源也可以当无源使用,而无源则不能当有源使用,当然用有源蜂鸣器作音乐发声会失真厉害。
如上图:单片机P15输出高低电平经R21连接三极管B极,控制三极管的导通与截止,从而控制蜂鸣器的工作。
低电平时三极管导通,蜂鸣器得电蜂鸣,高电平时三极管截止,蜂鸣器失电关闭蜂鸣。
电路使用一个四位共阳型数码管,四个公共阳级由三极管放大电流来驱动,三极管由P10-P13控制开与关。
数码管的阴级由P0口经过电阻限流连接。
例如,要十位的数码管工作,P12输出0,使三极管Q12导通,8脚得电,当P0口相应位有输出0时,点亮相应的LED灯组合各种字符数字。
51单片机20个实验,代码详细
第一章单片机系统板说明一、概述单片机实验开发系统是一种多功能、高配置、高品质的MCS-51单片机教学与开发设备。
适用于大学本科单片机教学、课程设计和毕业设计以及电子设计比赛。
该系统采用模块化设计思想,减小了系统面积,同时增加了可靠性,使得单片机实验开发系统能满足从简单的数字电路实验到复杂的数字系统设计实验,并能一直延伸到综合电子设计等创新性实验项目。
该系统采用集成稳压电源供电,使电源系统的稳定性大大提高,同时又具备完备的保护措施。
为适应市场上多种单片机器件的应用,该系统采用“单片机板+外围扩展板”结构,通过更换不同外围扩展板,可实验不同的单片机功能,适应了各院校不同的教学需求。
二、单片机板简介本实验系统因为自带了MCS-51单片机系统,因此没有配置其他单片机板,但可以根据教学需要随时配置。
以单片机板为母板,并且有I/O接口引出,可以很方便的完成所有实验。
因此构成单片机实验系统。
1、主要技术参数(1)MSC-51单片机板板上配有ATMEL公司的STC89C51芯片。
STC89C51资源:32个I/O口;封装DIP40。
STC89C51开发软件:KEIL C51。
2、MSC-51单片机结构(1)单片机板中央放置一块可插拔的DIP封装的STC89C51芯片。
(2)单片机板左上侧有一个串口,用于下载程序。
(3)单片机板的四周是所有I/O引脚的插孔,旁边标有I/0引脚的脚引。
(4)单片机板与各个模块配合使用时,可形成—个完整的实验系统。
三、母板简介主要技术参数(1)实验系统电源实验系统内置了集成稳压电源,使整个电源具有短路保护、过流保护功能,提高了实验的稳定性。
主板的右上角为电源总开关,当把220V交流电源线插入主板后,打开电源开关,主板得电工作。
为适用多种需要,配置了+5V,+12V,—5V电压供主板和外设需要,通过右上角的插针排和插孔输出到外设。
此外,还设有螺旋保险插孔保护实验箱。
(2)RS232接口RS232接口通过MAX232芯片实现与计算机的串行通讯,通过接口引出信号。
单片机实验五报告_单片机键盘实验
单片机实验五报告_单片机键盘实验一、实验目的本次单片机键盘实验的主要目的是让我们深入了解单片机与键盘的接口技术,掌握如何通过编程实现对键盘输入的检测和响应,从而提高我们在单片机应用开发中的实际操作能力。
二、实验原理在单片机系统中,键盘通常是作为输入设备使用的。
常见的键盘有独立式键盘和矩阵式键盘两种类型。
独立式键盘是每个按键单独占用一根 I/O 线,其优点是电路简单,编程容易,但缺点是占用较多的 I/O 口资源。
矩阵式键盘则是将按键排列成矩阵形式,通过行线和列线的交叉来识别按键。
这种方式可以有效地节省 I/O 口资源,但电路和编程相对复杂一些。
在本次实验中,我们采用了矩阵式键盘。
其工作原理是通过逐行扫描或者逐列扫描的方式,检测行线和列线的电平状态,从而确定按下的按键。
三、实验设备及材料1、单片机开发板一块2、计算机一台3、编程软件(如 Keil C51)4、下载工具(如 STCISP)四、实验步骤1、硬件连接将矩阵式键盘与单片机的 I/O 口进行连接,注意行线和列线的对应关系。
连接好电源和地线,确保硬件电路正常工作。
2、软件编程打开编程软件,创建一个新的工程。
编写初始化程序,包括设置 I/O 口的工作模式、中断等。
编写键盘扫描程序,通过循环扫描行线和列线的电平状态,判断是否有按键按下。
当检测到按键按下时,根据按键的编码执行相应的操作,如在数码管上显示按键值、控制 LED 灯的亮灭等。
3、编译和下载对编写好的程序进行编译,检查是否有语法错误。
如果编译成功,使用下载工具将程序下载到单片机中。
4、实验调试观察硬件电路的工作状态,看是否有异常现象。
按下不同的按键,检查程序的响应是否正确。
如果出现问题,通过调试工具(如单步调试、断点调试等)查找并解决问题。
五、实验代码以下是本次实验的部分关键代码:```cinclude <reg51h>//定义键盘的行和列define ROW_NUM 4define COL_NUM 4//定义行线和列线的端口sbit ROW1 = P1^0;sbit ROW2 = P1^1;sbit ROW3 = P1^2;sbit ROW4 = P1^3;sbit COL1 = P1^4;sbit COL2 = P1^5;sbit COL3 = P1^6;sbit COL4 = P1^7;//定义按键值的编码unsigned char code KeyCodeMapROW_NUMCOL_NUM ={{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'','0','','D'}};//键盘扫描函数void KeyScan(){unsigned char i, j, temp;unsigned char keyValue = 0;//逐行扫描for (i = 0; i < ROW_NUM; i++){//先将所有行线置高电平ROW1 = ROW2 = ROW3 = ROW4 = 1;//将当前行线置低电平switch (i){case 0: ROW1 = 0; break;case 1: ROW2 = 0; break;case 2: ROW3 = 0; break;case 3: ROW4 = 0; break;}//读取列线的电平状态temp = COL1 | COL2 | COL3 | COL4;//如果有列线为低电平,则表示有按键按下if (temp!= 0xF0){//延迟去抖动delay_ms(10);//再次读取列线的电平状态temp = COL1 | COL2 | COL3 | COL4; if (temp!= 0xF0){//确定按下的按键for (j = 0; j < COL_NUM; j++){if ((temp &(1 << j))== 0){keyValue = KeyCodeMapij;break;}}//执行相应的操作switch (keyValue){case '1'://具体操作break;case '2':break;//其他按键的操作}}}}}//主函数void main(){while (1){KeyScan();}}```六、实验结果及分析在实验过程中,我们成功地实现了对矩阵式键盘的输入检测,并能够根据不同的按键执行相应的操作。
单片机实验报告总结
单片机实验报告总结单片机实验报告总结单片机实验心得体会单片机实验心得体会时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。
在学习单片机这门课程之前,就早早的听各种任课老师和学长学姐们说过这门课程的重要性和学好这门课程的关键~~多做单片机实验。
这个学期,我们除了在课堂上学习理论知识,还在实验室做了7次实验。
将所学知识运用到实践中,在实践中发现问题,强化理论知识。
现在,单片机课程已经结束,即将开始考试了,需要来好好的反思和回顾总结下了。
第一次是借点亮LED灯来熟悉keil软件的使用和试验箱上器材。
第一次实验体现了一个人对新事物的接受能力和敏感度。
虽然之前做过许多种实验。
但依旧发现自己存在一个很大的问题,对已懂的东西没耐心听下去,容易开小差;在听老师讲解软件使用时,思路容易停滞,然后就跟不上老师的步骤了,结果需要别人再次指导;对软件的功能没有太大的热情去研究探索,把一个个图标点开,进去看看。
所以第一次试验相对失败。
鉴于此,我自己在宿舍下载了软件,然后去熟悉它的各个功能,使自己熟练掌握。
在做实验中,第二个问题应该是准备不充分吧。
一开始,由于没有课前准备的意识,每每都是到了实验室才开始编程,完成作业,导致每次时间都有些仓促。
后来在老师的批评下,认识到这是个很大的问题:老师提前把任务告诉我们,就是希望我们私下把程序编好。
于是我便在上机之前把程序编好,拷到U盘,这样上机时只需调试,解决出现的问题。
这样就会节约出时间和同学讨论,换种思路,换种方法,把问题给吃透。
发现、提出、分析、解决问题和实践能力是作为我们这个专业的基本素质。
三是我的依赖性很大,刚开始编程序时喜欢套用书上的语句,却对语句的理解不够。
于是当程序出现问题时,不知道如何修改,眼前的程序都是一块一块的被拼凑整合起来的,没法知道哪里错了。
但是编程是一件很严肃的事情,容不得半点错误。
于是便只能狠下决心,坚持自己编写,即使套用时,也把每条语句弄懂。
单片机交通灯实验代码
;======================P1口亮灯实验========================= ORG 0790H;----------------------------------------------------------SE18: MOV P1,#0FFH ;送P1口LO34: MOV A,#0FEH ;L1发光二极管点亮LO33: MOV P1,ALCALL SE19 ;延时RL A ;左移位SJMP LO33 ;循环;----------------------------------------------------------SE19: MOV R6,#0A0HLO36: MOV R7,#0FFHLO35: DJNZ R7,LO35DJNZ R6,LO36 ;延时RET;----------------------------------------------------------END;==================== 8255控制交通灯========================== ORG 0BB0HJOD0: MOV SP,#60HMOV DPTR,#0FFDBHMOV A,#88HMOVX @DPTR,A ;8255初始化MOV DPTR,#0FFD8HMOV A,#0B6HMOVX @DPTR,AINC DPTRMOV A,#0DHMOVX @DPTR,A ;点亮4个红灯MOV R2,#25H ;延时LCALL DEL YJOD3: MOV DPTR,#0FFD8HMOV A,#75HMOVX @DPTR,AINC DPTRMOV A,#0DHMOVX @DPTR,A ;东西绿灯亮,南北红灯亮MOV R2,#55HLCALL DEL Y ;延时MOV R7,#05H ;闪烁次数JOD1: MOV DPTR,#0FFD8HMOV A,#0F3HMOVX @DPTR,AINC DPTRMOV A,#0CHMOVX @DPTR,A ;东西黄灯亮,南北红灯亮MOV R2,#20HLCALL DEL Y ;延时MOV DPTR,#0FFD8HMOV A,#0F7HMOVX @DPTR,AINC DPTRMOV A,#0DHMOVX @DPTR,A ;南北红灯亮MOV R2,#20HLCALL DEL Y ;延时DJNZ R7,JOD1 ;闪烁次数未到继续MOV DPTR,#0FFD8HMOV A,#0AEHMOVX @DPTR,AINC DPTRMOV A,#0BHMOVX @DPTR,A ;东西红灯亮,南北绿灯亮MOV R2,#55HLCALL DEL Y ;延时MOV R7,#05H ;闪烁次数JOD2: MOV DPTR,#0FFD8HMOV A,#9EHMOVX @DPTR,AINC DPTRMOV A,#07HMOVX @DPTR,A ;东西红灯亮,南北黄灯亮MOV R2,#20HLCALL DEL Y ;延时MOV DPTR,#0FFD8HMOV A,#0BEHMOVX @DPTR,AINC DPTRMOV A,#0FHMOVX @DPTR,A ;东西红灯亮MOV R2,#20HLCALL DEL Y ;延时DJNZ R7,JOD2 ;闪烁次数未到继续LJMP JOD3 ;循环;---------------------------------------------DELY: PUSH 02HDEL2: PUSH 02HDEL3: PUSH 02H ;延时DEL4: DJNZ R2,DEL4POP 02HDJNZ R2,DEL3POP 02HDJNZ R2,DEL2POP 02HDJNZ R2,DEL YRET;---------------------------------------------END;===================== 工业顺序控制======================== ORG 0000HLJMP PO10ORG 0013HLJMP PO16;----------------------------ORG 0190HPO10: MOV P1,#7FHORL P3,#00HPO11: JNB P3.4,PO11 ;开工吗?ORL IE,#84HORL IP,#01HMOV PSW,#00H ;初始化MOV SP,#53HPO12: MOV P1,#7EH ;第一道工序ACALL PO1BMOV P1,#7DH ;第二道工序ACALL PO1BMOV P1,#7BH ;第三道工序ACALL PO1BMOV P1,#77H ;第四道工序ACALL PO1BMOV P1,#6FH ;第五道工序ACALL PO1BMOV P1,#5FH ;第六道工序ACALL PO1BMOV P1,#0FH ;第七道工序ACALL PO1BSJMP PO12;----------------------------PO16: MOV B,R2 ;保护现场PO17: MOV P1,#7FH ;关输出MOV 20H,#0A0H ;振荡次数PO18: SETB P1.7 ;振荡ACALL PO1A ;延时CLR P1.7 ;停振ACALL PO1A ;延时DJNZ 20H,PO18 ;不为0转CLR P1.7ACALL PO1A ;停振JNB P3.3,PO17 ;故障消除吗?MOV R2,B ;恢复现场RETIPO1A: MOV R2,#06HACALL DEL Y ;延时RETPO1B: MOV R2,#30HACALL DEL Y ;延时RET;----------------------------DELY: PUSH 02HDEL2: PUSH 02HDEL3: PUSH 02H ;延时DEL4: DJNZ R2,DEL4POP 02HDJNZ R2,DEL3POP 02HDJNZ R2,DEL2POP 02HDJNZ R2,DEL YRET;----------------------------END;=================== A/D转换实验======================== ORG 05A0HSE11: MOV SP,#53HMOV 7EH,#00HMOV 7DH,#08HMOV 7CH,#00HMOV 7BH,#09HMOV 7AH,#10HMOV 79H,#10H ;显示缓冲区初值LO18: CALL DIS ;显示MOV A,#00HMOV DPTR,#0FFE0HMOVX @DPTR,A ;0809的0通道采样CALL DIS ;SSEEMOVX A,@DPTR ;取出采样值mov dptr,#0ffe4h ;new add --> 138 Y1cpl a ;new addmovx @dptr,a ;new add --> 驱动发光二极管cpl a ;new addMOV R0,#79HCALL PTDS ;采样值送显示缓冲区SJMP LO18 ;循环;---------------------------PTDS: MOV R1,A ;拆送显示缓冲区ACALL PTDS1MOV A,R1SW AP APTDS1: ANL A,#0FHMOV @R0,AINC R0RET;---------------------------DIS: PUSH DPHPUSH DPLSETB RS1MOV R0,#7EHMOV R2,#20HMOV R3,#00HMOV DPTR,#LS0LS2: MOV A,@R0MOVC A,@A+DPTRMOV R1,#0DCHMOVX @R1,AMOV A,R2inc R1MOVX @R1,ALS1: DJNZ R3,LS1CLR CRRC AMOV R2,ADEC R0JNZ LS2movx @r0,adec r0cpl amovx @r0,aCLR RS1POP DPLPOP DPHRET;-------------------------------------LS0: DB 0C0H,0F9H,0A4H,0B0H,99H,92HDB 82H,0F8H,80H,90H,88H,83H,0C6HDB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH;--------------------------------------END===================== D/A输出方波=========================;注意:进行本实验前,请先装载运行D/A 0V输出(调基准电压)程序Asm51\da_0v.asm ;使D/A输出端“AOUT”输出电压为0V,再进行本实验。
单片机控制交通灯程序代码
单片机控制交通灯程序代码第一篇:单片机控制交通灯程序代码毕业设计程序源代码ORG 0000H;主程序的入口地址LJMP MAIN;跳转到主程序的开始处ORG 0003H;外部中断0的中断程序入口地址ORG 000BH;定时器0的中断程序入口地址LJMP T0_INT;跳转到中断服务程序处ORG 0013H;外部中断1的中断程序入口地址MAIN : MOV SP,#50HMOV IE,#8EH;CPU开中断,允许T0中断,T1中断和外部中断1中断MOV TMOD,#51H;设置T1为计数方式,T0为定时方式,且都工作于模式1 MOV TH1,#00H;T1计数器清零MOV TL1,#00HSETB TR1;启动T1计时器SETB EX1;允许INT1中断SETB IT1;选择边沿触发方式MOV DPTR ,#0003HMOV A, #80H;给8255赋初值,8255工作于方式0MOVX @DPTR, A AGAIN: JB P3.1,N0;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1 则跳转MOV A,P1JB P1.7,RED;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间MOV R0,#00H;R0清零MOV R0,A;存入东西方向绿灯初始时间MOV R3,ALCALL DISP1LCALL DELAYAJMP AGAIN RED:MOV A,P1ANL A,#7FH;P1.7置0MOV R7,#00H;R7清零MOV R7,A;存入东西方向红灯初始时间MOV R3,ALCALL DISP1LCALL DELAYAJMP AGAIN毕业设计;------------N0:SETB TR0;启动T0计时器MOV 76H,R7;红灯时间存入76H N00:MOV A,76H;东西方向禁止,南北方向通行MOV R3,AMOV DPTR,#0000H;置8255A口,东西方向红灯亮,南北方向绿灯亮MOV A,#0DDHMOVX @DPTR, A N01:JB P2.0,B0 N02:SETB P3.0CJNE R3,#00H,N01;比较R3中的值是否为0,不为0转到当前指令处执行;------黄灯闪烁5秒程序------N1:SETB P3.0MOV R3,#05HMOV DPTR,#0000H;置8255A口,东西,南北方向黄灯亮MOV A,#0D4HMOVX @DPTR,A N11:MOV R4,#00H N12:CJNE R4,#7DH,$;黄灯持续亮0.5秒N13:MOV DPTR,#0000H;置8255A口,南北方向黄灯灭MOV A,#0DDHMOVX @DPTR,A N14:MOV R4,#00HCJNE R4,#7DH,$;黄灯持续灭0.5秒CJNE R3,#00H,N1;闪烁时间达5秒则退出;-----------------------------N2:MOV R7,#00HMOV A,R0;东西通行,南北禁止MOV R3,AMOV DPTR,#0000H;置8255A口,东西方向绿灯亮,南北方向红灯亮MOV A,#0EBHMOVX @DPTR,A N21:JB P2.0,T03N22:CJNE R3,#00H,N21;------黄灯闪烁5秒程序------N3:MOV R3,#05HMOV DPTR,#0000H;置8255A口,东西,南北方向黄灯亮毕业设计MOV A,#0E2HMOVX @DPTR,A N31:MOV R4,#00HCJNE R4,#7DH,$;黄灯持续亮0.5秒N32:MOV DPTR,#0000H;置8255A口,南北方向黄灯灭MOV A,#0EBHMOVX @DPTR,A N33:MOV R4,#00HCJNE R4,#7DH,$;黄灯持续灭0.5秒CJNE R3,#00H,N3;闪烁时间达5秒则退出SJMP N00;------闯红灯报警程序------B0:MOV R2,#03H;报警持续时间3秒 B01:MOV A,R3JZ N1;若倒计时完毕,不再报警CLR P3.0;报警CJNE R2,#00H,B01;判断3秒是否结束SJMP N02;------1秒延时子程序-------N7:RETI T0_INT:MOV TL0,#9AH;给定时器T0送定时10ms的初值MOV TH0,#0F1HINC R4INC R5CJNE R5,#0FAH,T01;判断延时是否够一秒,不够则调用显示子程序MOV R5,#00H;R5清零DEC R3;倒计时初值减一DEC R2;报警初值减一 T01:ACALL DISP;调用显示子程序RETI;中断返回;------显示子程序------DISP: JNB P2.4,T02 DISP1:MOV B,#0AHMOV A,R3;R3中值二转十显示转换DIV ABMOV 79H,AMOV 7AH,B DIS:MOV A,79H;显示十位毕业设计MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0F7HMOVX @DPTR,ALCALL DELAY DS2:MOV A,7AH;显示个位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0FBHMOVX @DPTR,ARET;------东西方向车流量检测程序------T03: MOV A,R3SUBB A,#00H;若绿灯倒计时完毕,不再检测车流量JZN3JB P2.0,T03INC R7CJNE R7,#64H,E1MOV R7,#00H;中断到100次则清零 E1:SJMP N22;------东西方向车流量显示程序------T02: MOV B,#0AH MOVA,R7;R7中值二转十显示转换DIV ABMOV 79H,AMOV 7AH,B DIS3: MOV A,79H;显示十位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001H毕业设计MOV A,#0F7HMOVX @DPTR,ALCALL DELAY DS4:MOV A,7AH;显示个位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0FBHMOVX @DPTR,ALJMP N7;------延时4MS子程序----------DELAY: MOV R1,#0AH LOOP: MOV R6,#64HNOP LOOP1: DJNZ R6,LOOP1DJNZ R1,LOOPRET;------字符表------TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND第二篇:单片机实现交通灯控制智能交通灯设计与实现基于单片机的智能交通灯控制系统的设计与实现,系统能够根据十字路口双车道车流量的情况控制交通讯号灯按特定的规律变化。
51单片机实例(含详细代码说明)
1.闪烁灯1.实验任务如图4.1.1所示:在端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为秒。
2.电路原理图图4.1.13.系统板上硬件连线把“单片机系统”区域中的端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4.程序设计内容(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢下面具体介绍其原理:如图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=4010002因此,上面的延时程序时间为。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。
如本实验要求秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2).输出控制如图1所示,当端口输出高电平,即=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当端口输出低电平,即=0时,发光二极管L1亮;我们可以使用SETB 指令使端口输出高电平,使用CLR 指令使端口输出低电平。
5.程序框图如图4.1.2所示图4.1.26.汇编源程序ORG 0START: CLRLCALL DELAYSETBLCALL DELAYLJMP STARTDELAY: MOV R5,#20 ;延时子程序,延时秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <>sbit L1=P1^0;void delay02s(void)4.2.14.2.14.2.24.3.14.3.14.3.20F0F4.4.14.4.14.4.24.5.1 4.5.20F0F0F0F7f7f7f7f4.6.14.6.2实验任务如图13所示,利用AT89S51单片机的P0端口的-连接到一个共阴数码管的a-h的笔段上,数码管的公共端接地。
单片机实验教案
实验一Keil C51的使用一、实验目的1、使用C51创建工程项目文件,为工程项目选择目标器件,为工程项目设置软硬件环境。
2、创建源程序文件并输入源程序代码,保存创建源程序项目文件,并对所编写的程序进行调试、运行。
二、实验内容ORG 0000HAJMP MAINORG 0030HMAIN: MOV R4,#08MOV A,#0FEHMOV DPTR,#1000HROUNDLED:MOVX @DPTR,ARL AINC DPTRMOV R5,#50LCALL DELAYDJNZ R4,ROUNDLEDLJMP MAINDELAY:MOV R6,#50TT2:MOV R7,#100DJNZ R7,$DJNZ R6,TT2DJNZ R5,DELAYRETEND三、实验步骤及图像截屏结果1、在“我的文档”里面新建一个文件夹,命名为:LEI。
2、进入Keil C51系统的操作环境。
3、建立一个新的工程。
单击菜单命令:Project→New Project,如图1-1:图1-1 选中新工程然后选择要保存的路径,输入工程文件的名字:lei,如图1-2图1-2 给新工程取名点击“保存”按钮,会弹出一对话框,选择单片机型号为Atmel的89C51,如图1-3 :图1-3 选择单片机型号此时工程文件已经建立。
4、单击菜单命令:File→New,将实验程序编入后保存,单击菜单命令:File →Save as,注意一定要加扩展名.asm,然后单击“保存”,如图1-4:图1-4编辑程序并保存5、回到编辑界面后,单击工程窗口中“Target1”,点击“+”号展开,右键单击“Source group1”选择Add File to Group ‘source Group1’ 如图1-5:图1-5选中添加文件界面此时弹出窗口,注意选择文件类型Sam 源文件,如图所示,点击Add,如图1-6:图1-6选中要添加的文件名5、对文件进行编译、链接。
单片机实验报告
单片机实验报告《单片机系统实验》实验报告院系:学号:姓名:2017年12月一、实验目的1.了解32位单片机(STM32系列)原理及其应用,熟悉单片机的资源,掌握单片机的最小系统设计及扩展技术,掌握单片机的编程语言。
2.通过本实验了解LCD液晶工作原理,能通过编程操作液晶的显示。
二、实验设备STM32实验系统一套,PC机一台。
三、实验原理(1)I/O口及定时器实验:STM32的GPIO口控制4个发光二极管,了解其硬件连接方式,学会使用STM32的一个定时器,掌握对定时器计时方式的编程。
编写程序循环点亮4个发光二极管,控制点亮时间为1秒钟闪烁。
(2)外部中断实验:掌握STM32单片机外部中断的用法,学会设置中断优先级,在实验(1)的基础上完成,如果有外部中断发生改变发光二极管的发光规律。
(如,仅其中2个灯亮,再次触发外部中断后,发光二极管重新变成4个灯循环点亮。
)(3)串行口通信实验:掌握STM32单片机与计算机之间的硬件连接方式,了解二者之间的传输协议,进行数据传输。
(4)LCD实验:掌握STM32单片机与液晶之间的硬件连接方式,单片机如何驱动液晶进行显示。
四、内容与步骤1.学会使用IAR或KEIL的编译链接调试环境,熟悉有关STM32使用到的库,并能顺利建立包含各种库文件的工程。
(2学时)2.I/O口实验:在建立工程的基础上能点亮发光二极管。
(2学时)3.定时器实验:循环定时(用定时器做)点亮4个灯,即每1秒闪烁点亮一个灯,循环往复(或叫跑马灯实验)。
(2学时)4.外部中断实验:按键作为触发外部中断的条件,中断发生时,改变发光二极管的点亮规律。
(2学时)5.串行口通信实验:编写串行口通信实验程序,能在计算机与STM32系统间进行ASCII码的传输。
(2学时)6.LCD实验:通过自行编写库文件和了解液晶显示字库,能在液晶上显示“北京航空航天大学机械工程及自动化学院”字样。
(6学时)五、关键代码1.I/O口及定时器实验/*通过定时器3中断函数实现跑马灯,现象为每个LED灯依次点亮1秒后熄灭*/void TIM3_IRQHandler(void){extern uint8_t LED_Status[5];if(TIM3->SR&0X0001)//溢出中断{if(LED_Status[1]==0){LED1_ON;LED2_OFF;LED3_OFF;LED4_OFF;LED_Status[1]=1;}else if(LED_Status[1]==1){LED1_OFF;LED2_ON;LED3_OFF;LED4_OFF;LED_Status[1]=2;}else if(LED_Status[1]==2){LED1_OFF;LED2_OFF;LED3_ON;LED4_OFF;LED_Status[1]=3;}else if(LED_Status[1]==3){LED1_OFF;LED2_OFF;LED3_OFF;LED4_ON;LED_Status[1]=0;}}TIM3->SR&=~(1<<0);//清除中断标志位}2.外部中断实验/*LED灯的发光规律有两种:一种是每个LED灯依次点亮1秒后熄灭,另一种是每次2个LED灯同时点亮,持续1秒后向前移动1个LED灯的位置。
单片机实验报告
单⽚机实验报告单⽚机原理及接⼝技术实验报告班级学号:姓名:实验⼀P1⼝输⼊输出实验与P1、P3⼝输⼊输出实验⼀、实验⽬的及任务学习P1、P3⼝的使⽤⽅法,熟练HICE单⽚机试验系统的操作步骤。
⼆、实验总体设计本实验分为两部分:P1⼝和P1、P3⼝输⼊输出实验。
1、P1⼝是⼀个准双向⼝,外接⼋个发光⼆极管,连续运⾏程序,发光⼆极管循环点亮2、P3⼝作为输⼊读取开关状态,P1⼝作为输出⼝,连续运⾏程序,发光⼆级管显⽰开关状态。
3、设计思路如下:(1)、开始——>P1⼝初始化——>点亮⼀位发光⼆极管——>右移⼀位——>循环;(2)、开始——>初始化——>P3⼝开关状态送到P1⼝——>驱动发光⼆极管——>延时三、试验程序框图及实验电路(实验电路及连线详见附录)四、软件设计⼀、P1⼝输⼊输出程序代码:#inc lud e#def ine uc har un sig ned ch ar#def ine ui nt uns ign ed intucha r r rc(uch ar a,n);ucha r r rc(uch ar a,n) //循环右移⼦程序{ucha r b,c;b=a<<(8-n);c=a>>n;a=c|b;retu rn(a);}void ma in(){ucha r i,te mp;uint j;P1=0xff;loop:temp=0x7f;for(i=0;i<8;i++){P1=r rc(tem p,i);for(j=0;j<30000;j++);//延时}}⼆、和P1、P3⼝输⼊输出实验。
#i ncl ude#def ine uc har un sig ned ch ar#def ine ui nt uns ign ed intvoid ma in(){uint j;loop:P1=0XFF;P1=P3;//读取P3⼝状态送P1⼝for(j=0;j<5000;j++);//延时goto lo op;}五、硬件设计1、仿真模式设置:8752模式,仿真存储器模式选择:内程序存储器外数据存储器;2、仿真器P3.6/P3.7短路块设置在WR/RD状态(见仿真器说明书跳线设置)。
单片机键盘实验代码
void main()
{
/*------------让数码管先显示0-----------*/
P1=0x01; //数码管位码输出 P0=0x00;源自/关显示 //dula=1;
//P0=table[0];
//dula=0;
/*-----------按键的获取与显示----------*/
dula=0; //关闭锁存
Delay(10); //延时2ms
}
/*--------------------换取按键------------------*/
void getkey()
{
uchar col,i=0;
P2=0xf0; //行线输出全低
/*--------------------换取按键------------------*/
void getkey();
/*--------------------显示按键值---------------*/
void Display();
/*-------------------- 延时 --------------------*/
0XBE,//6
0XE0,//7
0XFE,//8
0XF6,//9
0xee,//a
0x3e,//b
0x9c,//c
0x7a,//d
0x9e,//e
0x8e //f
};//数码管的编码
uchar keyval=0;//按键值
uchar code scan[]={ 0xf7,0xfb,0xfd,0xfe }; //键盘行扫描码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章单片机系统板说明一、概述单片机实验开发系统是一种多功能、高配置、高品质的MCS-51单片机教学与开发设备。
适用于大学本科单片机教学、课程设计和毕业设计以及电子设计比赛。
该系统采用模块化设计思想,减小了系统面积,同时增加了可靠性,使得单片机实验开发系统能满足从简单的数字电路实验到复杂的数字系统设计实验,并能一直延伸到综合电子设计等创新性实验项目。
该系统采用集成稳压电源供电,使电源系统的稳定性大大提高,同时又具备完备的保护措施。
为适应市场上多种单片机器件的应用,该系统采用“单片机板+外围扩展板”结构,通过更换不同外围扩展板,可实验不同的单片机功能,适应了各院校不同的教学需求。
二、单片机板简介本实验系统因为自带了MCS-51单片机系统,因此没有配置其他单片机板,但可以根据教学需要随时配置。
以单片机板为母板,并且有I/O接口引出,可以很方便的完成所有实验。
因此构成单片机实验系统。
1、主要技术参数(1)MSC-51单片机板板上配有ATMEL公司的STC89C51芯片。
STC89C51资源:32个I/O口;封装DIP40。
STC89C51开发软件:KEIL C51。
2、MSC-51单片机结构(1)单片机板中央放置一块可插拔的DIP封装的STC89C51芯片。
(2)单片机板左上侧有一个串口,用于下载程序。
(3)单片机板的四周是所有I/O引脚的插孔,旁边标有I/0引脚的脚引。
(4)单片机板与各个模块配合使用时,可形成—个完整的实验系统。
三、母板简介主要技术参数(1)实验系统电源实验系统内置了集成稳压电源,使整个电源具有短路保护、过流保护功能,提高了实验的稳定性。
主板的右上角为电源总开关,当把220V交流电源线插入主板后,打开电源开关,主板得电工作。
为适用多种需要,配置了+5V,+12V,—5V电压供主板和外设需要,通过右上角的插针排和插孔输出到外设。
此外,还设有螺旋保险插孔保护实验箱。
(2)RS232接口RS232接口通过MAX232芯片实现与计算机的串行通讯,通过接口引出信号。
(3)单片机最小系统单片机最小系统的核心是ATMEL公司的AT89S51单片机,A T89S51右边的按键是复位键,按下时单片机复位,单片机的放两排插孔,分别是:P1.0-P1.7,P0.0-P1.7,P3.0—P3.7,P2.0—P2.7,它们可以实现单片机实验和开发。
(4)模拟量接口一个模拟量接口,由ICL8038产生,通过插孔引出。
(5)D/A转换器D/A转换器由DA0832,LM324芯片组成,(8位,0-5V电压输出),对应的接口序号为:数据信号:D0-D7;片选信号:/CS;读有效信号/OE。
(6)A/D转换器A/D转换器和D/A转换器相临,主要由ADC0809组成,(8位)对应的接口序号为:模拟输入:IN0-IN7;基准电压:REF+,REF -;读写信号:/RD,/WR;输出信号:D0——D7;检测信号:I/0;地址锁存允许:ALE。
(7)8位拨动开关8位拨动开关由Kl—K8组成,每一位都有相应LED(Dl—D8)指示,当拨码开关拨上边时输出高电平,LED亮;拨下边时输出低电平,由插孔l—8输出。
(8)24位按键开关24位按键开关位于主板中下方,由按键Kl—K24组成,有六排,第一排按下时是高电平,弹上时是低电平,由插孔1—4输出;第二排按下时是低电平,弹上时高电平,由插孔1—4输出;第三到第六排是4*4的行列式键盘;由L1—L4,H1—H4输出。
(9)静态显示数码管静态显示区由数码管DP1—DP6组成,由插孔输出,供静态显示用。
(10)发光二极管显示区8位红色发光二极管,高电平亮,可作为状态指示用;另一部分是交通灯,由东西南北四组红绿黄发光二极管构成,高电平亮。
(11)动态扫描显示区系统的显示采用8位8段共阴或共阳数码管(高电平有效),所对应的接口序号为:段码:a,b,c,d,e,f,g,h;位选:L1,L2,L3,L4,L5,L6,L7,L8。
(12)蜂鸣器蜂鸣器(高电平TTL驱动)从其下方对应输入口,会产生lKHz的信号响声。
(13)继电器控制区继电器控制区主要由KJ1—KJ3三个继电器及其驱动电路组成,高电平TTL驱动,输出接口分别为JJ1,JJ2,JJ3。
(14)数字温度计数字温度计使用DS1302温度传感器,输出接口为SCLK、I/O、RESET。
(15)EEPROMEEPROM(AT24C16),用来保存数据信息,接口序号为:串行数据线:SDA;时钟线:SCL;写保护线:WP。
(16)串行A/DA/D转换器主要由MAX192组成,(8位)对应的接口序号为:模拟输入:IN0-IN7;片选信号:/CS;输出信号:DOUT;时钟信号:SCLK;转换开始:SSTRB。
(17)变频模块(18)直流斩波模块(19)红外模块四、主要实验项目本实验系统由于采用模块化设计,各模块之间既相互独立,又可相互组合,完成各种类型实验。
其中包括验证性基础实验,综合性、设计性、创新性实验以及研究开发性、创新性、及全国电子大赛赛前培训实验等。
以下列举了本实验系统能做的部分单片机原理课程实验及课外开放性备选实验项目。
单片机原理课程实验实验一LED显示器指示实验二软件延时及灯光控制实验实验三多级外部中断实验实验四脉冲频率的测量实验实验五串行口扩展实验实验六串行EEPROM的读出和写入实验实验七8位A/D、D/A转换器的应用实验实验八串行A/D、D/A的应用实验实验九直流继电器的驱动及控制实验实验十数据采集的软件抗干扰实验实验十一密码锁控制器的设计实验十二数字温度控制器的设计实验十三8255扫描键盘显示实验实验十四音乐编程实验实验十五声光报警实验实验十六可预置可逆计数器实验实验十七DS1302时钟芯片的应用实验实验十八红外通信接口实验实验十九单片机变频调速实验实验二十交通灯控制实验部分备选实验项目实验一闪烁灯实验一模拟开关灯实验一多路开关状态指示实验一广告灯的左移右移实验一广告灯(利用取表方式)实验一报警产生器实验一I/O并行口直接驱动LED显示实验一按键识别方法之一实验一00-99计数器实验一定时计数器T0作定时应用技术(一)实验一动态数码显示技术实验一4×4矩阵式键盘识别技术实验一定时计数器T0作定时应用技术(一)实验一定时计数器T0作定时应用技术(二)实验一“叮咚”门铃实验一数字钟实验一ADC0809A/D转换器基本应用技术第二章Keil C软件使用Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。
下面介绍Keil C51软件的使用方法进入Keil C51 后,屏幕如下图所示。
几秒钟后出现编辑界启动Keil C51时的屏幕进入Keil C51后的编辑界面简单程序的调试学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。
下面通过简单的编程、调试,引导大家学习Keil C51软件的基本使用方法和基本的调试技巧。
1)建立一个新工程单击Project菜单,在弹出的下拉菜单中选中New Project选项2)然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51如下图所示,然后点击保存.3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keil c51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel 的89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.4)完成上一步骤后,屏幕如下图所示到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。
5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项新建文件后屏幕如下图所示此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。
注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。
然后,单击“保存”按钮。
6)回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,弹出如下菜单然后单击“Add File to Group ‘Source Group 1’” 屏幕如下图所示选中Test.c,然后单击“Add”屏幕好下图所示注意到“Source Group 1”文件夹中多了一个子项“Text1.c”了吗?子项的多少与所增加的源程序的多少相同7)现在,请输入如下的C语言源程序:#include <reg52.h> //包含文件#include <stdio.h>void main(void) //主函数{SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1; //此行及以上3行为PRINTF函数所必须printf(“Hello I am KEIL. \n”); //打印程序执行的信息printf(“I will be your friend.\n”);while(1);}在输入上述程序时,读者已经看到了事先保存待编辑的文件的好处了吧,即Keil c51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。
程序输入完毕后,如下图所示8)在上图中,单击“Project”菜单,再在下拉菜单中单击“Built Target”选项(或者使用快捷键F7),编译成功后,再单击“Project”菜单,在下拉菜单中单击“Start/Stop Debug Session”(或者使用快捷键Ctrl+F5),屏幕如下所示9)调试程序:在上图中,单击“Debug”菜单,在下拉菜单中单击“Go”选项,(或者使用快捷键F5),然后再单击“Debug”菜单,在下拉菜单中单击“Stop Running”选项(或者使用快捷键Esc);再单击“View”菜单,再在下拉菜单中单击“Serial Windows #1”选项,就可以看到程序运行后的结果,其结果如下图所示至此,我们在Keil C51上做了一个完整工程的全过程。
但这只是纯软件的开发过程,如何使用程序下载器看一看程序运行的结果呢?10)单击“Project”菜单,再在下拉菜单中单击“”在下图中,单击“Output”中单击“Create HEX File”选项,使程序编译后产生HEX代码,供下载器软件使用。