单片机流程图(参考模板)
单片机实验程序及流程图 (2) 2

三.程序清单及程序流程框图ORG 0000HLJMP MAINMAIN: MOV R0,#30HMOV R2,#10H CLR AA1: MOV @R0,A INC R0 INC A DJNZ R2,A1 MOV R0,#30H MOV R1,#40H MOV R2,#10H A2: MOV A, @R0 MOV @R1,A INC R0 INC R1 DJNZ R2, A2 MOV R1,#40H MOV DPTR ,#4800H MOV R2, #10H A3: MOV A,@R1 MOVX @DPTR ,A INC R1 INC DPTR DJNZ R2,A3 MOV SP,#60H MOV R2,#10H MOV DPTR ,#4800H PUSH DPL PUSH DPH MOV DPTR,#5800H MOV R3,DPL MOV R4,DPH A4: POP DPH POP DPL MOVX A,@DPTR INC DPTR PUSH DPL PUSH DPH MOV DPL,R3MOV DPH,R4 MOVX @DPTR,A INC DPTRMOV R3,DPL MOV R4,DPH DJNZ R2,A4 MOV R0,#50H MOV DPTR,#5800H MOV R2,#10H A5: MOVX A,@DPTR MOV @R0,AINC R0INC DPTRDJNZ R2,A5修改DPTR《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义LJMP MAINP1, ACLR 00HLJMP NTIPTO:MOV TH0, #3CH MOV TL0, #0B0HDJNZ R2, TIOMOV R2, #0AHSETB 01HDJNZ R1, TIOMOV R1, #02HSETB 00HTIO: RETIEND程序四(思考题程序)ORG 0000HLJMP MAINORG 000BHLJMP IPTOMAIN: MOV SP, #30HMOV P1, #0ffHMOV TMOD, #01HCLR 00HSETB EASETB ET0MOV TH0, #3CHMOV TL0, #0B0HMOV R1, #14HSETB TR0MOV A, #00H NT:JNB 00H, NTINC AMOV R3, ACPL AMOV P1, ACLR 00HMOV A, R3LJMP NTIPTO:MOV TH0, #3CHMOV TL0, #0B0HDJNZ R1, TIOMOV R1, #14HSETB 00HTIO: RETIENDORG Array LJMPM OVMOV TH0,MOV TL0,SETB TR0SETB P1.0TF0,CPL P1.0CLR TF0LJMPENDORG0000HLJMPMAINORG000BHLJMPIPTOM OV SP,#60HMOVTMOD, #02HMOV IE,#82HMOVTH0, #88HMOV TL0, #88HSETB TR0SETB P1.1LJMP HEREP1.1RETIEND)ORG 0000HLJMP MAINMAIN: M OV TMOD, #11HMOV TH0, #0FEH MOV TL0, #0D4H MOV TH1, #0FFH MOV TL1, #38H SETB TR1 SETB P1.0 HERE: JNB TF1, HERECPL P1.0 SETB TR0 CLR TF1 CLR TR1 MOV TH1, #0FFH MOV TL1, #38H HERE1: JNB TF0, HERE1CPL P1.0 SETB TR1 CLR TF0 CLR TR0 MOV TH0, #0FEH MOV TL0, #0D4HLJMP HEREEND五.实验结果周期为200us 方波周期为240us 方波周期为500us 占空比为2:5的方波开始计数器初始化开定时器0TF0=1?P1.0取反TF0清零结束Y开始定时器初始化开定时器1清零TF1结束TF1=0?P1.0取反开定时器0送定时器1初值关定时器1清零TF0TF0=0?P1.0取反开定时器1送定时器0初值关定时器0YNYN三、电路原理图ORG 0000HLJMPMOV TH0,MOV TL0,SETB TR0TF0,CPL P1.0CLR TF0LJMPENDORGLJMPORGLJMPSP,MOVTMOD, #06HMOV TH0,#38HMOV TL0,#38HMOV IE,#82HSETB TR0 HERE:LJMP HEREITPO:CPL P1.0RETIEND程序3(思考题):ORG 0000HLJMP MAINORG 001BHLJMP ITPO MAIN: M OV SP, #60H MOV TMOD, #62HMOV TH0, #9CHMOV TL0, #9CHMOV TH1,#0CEHMOV TL1,#0CEHMOV IE, #88HSETB TR0SETB TR1SETB P1.0HERE:JNB TF0, HERECPL P1.0CLR TF0LJMP HEREITPO:CPL P1.1RETIEND五、实验结果程序1与程序2从T0接入1000Hz的方波,思考题从P1.0口线产生的方波从T1接入计100次脉冲计200次脉冲思考题波形三、电路原理图0000H MAIN0003HEXTER0 000BH IPTO 00013H EXTER1 SP, #60H TMOD, #11H IE,IP, TH0,TL0,MOV TH1, #0D8H MOV TL1, #0F0HHERE:LJMP HEREDELAY:SETB TR1HEREY:JNB TF1, HEREYCLR TR1 CLR TF1 MOV TH1, MOV TL1, RETEXTER0:LCALL DELAYJB P1.0, HERE0:JNB P1.0, SETB TR0 LOOP0:RETIEXTER1:LCALL DELAYJB P1.1, LOOP1 HERE1:JNB P1.1, HERE1CLR TR0LOOP1:RETIIPTO:CPL P1.2MOV TH0, #9EHMOV TL0, #58HRETIEND程序二(思考题)ORG 0000HLJMP MAINORG 0003HLJMP EXTER0ORG 000BHLJMP IPTOMAIN: M OV SP, #60HMOV TMOD, #11HMOV IE, #83HMOV IP, #02HMOV TH0, #0B1HMOV TL0, #0E0HMOV TH1, #0D8HMOV TL1, #0F0HMOV R1, #02H HERE:LJMP HEREDELAY:SETB TR1HEREY:JNB TF1, HEREYCLR TR1CLR TF1MOV TH1, #0D8HMOV TL1, #0F0HRETEXTER0:LCALL DELAYJB P1.0, LOOP0 HERE0:JNB P1.0, HERE0CPL TR0OOP0:RETIIPTO: DJNZ R1, LOOPCPL P1.2CPL 00HJNB 00H, LOOP2MOV R1, #03HLJMP LOOPLOOP2: MOV R1, #02H LOOP: MOV TH0, #0B1HMOV TL0, #0E0HRETIEND五、实验结果1、基本要求部分:将程序产生的十六进制代码加载到proteus中,运行仿真开始无波形输出,按下K0键输出周期为50mS的连续方波,如图5.1所示,当按下K1键波形消失,重复操作结果一样。
单片机程序流程图及源代码

单片机上机实验报告【实验一】端口实验,掌握通过端口编程实现数据输出和输入的方法,并观察结果。
实验内容: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; 人眼可分辨。
单片机新手教学教案 含流程图及程序(优秀版)word资料

单片机新手教学教案含流程图及程序(优秀版)word资料//赋值实例:用单片机控制第一个灯亮#include<reg52.h> //包含51单片机寄存器定义的头文件 void main(void) { }//闪烁实例:用单片机控制一个灯闪烁#include<reg52.h> //包含单片机寄存器的头文件 /**************************************** 函数功能:延时一段时间*****************************************/void delay(void) //两个void 意思分别为无需返回值,没有参数传递 {unsigned int i; //定义无符号整数,最大取值范围65535for(i=0;i<20000;i++) //做20000次空什么也不做,等待一个机器周期 }/******************************************************* 函数功能:主函数 (C 语言规定必须有也只能有1void main(void) {while(1) //无限循环{delay(); //延时一段时间 delay(); //延时一段时间 } }//流水实例1:使用P0口流水点亮8位LED #include<reg52.h> //包含单片机寄存器的头文件/****************************************函数功能:延时一段时间*****************************************/void delay(void) Array {unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++);}/***************************************函数功能:主函数***************************************void main(void){ while(1){ P0=0xfe; //第一个灯亮delay(); //调用延时函数P0=0xfd; //第二个灯亮delay(); //调用延时函数P0=0xfb; //第三个灯亮delay(); //调用延时函数P0=0xf7; //第四个灯亮delay(); //调用延时函数P0=0xef; //第五个灯亮delay(); //调用延时函数P0=0xdf; //第六个灯亮delay(); //调用延时函数P0=0xbf; //第七个灯亮delay(); //调用延时函数P0=0x7f; //第八个灯亮delay(); //调用延时函数}}//流水实例2:用自增运算控制P0口8位LED流水花样#include<reg52.h> //包含单片机寄存器的头文件/******************************************************函数功能:延时一段时间******************************************************/void delay(void){unsigned int i;for(i=0;i<20000;i++);}/******************************************************函数功能:主函数******************************************************/void main(void){unsigned char i;for(i=0;i<255;i++) //注意i的值不能超过255{P0=i; //将i的值送P0口delay(); //调用延时函数}}//流水实例3:用右移运算流水点亮P1口8位LED#include<reg52.h> //包含单片机寄存器的头文件/*****************************函数功能:延时一段时间*****************************/void delay(void){unsigned int n;for(n=0;n<30000;n++);}/*****************************函数功能:主函数*****************************/void main(void){unsigned char i;while(1){P0=0xff;delay();for(i=0;i<8;i++)//设置循环次数为8{P0=P0>>1; //每次循环P1的各二进位右移1位,高位补0delay(); //调用延时函数}}}//开关实例:用if语句控制P0口8位LED的点亮效果#include<reg52.h> //包含单片机寄存器的头文件/*****************************函数功能:主函数*****************************/void main(void){while(1){if(S1==0) //如果按键S1按下P0=0x0f; //P0口高四位LED点亮if(S2==0) //如果按键S2按下P0=0xf0; //P0口低四位LED点亮}}//开关实例3:用swtich语句的控制P0口8位LED的点亮状态#include<reg52.h> //包含单片机寄存器的头文件/*****************************函数功能:延时一段时间*****************************/void delay(void){ unsigned int n;for(n=0;n<10000;n++);}/*****************************函数功能:主函数*****************************/void main(void){ unsigned char i;i=0; //将i初始化为0while(1){ if(S1==0) //如果S1键按下{ delay(); //延时一段时间if(S1==0) //如果再次检测到S1键按下i++; //i自增1if(i==9) //如果i=9,重新将其置为1i=1;}switch(i) //使用多分支选择语句{ case 1: P0=0xfe; //第一个LED亮break;case 2: P0=0xfd; //第二个LED亮break;case 3:P0=0xfb; //第三个LED亮break;case 4:P0=0xf7; //第四个LED亮break;case 5:P0=0xef; //第五个LED亮break;case 6:P0=0xdf; //第六个LED亮break;case 7:P0=0xbf; //第七个LED亮break;case 8:P0=0x7f; //第八个LED亮break;default: //缺省值,关闭所有LEDP0=0xff;}}}课堂教学设计表课程名称语文设计者单位(学校)授课班级一(1)班)物资供应计划工作流程生产过程组织设计流程生产过程各职能模块配合流程生产制程控制流程退货返工返工返工劳动定额管理程序说明:完善劳动生产定额管理,对于一车间这样的装备制造型车间尤为重要。
单片机程序流程图及源代码

单片机上机实验报告【实验一】端口实验,掌握通过端口编程实现数据输出和输入的方法,并观察结果。
实验内容: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; 人眼可分辨。
单片机流程图(参考模板)

单片机总流程图主函数程序#include<reg51.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int#define OSC_FREQ 12000000#define __10ms (65536 - OSC_FREQ/(12000000/9970))#define COM8255 XBYTE[0XFFF3]#define PA8255 XBYTE[0XFFF0]#define PB8255 XBYTE[0XFFF1]#define PC8255 XBYTE[0XFFF2]uchar code tab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6}; uchar code dis_HELLO[]={0x89,0x86,0xc7,0xc7};uchar code dis_op51[]={0xc0,0x8c,0x92,0xf9};uchar code dis_code[]={0xcf,0xa4,0xcf,0xa4};uchar ucCnt_10ms=99;uchar i=0;uchar J=0;uchar n=0;uchar led1;uchar led2;sbit P2_4=P2^4;sbit P3_7=P3^7;sbit P1_0=P1^0;sbit P1_1=P1^1;sbit P1_2=P1^2;void Disp_op51 ();void Disp_HELLO();void Set_Init_Xint();void Set_Init_Timer();void Disp_t();void DelayX1ms(uint count);void Disp_8255();void main(){for(;;){Set_Init_Xint();Set_Init_Timer();Disp_8255();//ucCnt_10ms =99;//ucLed1 = 6;//ucLed2 = 8;if ( n>=1 ){for(;;){Disp_HELLO();if (PB8255==0xef){for(;;){Disp_op51 () ;Disp_t();for(i=0;i<0xff;i++);}}for(i=0;i<0xff;i++);}}}}定时器T0流程图定时器初始化函数程序void Set_Init_Timer(){TMOD=0x01;TH0 = __10ms/256;TL0 = __10ms%256;EA=1;ET0=1;}定时器中断服务函数程序Run_Time0(void) interrupt 1 using 2{TR0 = 0;TH0 = __10ms/256;TL0 = __10ms%256;TR0 = 1;ucCnt_10ms++;if( ucCnt_10ms==200 ) //1s{ ucCnt_10ms = 0;led1++ ;if( led1==10) //1S时间到更新显示缓冲值{led1 = 0;led2++;}if(led2== 10){led2 = 0 ;}}}外部中断0流程图外部中断初始化函数程序void Set_Init_Xint(){IT0=1;EX0=1;EA=1;}定时器中断服务函数程序Run_Xint0(void) interrupt 0 using 1{n++;TR0=1;}独立式按键流程图8255定义入口#define COM8255 XBYTE[0XFFF3]#define PA8255 XBYTE[0XFFF0]#define PB8255 XBYTE[0XFFF1]#define PC8255 XBYTE[0XFFF2]sbit P3_7=P3^7;sbit P1_0=P1^0;sbit P1_1=P1^1;sbit P1_2=P1^2;8255初始化函数程序void Disp_8255(){P3_7=0;P1_0=0;P1_1=1;P1_2=0;COM8255=0x82;}HELLO显示函数程序void Disp_HELLO() //HELLO显示函数{SCON = 0x00;SBUF=0xFC;P2_4=0;while(!TI);TI = 0;P2_4=1;P2_4=0;SBUF=0x02;while(!TI);TI = 0;P2_4=1;P1=0x7A;P2=dis_HELLO[0 ];DelayX1ms(5);P1=0xBA;P2=dis_HELLO[1 ];DelayX1ms(5);P1=0xDA;P2=dis_HELLO[2];DelayX1ms(5);P1=0xEA;P2=dis_HELLO[3];DelayX1ms(5);}void Disp_op51 (){P1=0x7F;P2=dis_op51[0 ];DelayX1ms(5);P1=0xBF;P2=dis_op51[1 ];DelayX1ms(5);P1=0xDF;P2=dis_op51[2 ];DelayX1ms(5);P1=0xEF;P2=dis_op51[3 ];DelayX1ms(5);}0~99显示函数程序void Disp_t(){SCON = 0x00;SBUF=tab[led2];P2_4=0;while(!TI);TI=0;P2_4=1;P2_4=0;SBUF=tab[led1];while(!TI);TI=0;P2_4=1;}void DelayX1ms(uint count){uint j;while(count--!=0){for(j=0;j<72;j++);}}---精心整理,希望对您有所帮助。
单片机设计程序流程图

设计题1:按下SW1电机全速运行,电机输出端P2.6输出高峰按下SW2电机半速运行,电机输出端P2.6输出低峰设计题2;四路抢答器说明:按下复位键后没有显示,开始抢答,根据P3口的输入值,显示对应的数字设计题3:双路报警器说明:正常时SW1为断开状态,SW2为闭合状态。
当小偷翻窗入室,会导致SW1闭合或SW2断开时,同时启动声光报警:直流蜂鸣器(BUZZER)通电发声,LED1与LED2交替闪亮,交替时间为0.5秒设计题4:三人表决器说明:程序检测按键,三个按键中如果有一个主裁判和任意一个副裁判按下说明有效设计题5:设计题:5:单双八拍说明:A→AB →B →BC→C →CD→D →DA设计题6:小便池自动抽水说明:当人靠近小便池时,出水2秒,人离开后,出水5秒(请考虑时间的精度问题)。
本题仅要求用一只普通开关SW1来代替人体红外感应开关,有人靠近时SW1接通,人离开时,SW1断开。
设计题7:小便池自动抽水说明:通过三档旋转开关设定高、中、低三档水位,水位设定好后单片机能按设定水位控制电磁阀注水,达到设定水位后停止注水。
设计题8:自动计数说明:当自动检测开关SW1检测到有工件通过时,马上闭合,然后断开,利用这一特点实现自动流水线货物(SW1接通次数)计数(00--99)。
设计题9:水塔水位说明:当水位低于B时,开启水泵电机进行抽水,水池水位慢慢升高,达到预设水位C时,水泵电机停止;放水时,水池水位低于B时,水泵电机又开始启动并抽水(排除机械故障),如此循环。
当系统处于进水状态时,要求指示灯D1点亮。
设计题10:自动风扇的电气控制说明:通过对光照的感应,实现对风扇(FA)的启停,当外界没有光照时,相当于是夜间工作方式,风扇停止工作,当有光照时相当于是白天,风扇启动,以达到节能的目的设计题11:计数指示灯说明:每按一次按键SW1,发光二极管向右移动增加一个亮灯,3个全亮后,再按按键,发光二极管全灭,之后再从最左一个开始点亮。
单片机教学流程图模板
单片机教学流程图模板下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 课程导入介绍单片机的概念和应用领域。
激发学生对单片机的兴趣。
单片机的路灯流程图
1、程序总流程图
总流程图如图所示,首先程序进行初始化设置,对本单片机的A/D转换通道、定时器0、I/O口的初始化设置,设置定时器0为定时器,模式1,定时时间设置为1ms,最后开启定时器0,初始化的过程就完成了,之后开始等待中断,在没有中断时,程序不断的执行按键程序,在产生中断后,将进入中断程序,首先判断是在主显示界面还是调整值的界面,如果为主界面,将时间累计值加1,当时间累计值加到100时则正好为100ms,我们执行一次A/D转换程序,在A/D 转换程序中完成A/D转换与对红外路灯的检测的判断,最后进入显示程序,执行后返回判断中断语句。
2、按键子程序流程图
3、A/D转换程序介绍
本设计中使用STC12C5A60单片机芯片,该芯片具有A/D转换功能,我们使用单片机的P1.7口作为A/D转换口,在初始化设置中我们已将,A/D转换进行过初始化,所以我们在提取AD转换值时,步骤为:开始A/D转换,输入A/D 转换指令,然后做一个4个机器周期的延时,之后等待A/D转换的完成,如果转化完成,则停止A/D转换,储存转换值,然后返回。
51单片机设计数字温度计(流程图+源码+实物图片)
DS18B20获取温度程序流程图DS18B20的读字节,写字节,获取温度的程序流程图如图所示。
DS18B20初始化程序流程图DS18B20读字节程序流程图DS18B20写字节程序流程图DS18B20获取温度程序流程图图3-4 DS18B20程序流程图显示程序设计显示电路是由四位一体的数码管来实现的。
由于单片机的I/O 口有限,所以数码管采用动态扫描的方式来进行显示。
程序流程图如图所示。
图显示程序流程图按键程序设计按键是用来设定上下限报警温度的。
具体的程序流程图如图所示。
N图按键程序流程图附1 源程序代码/********************************************************************* 程序名; 基于DS18B20的测温系统* 功能:实时测量温度,超过上下限报警,报警温度可手动调整。
K1是用来* 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限* 调节模式。
在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动* 退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除* 按键音,再按一下启动按键音。
在调节上下限温度模式下,K2是实现加1功能,* K1是实现减1功能,K3是用来设定上下限温度正负的。
* 编程者:ZPZ* 编程时间:2009/10/2*********************************************************************/#include<AT89X52.h> //将AT89X52.h头文件包含到主程序#include<intrins.h> //将intrins.h头文件包含到主程序(调用其中的_nop_()空操作函数延时)#define uint unsigned int //变量类型宏定义,用uint表示无符号整形(16位)#define uchar unsigned char //变量类型宏定义,用uchar表示无符号字符型(8位)uchar max=0x00,min=0x00; //max是上限报警温度,min是下限报警温度bit s=0; //s是调整上下限温度时温度闪烁的标志位,s=0不显示200ms,s=1显示1s左右bit s1=0; //s1标志位用于上下限查看时的显示void display1(uint z); //声明display1()函数#include"ds18b20.h" //将ds18b20.h头文件包含到主程序#include"keyscan.h" //将keyscan.h头文件包含到主程序#include"display.h" //将display.h头文件包含到主程序/***********************主函数************************/void main(){beer=1; //关闭蜂鸣器led=1; //关闭LED灯timer1_init(0); //初始化定时器1(未启动定时器1)get_temperature(1); //首次启动DS18B20获取温度(DS18B20上点后自动将EEPROM中的上下限温度复制到TH和TL寄存器)while(1) //主循环{keyscan(); //按键扫描函数get_temperature(0); //获取温度函数keyscan(); //按键扫描函数display(temp,temp_d*0.625);//显示函数alarm(); //报警函数keyscan(); //按键扫描函数}}/********************************************************************* 程序名; __ds18b20_h__* 功能:DS18B20的c51编程头文件* 编程者:ZPZ* 编程时间:2009/10/2* 说明:用到的全局变量是:无符号字符型变量temp(测得的温度整数部分),temp_d* (测得的温度小数部分),标志位f(测量温度的标志位‘0’表示“正温度”‘1’表* 示“负温度”),标志位f_max(上限温度的标志位‘0’表示“正温度”、‘1’表* 示“负温度”),标志位f_min(下限温度的标志位‘0’表示“正温度”、‘1’表* 示“负温度”),标志位w(报警标志位‘1’启动报警‘0’关闭报警)。
单片机实验程序及流程图
《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义三.程序清单及程序流程框图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”即可实现其功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机总流程图
主函数程序
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define OSC_FREQ 12000000
#define __10ms (65536 - OSC_FREQ/(12000000/9970))
#define COM8255 XBYTE[0XFFF3]
#define PA8255 XBYTE[0XFFF0]
#define PB8255 XBYTE[0XFFF1]
#define PC8255 XBYTE[0XFFF2]
uchar code tab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6}; uchar code dis_HELLO[]={0x89,0x86,0xc7,0xc7};
uchar code dis_op51[]={0xc0,0x8c,0x92,0xf9};
uchar code dis_code[]={0xcf,0xa4,0xcf,0xa4};
uchar ucCnt_10ms=99;
uchar i=0;
uchar J=0;
uchar n=0;
uchar led1;
uchar led2;
sbit P2_4=P2^4;
sbit P3_7=P3^7;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
void Disp_op51 ();
void Disp_HELLO();
void Set_Init_Xint();
void Set_Init_Timer();
void Disp_t();
void DelayX1ms(uint count);
void Disp_8255();
void main()
{
for(;;)
{
Set_Init_Xint();
Set_Init_Timer();
Disp_8255();
//ucCnt_10ms =99;
//ucLed1 = 6;
//ucLed2 = 8;
if ( n>=1 )
{
for(;;)
{
Disp_HELLO();
if (PB8255==0xef)
{
for(;;)
{
Disp_op51 () ;
Disp_t();
for(i=0;i<0xff;i++);
}
}
for(i=0;i<0xff;i++);
}
}
}
}
定时器T0流程图
定时器初始化函数程序void Set_Init_Timer()
{
TMOD=0x01;
TH0 = __10ms/256;
TL0 = __10ms%256;
EA=1;
ET0=1;
}
定时器中断服务函数程序Run_Time0(void) interrupt 1 using 2
{
TR0 = 0;
TH0 = __10ms/256;
TL0 = __10ms%256;
TR0 = 1;
ucCnt_10ms++;
if( ucCnt_10ms==200 ) //1s
{ ucCnt_10ms = 0;
led1++ ;
if( led1==10) //1S时间到更新显示缓冲值
{
led1 = 0;led2++;}
if(led2== 10)
{
led2 = 0 ;
}
}
}
外部中断0流程图
外部中断初始化函数程序
void Set_Init_Xint()
{
IT0=1;
EX0=1;
EA=1;
}
定时器中断服务函数程序
Run_Xint0(void) interrupt 0 using 1
{
n++;
TR0=1;
}
独立式按键流程图
8255定义入口
#define COM8255 XBYTE[0XFFF3]
#define PA8255 XBYTE[0XFFF0]
#define PB8255 XBYTE[0XFFF1]
#define PC8255 XBYTE[0XFFF2]
sbit P3_7=P3^7;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
8255初始化函数程序void Disp_8255()
{
P3_7=0;
P1_0=0;
P1_1=1;
P1_2=0;
COM8255=0x82;
}
HELLO显示函数程序void Disp_HELLO() //HELLO显示函数
{
SCON = 0x00;
SBUF=0xFC;
P2_4=0;
while(!TI);
TI = 0;
P2_4=1;
P2_4=0;
SBUF=0x02;
while(!TI);
TI = 0;
P2_4=1;
P1=0x7A;
P2=dis_HELLO[0 ];
DelayX1ms(5);
P1=0xBA;
P2=dis_HELLO[1 ];
DelayX1ms(5);
P1=0xDA;
P2=dis_HELLO[2];
DelayX1ms(5);
P1=0xEA;
P2=dis_HELLO[3];
DelayX1ms(5);
}
void Disp_op51 ()
{
P1=0x7F;
P2=dis_op51[0 ];
DelayX1ms(5);
P1=0xBF;
P2=dis_op51[1 ];
DelayX1ms(5);
P1=0xDF;
P2=dis_op51[2 ];
DelayX1ms(5);
P1=0xEF;
P2=dis_op51[3 ];
DelayX1ms(5);
}
0~99显示函数程序void Disp_t()
{
SCON = 0x00;
SBUF=tab[led2];
P2_4=0;
while(!TI);
TI=0;
P2_4=1;
P2_4=0;
SBUF=tab[led1];
while(!TI);
TI=0;
P2_4=1;
}
void DelayX1ms(uint count)
{
uint j;
while(count--!=0)
{
for(j=0;j<72;j++);
}
}
---精心整理,希望对您有所帮助。