单片机流程图(参考模板)

合集下载

单片机程序流程图及源代码

单片机程序流程图及源代码

单片机上机实验报告【实验一】端口实验,掌握通过端口编程实现数据输出和输入的方法,并观察结果。

实验内容: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资料

单片机新手教学教案含流程图及程序(优秀版)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)班)物资供应计划工作流程生产过程组织设计流程生产过程各职能模块配合流程生产制程控制流程退货返工返工返工劳动定额管理程序说明:完善劳动生产定额管理,对于一车间这样的装备制造型车间尤为重要。

51单片机设计数字温度计(流程图+源码+实物图片)

51单片机设计数字温度计(流程图+源码+实物图片)

DS18B20获取温度程序流程图DS18B20的读字节,写字节,获取温度的程序流程图如图所示结束DS18B20初始化程序流程图写0x44启动DS18B20延时500 s_____ 、一DS18B20 初始化写0xcc跳过读RCMDS18B20获取温度程序流程图DS18B20读字节程序流程图图3-4 DS18B20程序流程图DS18B20写字节程序流程图显示程序设计显示电路是由四位一体的数码管来实现的。

由于单片机的I/O 口有限,所以数码管采用动态扫描的方式来进行显示。

程序流程图如图所示。

图显示程序流程图按键程序设计按键是用来设定上下限报警温度的。

具体的程序流程图如图所示N附 1 源程序代码******************************************************************* 程序名 ; 基于 DS18B20 的测温系统* 功 能: 实时测量温度,超过上下限报警,报警温度可手动调整。

K1 是用来 * 进入上下限调节模式的,当按一下 K1 进入上限调节模式,再按一下进入下限 * 调节模式。

在正常模式下,按一下K2 进入查看上限温度模式,显示 1s 左右自动* 退出;按一下 K3 进入查看下限温度模式,显示 1s 左右自动退出;按一下 K4 消除 * 按键音,再按一下启动按键音。

在调节上下限温度模式下, K2 是实现加 1 功能, * K1 是实现减 1 功能, K3 是用来设定上下限温度正负的。

* 编程者: ZPZ * 编程时间: 2009/10/2*******************************************************************bit s=0;〃s 是调整上下限温度时温度闪烁的标志位, s=0不显示200ms , s=1 显示 1s 左右bit s1=0; void display1(uint z); #include"ds18b20.h" //s1 标志位用于上下限查看时的显示//声明 display1 ()函数//将 ds18b20.h 头文件包含到主程序#include"keyscan.h" #include"display.h"/***********************//将 keyscan.h 头文件包含到主程序 //将 display.h 头文件包含到主程序 主函数 ************************/#include<AT89X52.h> #include<intrins.h>// 将 AT89X52.h 头文件包含到主程序 //将 intrins.h 头文件包含到主程序(调用其中的 函数延时)_nop_() 空操作#define uint unsigned int #define uchar unsigned char uchar max=0x00,min=0x00;//变量类型宏定义,用 //变量类型宏定义,用//max 是上限报警温度, uint 表示无符号整形( 16 位) uchar 表示无符号字符型( 8 位)min 是下限报警温度void main(){beer=1;led=1; timer1_init(0); get_temperature(1);while(1){keyscan();get_temperature(0);//获取温度函数//关闭蜂鸣器// 关闭LED 灯//初始化定时器1(未启动定时器1)// 首次启动DS18B20 获取温度(DS18B20 上点后自动将EEPROM 中的上下限温度复制到TH 和TL 寄存器)//主循环//按键扫描函数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'关闭报警 ) 。

单片机四个实验报告流程图

单片机四个实验报告流程图

实验一流水灯
实验目的:用AT89C51控制,使8个LED轮流点亮,周期1S,且LED使用驱动电路。

单片机电路
流程图
开始
将累加器的值赋为0FEH
将累加器的值输出给P1
循环左移一位
延时1秒
实验二定时器/计数器的使

实验目的:用T0对1kHz方波进行计数,每满200个使输出翻转;用T1产生20ms定时,满200ms时使翻转,满1s时使翻转。

电路图
流程图
开始
给TMOD赋初值,设
设定定时器初值
开启中断
等待中断
T0中断子程序,翻转T1中断子程序,
翻转
T1中断子程序,
翻转
脉冲个数满200 T1计时满200ms T1计时满1s
实验三 矩阵键盘的使用
单片机电路
流程图
开始 扫描键盘码 延时10ms
再次扫描键盘码
比较两次键盘码
将上次的按键字符左移,将
寻找较键盘码对应的字符
Y
N
实验四双机通信
实验目的:单片机甲同期发送一个自累加数值,周期500ms,用定时器且用中断;单片机乙中断方式接收数据,并通过P1口外接LED显示。

实验电路图:
实验流程图:
单片机乙。

单片机设计程序流程图

单片机设计程序流程图

设计题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个全亮后,再按按键,发光二极管全灭,之后再从最左一个开始点亮。

whut选修单片机实验表格与流程图打印版.

whut选修单片机实验表格与流程图打印版.
注意累加器A的值的变化和累加器A的位地址
CLR C
PSW中的值=OOH
注意进位位的位地址
ADD A, #OFFH
A中的值=7OH
PSW中的值=71H
验证(A)+FFH=>A,并注意PSW中的值的变化
原因
ADDC A, #OOH
A中的值=71H
注意累加器A的值的变化
SETB OEAH
位地址EAH所在的
MOV DPL, #OOH
DPL的字节地址=82H
DPL中的值=OOH
MOV DPH, #2OH
DPL中的值=OOH
DPTR中的值=2OOOH
掌握DPTR的形成
MOV TLO, #OOH
TLO的字节地址=8AH
TLO中的值=OOH
MOV THO, #1OH
THO中的值=OOH
TO中的值=1OOOH
掌握TO的形成
A的地址=EOH ,A中的值=
OFH ,指令编码:74H,OFH
注意累加器A的值的变化并与下一条指令比较
MOV OEOH,#OFOH
A中的值=FOH指令编码:75H,OFH
累加器A在特殊功能寄存器区中的字节地址
SETB OEOH
A中的值=F1H
注意累加器A的值的变化和累加器A的位地址
CLROE7H
A中的值=71H
指令
指令编码
指令执行结果
MOV DPTR, #0100H
90H,01H,00H
DPH=01H DPL=OOH DPTR=0100H
INC DPTR
A3H
DPH=01H DPL=O1H DPTR=0101H
INC DPL
05H,82H

单片机主程序流程

单片机主程序流程

单片机主程序流程单片机教程栏目导航第一页..单片机入门教程第二页..单片机c语言第三页..红外遥控和步进电机第四页..单片机问答3.主程序流程图---51系列单片机设计实例教程主程序流程图如图6.2所示。

图6.2 主程序流程图本控制器在使用中,如要改变闪烁的方式,可按下相应的功能按键。

当一个完整的闪烁循环结束后,即可转入新的闪烁方式。

由于键扫描是在闪烁循环结束时进行,因此,功能开关按下的时间应较长才能被读入。

改进的方法是把DL05S延时子程序用键扫描子程序来替代,这样,只要按下按键即可被键扫描程序读入。

以下是LED小灯闪烁控制器的完整源程序:;* * * * * * * * * * * *;;小灯控制程序;;* * * * * * * * * * * *;;;* * * * * * * * * * * *;;中断入口程序;;* * * * * * * * * * * *;;ORG OOOOH;程序执行开始地址LJMP START;跳至START执行ORG OOO3H;外中断0中断入口地址RETI;中断返回(不开中断)ORG OOOBH;定时器TO中断入口地址RETI;中断返回(不开中断)ORG OO13H;外中断1中断入口地址RETI;中断返回(不开中断)ORG 001BH;定时器T1中断入口地址RETI;中断返回(不开中断)ORG 0023H;串行口中断入口地址RETI;中断返回(不开中断);;* * * * * * * * * * * *;;初始化程序;;* * * * * * * * * * * *;;CLEAR:MOV 20H,#00H;20H单元内存清0(闪烁标志清0)SETB 00H;20H.0位置1(上电时,自动执行闪烁功能1)RET;子程序返回;;* * * * * * * * * * * *;;主程序;;* * * * * * * * * * * *;;START:ACALL CLEAR;调用初始化子程序MAIN:LCALL KEYWORK;调用键扫描子程序JB OOH,FUNO;20H.0位为1时执行FUNOJB 01H,FUN1;20H.1位为1时执行FUN1JB 02H,FUN2;20H.2位为1时执行FUN2JB 03H,MAIN;备用AJMP MAIN;返回主程序MAIN;;* * * * * * * * * * * *;;功能程序;;* * * * * * * * * * * *;;第1种闪烁功能程序FUNO:MOV A,OFEH;累加器赋初值FUNOO:MOV P1,A;累加器值送至P1口LCALL DL05S;延时JNB ACC.7.MAIN;累加器最高位为0时转MAINRL A;累加器A中数据循环左移1位AJMP FUNOO;转FUNOO循环;;第2种闪烁功能程序FUN1:MOV A,#OFEH;累加器赋初值FUN11:MOV P1,A;累加器值送至P1口LCALL DLO5S;延时CPL A;A中各位取反MOV P1,A;累加器值送至P1口LCALL DL05S;延时AJMP MAIN;转MAIN;* * * * * * * * * * * *;;扫键程序;;* * * * * * * * * * * *;;KEYWORK:MOV P3#OFFH;置P3口为输入状态JNB P3.0,KEYO;读P3.0口,若为0转KEYOJNB P3.1,KEY1;读P3.1口,若为0转KEY1JNB P3.2,KEY2;读P3.2口,若为0转KEY2JNB P3.3,KEY3;读P3.3口,若为0转KEY3RET;子程序返回;;闪烁功能0键处理程序KEYO:LCALL DL10MS;延时10ms消抖JB P3.0,OUTO;P3.0为1,子程序返回(干扰)SETB OOH;20H.0位置1(执行闪烁功能1标志)CLR 01H;20H.1位清0CLR 02H;20H.2位清0OUTO:RET;子程序返回;;闪烁功能1键处理程序KEY1:LCALL PL10MSJB P3.1,OUT1SETB 01H;20H.1位置1(执行闪烁功能2标志)CLR 00HCLR 02HCLR 03HOUT2:RET;;闪烁功能(备用)键处理程序KEY3:LCALL DL10MSJB P3.2,OUT2SETB 02H;20H.2位置1(执行闪烁功能3标志)CLR 01HCLR 00HCLR 03HOUT2:RET;;闪烁功能(备用)键处理程序KEY3:LCALL DL10MSJB P3.3,OUT3SETB 03H;20H.3位置1(执行闪烁功能3标志)CLR 01HCLR 02HCLR 00HOUT3:RET;;* * * * * * * * * * * *;;延时程序;;* * * * * * * * * * * *;;延时子程序,执行一次时间为513usDL512:MOV R2,#OFFHLOOP1:DJNZ R2,LOOP1RET;;10ms延时子程序(调用20次0.5ms延时子程序)DL10MS:MOV R3,#14HLOOP2:LCALL DL512DJNZ R3,LOOP2RET;;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为25msX15)DL05s:MOV R4,#OFHLOOP3:LCALL DL25MSDJNZ R4,LOOP3RET;;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为25msX15)DL05S:MOV R4,#OFHLOOP3:LCALL DL25MSDJNZ R4,LOOP3RET;;25ms延时子程序,调用扫键子程序延时,可快速读出功能按键值DL25MS:MOV R5,#OFFHLOOP4:LCALL KEYWORKDJNZ R5,LOOP4RETEND;程序结束12个经典单片机程序设计实例:闪烁LED小灯主程序图数码管时钟电路的主程序单键学习型遥控器的设计15路电器遥控器的设计自行车里程/速度计的设计自动往返行驶小汽车的设计遥控小汽车的设计数码管时钟电路的设计8*8点阵LED字符显示器的设计8路输入模拟信号数值显示电路的设计8路输入模拟信号数值显示电路程序单键学习型遥控器的程序如果对本文有疑问,请到论坛提问编辑:51单片机学习网@ 2009-10-20校对中国开发板最佳品牌版权:部分由编辑摘引,权利属原著作人。

单片机实验程序及流程图

单片机实验程序及流程图

《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义三.程序清单及程序流程框图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”即可实现其功能。

毕业设计-单片机【范本模板】

毕业设计-单片机【范本模板】

摘要本设计主要设计了一个基于AT89C51单片机的电子时钟。

并在数码管上显示相应的时间。

并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。

应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真.该方法仿真效果真实、准确,节省了硬件资源.同时单片机以AT89C51为核心元件采用LED数码管显示器动态显示“时”,“分",“秒”的现代计时装置。

与传统机械表相比,它具有走时精确,显示直观等特点。

另外具有校时功能,秒表功能,和定时器功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。

关键词:数字钟系统;单片机; LED液晶显示器Digital clock systemAbstractThe system uses MCU with time, the school features such as the digital clock, SCM AT89C51 is also used as the core components of the LED digital display dynamic display ”when” and "poin ts” and "seconds" of the modern time device 。

Compared with the traditional mechanical watches, it has a precise path that intuitive, and other characteristics。

In addition a school function, stopwatch function, and the timer function to achieve MCU use of the digital clock with programming flexibility to facilitate the expansion of functional advantages。

单片机的路灯流程图

单片机的路灯流程图

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转换,储存转换值,然后返回。

单片机流程图(参考模板)

单片机流程图(参考模板)

单片机总流程图主函数程序#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. 函数波形发生器开始初始化:设置堆栈设定T0为高级中断允许T0中断2mS 定时初值送T0置上升标志输出单元清零启动T0计数开中断输出三角波?置三角波标志清三角波标志NY主程序流程开始保护现场停止计数输出1Hz 吗?4mS 定时初值送T02mS 定时初值送T0YN启动计数上升段吗?到顶了吗?YNY输出三角波?输出单元内容加1NYN输出单元内容减1清上升标志到底了吗输出单元内容清零置上升标志输出单元内容加1输出单元内容减1YN输出单元内容送D/A中断返回恢复现场T0中断服务程序流程三角波?4mS 定时初值送T0三角波?8mS 定时初值送T0Y Y NN2. 255秒定时器开始初始化:设置堆栈设定INT0为边沿触发,低级中断设定T0位定时器方式,高级中断设定T0为50mS 定时设定T1为定时器方式,低级中断,定时时间为0.5mS 设定串口为方式0开中断允许INT0中断关闭T0,T1中断清报警声标志清P1.11秒计数值#20送R0清1秒标志30秒计数值#30送R1清定时时间单元清正在定时标志启动A/D 转换转换好了吗?YN存储A/D 转换结果将转换结果(16进制数)转换为显示的字形码从串行口输出,显示转换结果Y正在定时吗?N取定时单元内容将定时单元内容(16进制数)转换为显示所需的字形码将字形码从串行口输出,用以显示所剩时间Y主程序流程图开始保护现场使用2区R 寄存器A/D 转换结果送定时单元定时单元内容为零吗?开T0中断启动T0计数关闭INT0中断置正在定时标志恢复现场中断返回INT0中断服务程序流程N Y开始保护现场使用2区R 寄存器T1中断服务程序流程送0.5mS 定时初值启动T1计数P1.1取反中断返回恢复现场开始保护现场使用1区R 寄存器送50mS 定时初值启动T0计数R0 = 0 ?R0-1 -> R0#20 -> R0定时单元内容减1报警声标志为1 ?定时单元内容为零?清正在定时标志0.5mS 定时初值送T1,启动T1计数允许T1中断置报警声标志T0中断服务程序流程恢复现场中断返回Y NYNNR1-1 -> R1R1 = 0 ?停止T1计数禁止T1中断停止T0计数禁止T0中断50mS 定时初值送T00.5mS 定时初值送T1清报警声标志允许INT0中断#30 -> R1NY开始主程序流程图启动A/DA/D 转换好?取A/D 转换结果将转换结果取反将取反后的A/D 转换结果输出至D/AYN开始主程序流程图选择A/D 转换通道启动A/D 转换转换好了吗?取A/D 转换值A/D 转换值/21,结果送累加器A查表得到要显示的12位二进制数将查表的得到12位二进制数低八位送P1口,高四位送P3.3-P3.0YN注:P1口和P3.0-P3.3接12个LED 灯,其中P3.3接最高位灯L12,P1.0接最低位灯L0。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++);
}
}
---精心整理,希望对您有所帮助。

相关文档
最新文档