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

单片机总流程图

主函数程序

#include

#include

#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++);

}

}

---精心整理,希望对您有所帮助

智能小车单片机程序+论文+流程图+管教说明-报告模板

简易智能小汽车 队长:黄洋队员:尹志军梁荣新 赛前辅导老师:臧春华文稿整理辅导老师: 摘要 设计分为5个模块:前轮PWM驱动电路、后轮PWM驱动电路、轨迹探测模块、障碍物探测模块、光源探测模块。前轮PWM驱动电路用于转向控制;后轮PWM驱动电路用于方向和速度控制;探测模块利用三个光感元件,对黑色轨道进行寻迹;障碍物探测模块用于对两个障碍物进行探测;光源探测模块利用三个光敏电阻制成,用于寻光并确定光源角度,以期获得较为精确的转向值。绕障方案利用障碍物较低这个重要条件,在C点出发后,先利用光敏电阻获得光源的方向是本设计的一大特色。 一、方案论证与比较 1.轨迹探测模块设计与比较 方案一、使用简易光电传感器结合外围电路探测。 由于所采用光电传感器实际效果并不理想,对行驶过程中的稳定性要求很高,且误测几率较大、易受光线环境和路面介质影响。在使用过程极易出现问题,而且容易因为该部件造成整个系统的不稳定。故最终未采用该方案。 方案二、利用两只光电开关。 分别置于轨道的两侧,根据其接受到白线的先后来控制小车转向来调整车向,但测试表明,如果两只光电开关之间的距离很小,则约束了速度,如果着重于小车速度的提升,则随着车速的提升,则势必要求两只光电开关之间的距离加大,从而使得小车的行驶路线脱离轨道幅度较大,小车将无法快速完成准确的导向从而有可能导致寻迹失败。 方案三、用三只光电开关。 一只置于轨道中间,两只置于轨道外侧,当小车脱离轨道时,即当置于中间的一只光电开关脱离轨道时,等待外面任一只检测到黑线后,做出相应的转向调整,直到中间的光电开关重新检测到黑线(即回到轨道)再恢复正向行驶。现场实测表明,虽然小车在寻迹过程中有一定的左右摇摆(因为所购小车的内部结构决定了光电开光之间的距离到达不了精确计算值1厘米),但只要控制好行驶速度就可保证车身基本上接近于沿靠轨道行驶。 综合考虑到寻迹准确性和行驶速度的要求,采用方案三。 2.数据存储比较 方案一、采用外接ROM进行存储。 采用外接ROM进行存储是保存实验数据的惯用方法,其特点是在单片机断电之后

单片机秒表设计程序及原理图

单片机秒表系统设计 引言:中国使用单片机的历史只有短短的30年,在初始的短短五年时间里发展极为迅速。纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。以前没有单片机时,这些东西也能做,但是只能使用复杂的模拟电路,然而这样做出来的产品不仅体积大,而且成本高,并且由于长期使用,元器件不断老化,控制的精度自然也会达不到标准。在单片机产生后,我们就将控制这些东西变为智能化了,我们只需要在单片机外围接一点简单的接口电路,核心部分只是由人为的写入程序来完成。这样产品的体积变小了,成本也降低了,长期使用也不会担心精度达不到了。所以,它的魔力不仅是在现在,在将来将会有更多的人来接受它、使用它。据统计,我国的单片机年容量已达3亿片,且每年以大约20%的速度增长,但相对于世界市场我国的占有率还不到1%。特别是沿海地区的玩具厂等生产产品多数用到单片机,并不断地辐射向内地。所以,学习单片机在我国是有着广阔前景的。 一、单片机秒表系统设计目的及内容 1、利用单片机定时器/计数器中断设计秒表,从而实现秒、十分

之一秒的计时。 2、综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。 3、通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握,对单片机实际的应用作进一步的了解。 4、通过本次系统设计,增强自己的动手能力。认识单片机在日常生活中的应用的广泛性,实用性。 本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。模拟利用AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计数的开启/暂停/继续与复位! 其中有两个数码管用来显示数据,一个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。计秒数码管采用两位的数码管,当计数超过范围是所有数码管全部清零重新计数。 二、系统设计所需硬件(模拟硬件) Atmel89C51单片机芯片一个、LED数码显示管三个,低压电源、开关(按钮)两个、电阻、电容及导线若干。芯片介绍:AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能

单片机课程设计(附原理图)

单片机接口原理及应用 课程设计报告 学院:工学院 题目:数字式温度计设计 专业:机械设计制造及其自动化 班级: 07机电2班 姓名: 学号: 070105085 指导教师:冯振伟 起止日期:2010年12月1日~2010年12月20日

目录 一、前言 (2) 二、课程设计目的和要求 (2) 三、总体设计方案 (2) 1. 整体功能说明 (2) 2. 硬件功能模块组成 (2) 3. 软件功能模块组成 (3) 4. 硬件总体框图 (3) 5. 测试计划 (3) 四、系统硬件设计 (4) 1. 整体功能说明 (4) 2. 硬件功能模块组成 (4) 2.1 主控制器 (4) 2.2 温度测量模块 (4) 2.3 显示电路 (5) 2.4 温度传感器工作原理 (5) 五、系统的软件设计 (7) 1. 主程序 (7) 2. 读出温度子程序 (8) 3. 温度转换命令子程序 (9) 4. 计算温度子程序 (9) 5. 显示数据刷新子程序 (9) 六、程序清单 (10) 七、结束语 (17) 八、参考文献 (18) 附录:系统原理图(见A3图纸)

前言 当今社会,温度检测系统被广泛的社会生产、生活的各个领域。在工业、环境检测、医疗、家庭等多方面都有应用。同时单片机在电子产品中的应用已经越来越广泛。 随着温度检测理论与技术的不断更新,温度传感器的种类也越来越多,在微机系统中使用的传感器,必须是能够将非电量转换成电量的传感器,目前常用的有热电偶传感器、热电阻传感器和单导体传感器等,每种传感器根据其自身特性,都有它自己的应用领域。 本设计所介绍的数字温度计与传统的温度计相比,具有读数方便、测温范围广、测温准确、其输出温度采用数字显示等优点,主要用于对温度比较准确的场所,或科研实验室使用。该设计控制器使用单片机AT89C51,温度传感器使用DS18B20,用4位共阳极LED数码管以串口显示数据,实现温度显示。 二、课程设计目的和要求 1 设计目的 1.学会A/D转换芯片的用法; 2.学会掌握8051单片机用法; 3.学会单片机的程序设计; 4.培养查阅资料的能力。 2.设计要求 本设计主要是介绍了单片机控制下的温度检测系统,详细介绍了其硬件和软件设计,并对其各功能模块做了详细介绍,其主要功能和指标如下: 1.利用温度传感器(DS18B20)测量某一点环境温度; 2.测量范围为-55℃~+99℃,精度为±0.5℃; 3.用数码管进行实际温度值显示; 4.能够根据需要方便设定上下限报警温度。 三、总体设计方案 ⒈整体功能说明: 以51单片机为主控制器,以数字式温度传感器DS18B20为传感元件,以LED数码管作为显示器件实时显示测量温度(十进制数)。数字式温度计测温范围在-55~125℃,误差在±0.5℃以内。温度测量间隔时间选择1 s 。

MCS51_单片机实验指导书

实验1 汇编语言简单试验---Keil C51的使用 一、实验目的: 熟悉Keil C51 集成开发环境的使用方法,初步掌握Keil C51基本的操作和使用,能够输入、编译和仿真调试简单的程序。 二、实验内容: 在Keil C51 集成开发环境编写程序,实现P1.0口单灯闪烁的功能(假设P1.0口所接发光二极管低电平点亮),编写程序后在Keil C51 集成开发环境完成编译和仿真,实现全速运行、单步运行、并学会设置断点、查看相关寄存器等操作。 三、实验设备: 安装Keil C51的计算机一台。 四、实验步骤:(参考教材第11章) 1)建立一个工程项目选择芯片确定选项。 执行Keil C51软件的菜单“Project | New Project…”,弹出一个名为“Create New Project”的对话框。先选择一个合适的文件夹准备来存放工程文件,最后,为工程取名,并保存。如图1-1所示,紧接着,Keil C51提示您选择CPU器件。在这里可以选择Atmel公司的AT89S52。 图1-1 Keil C51 工程的建立 2)编写(或加入)汇编源文件或C 源文件,并添加到工程中。 执行菜单“File | New…”,出现一个名为“Text n”(其中n表示序号)的文档。如图1-2所示。 执行菜单“File | Save”,弹出一个名为“Save As”的对话框。将文件名改为你事先起好的名称,然后保存。注意:扩展名“.ASM或.c”不可省略。 单击Keil C51软件左边项目工作窗口“Target 1”上的“+”,将其展开。然后

右击“Source Group 1”文件夹,会弹出如图 1.7所示的选择菜单。单击其中的“Add Files to Group 'Source Group 1'”项,将源程序文件添加到工程中。 然后编写如下程序源文件,并再次保存。 ORG 0000H MAIN: CLR P1.0 ;(1)点亮LED MOV 30H,#255 LCALL DELAY ;(2)调用延时子程序 SETB P1.0 ;(3)熄灭LED MOV 30H,#200 LCALL DELAY ;(4)调用延时子程序 AJMP MAIN ;(5)返回MAIN处执行 DELAY:MOV R7,30H ;(6)延时程序 D1:MOV R6,#250 ;(7) D2:DJNZ R6,D2 ;(8)R6存放内循环次数 DJNZ R7,D1 ;(9)R7存放外循环次数 RET ;(10) END 3)设置参数 单击“Option”选项,在“Output”标签页,选中“Create HEX File”项,然后“确定”。其他参数的设置可参考相关教材。 4)编译源程序 单击工具栏的按钮“”编译当前源程序。编译结果会显示在输出 窗口内。如果是“0 Error(s), 0 Warning(s).”就表示程序没有问题了(至少是在语法上不存在问题了)。如果存在错误或警告,请仔细检查您的程序。修改后,再编译,直到通过为止。 编译后的结果会生成HEX 格式的程序文件“LedFlash.hex”。 5)编译连接通过后进行软件模拟仿真。 直接点击工具栏红色的“”图标。进入仿真状态。 执行菜单“Peripherals | I/O-Ports | Port 1”,弹出P1端口的界面,如图1-3。在位0~7中,用√表示高电平,无√表示低电平。 图1-3仿真I/O 端口

单片机流程图

单片机总流程图

主函数程序 #include #include #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;

单片机课程设计

单 片 机 课 程 设 计 论 文 学校:西安科技大学 学院:电气与控制工程学院 专业:微电子学 姓名:朱善旭 1206080205 王敏敏 1206080202 王会登 1206080216 王磊1206080124

六位数电子锁电路设计 摘要:电子密码锁在生活中十分常见,广泛运用于各种控制电路中。电子密码锁应该具有输入功能和比较功能,同时具有控制功能。在本次设计中,密码锁的输入设备为4*3矩阵键盘,其中包括0——9数字键,确认、清除功能键。比较功能在单片机内部程序中实现,将输入数字与预设密码比较,相同则触发控制功能,比如设备的开启,不同则清零,用户需要重新输入。为了用户方便使用,在输入时需要将所输入数字显示出来,所以利用数码管做显示设备。 关键词:密码锁,矩阵键盘,扫描,数码管

1设计任务分析 1.1原理 电子锁,就是利用一个固定的或人为设定的电子号码来控制锁的开启状态的电路。我们常见的电子锁,如密码箱、保险柜、密码门等,都是在使用者输入的号码与之前设定的号码顺序及内容均相同时,电路控制的锁或者门等就会开启。 由于电子锁要求的输出数据为数字0-9,同时为了方便使用者的输入、修改和确定,还应该有输入的清除按键和确认按键。 1.1.1键盘控制的一般方法 在单片机的输入设备中,键盘是最为常见的一种。它有多种形式,有独立按键式、矩阵键盘式等。矩阵按键式键盘就是用行列矩阵的方式来构成键盘的一种控制方式。行线与列线分别可由单片机的控制I/O引脚和电源的Vcc(也可是GND)来连接,行线与列线的交汇点上连接有按键。当按键有动作时,相应点上行与列的电平就导通。若此时用单片机程序来检测,就可发现相应引脚上的电平发生了变化。 对于键盘的控制是有多种方法的。 (1)独立式按键 这种方式是采用JNB或JB指令来实现检测的目的。 (2)键盘扫描法 这种方式是将行线与列线分别与单片机的引脚相连,然后在初始程序中令其中的行(列)所在的引脚电平为低电平。之后,再不断地同时检测行与列所对应的引脚状态。当某个位置有按键动作时,相应行与列的引脚状态就会发生变化,系统从而获知有按键的动作。 这种方式有时也可进行一定的变化,比如,用行(或列)线通过限流电阻与电源正极或负极相连,然后将列(或行)线与单片机的引脚相连,这样,在程序中就只需检测列线上的电平状态即可。 (3)键盘中断法 这种方法是利用中断来使单片机系统响应按键的动作,从而使系统在无按键动作时,可以进行其他的操作。比如四根列线与电源的正极和单片机I/O引脚相连并通过一个与门连接到单片机INT0中断引脚,行线与单片机I/O引脚相连,在初始程序中使行线连接引脚为低电平。这样,当某一位置有按键动作时,相应列线上就会出现低电平,从而使的INT0引脚上有低电平输入,这就可以触发INT0中断。然后系统就可以在中断服务子程序中去具体检测是哪一根行列点上的按键有动作了。 在本次设计中,选用键盘扫描法来控制键盘。 1.1.2键盘扫描的一般设置步骤 当需要的按键数量较多时,通常使用矩阵式键盘来作为输入的按键方式。同时,在功能比较简单的系统中,用处都是采用键盘扫描的方式来控制键盘。 例如一个3*3矩阵键盘,使用P1.2~P1.0和P1.7~P1.5分别控制键盘的行线和列线。可以先编写一个键盘码的数据表TABLE,这个表的数据与图中标明的按键所代表的含义应当相同。比如图中,9个按键分别指代1~9的数字键。因此,

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

单片机上机实验报告 【实验一】端口实验,掌握通过端口编程实现数据输出和输入的方法,并观察结果。 实验内容: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均赋值为0 ACALL DEL;调用延迟 MOV P0 ,#0FFH; MOV P1 ,#0FFH; MOV P2 ,#0FFH; MOV P3 ,#0FFH;P0~P3均设为1 MOV A,P0;将P0口值赋给累加器 ACALL DEL; AJMP MAIN;跳转到主程序入口 ORG 0200H;延迟程序入口地址

DEL:MOV R5,#04H;寄存器实现延迟, F3:MOV R6,#0FFH;若主频为12MHZ F2:MOV R7,#0FFH;延时为 F1:DJNZ R7,F1;0.26S,人眼可分辨 DJNZ R6,F2; DJNZ R5,F3; RET;从延迟程序返回 END;结束 3.假设P0口外接一个数码管(共阴),如图,请在数码管上轮流显示数字0~9(采用软件延时)。 程序流程图: Array 将数码管的真值编码0~9依次赋给P0并调用延迟,然后循环运行程序即可。源代码: ORG 0000H; 程序入口 SJMP MAIN; 跳转到主程序 ORG 0300H; 主程序入口地址 MAIN:MOV P0,#0FCH; 将数码管0的编码赋给P0口 ACALL DELAY; 调用延迟,使数码管亮0持续0.33S MOV P0,#60H; show 1 ACALL DELAY; MOV P0,#0DAH; show 2 ACALL DELAY; MOV P0,#0F2H; show 3 ACALL DELAY; MOV P0,#66H; show 4 ACALL DELAY; MOV P0,#0B6H; show 5 ACALL DELAY; MOVP0,#0BEH; show 6 ACALL DELAY; MOV P0,#0E0H; show 7 ACALL DELAY;

单片机主程序流程

演讲稿工作总结调研报告讲话稿事迹材料心得体会策划方案 单片机主程序流程 单片机教程栏目导航第一页..单片机入门教程第二页..单片 机 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;中断返回(不开中断) ORG001BH;定时器 T1 中断入口地址 RETI;中断返回(不开中断) ORG0023H;串行口中断入口地址 RETI;中断返回(不开中断) ; ;************; ;初始化程序; ;************; ; CLEAR: MOV20H,#00H;20H 单元内存清 0(闪烁标志清 0)SETB 00H;20H.0 位置 1(上电时,自动执行闪烁功能 1)

单片机流程图

单片机总流程图 开始 定义I/O 对象,变量 (n ,j ,i ) 定义条形码 定时器,中断服务初始化 HELLO 显示函数 n>=o ? OP51显示函数 0~99显示函数 i

主函数程序 #include #include #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;

单片机IO口工作原理及结构框图

单片机IO口工作原理及结构框图 8051单片机I/O引脚工作原理 一、P0端口的结构及工作原理 P0端口8位中的一位结构图见下图: 由上图可见,P0端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构成。再看图的右边,标号为P0.X引脚的图标,也就是说P0.X引脚可以是P0.0到P0.7的任何一位,即在P0口有8个与上图相同的电路组成。 下面,我们先就组成P0口的每个单元部份跟大家介绍一下: 先看输入缓冲器:在P0口中,有两个三态的缓冲器,在学数字电路时,我们已知道,三态门有三个状态,即在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态(或称为禁止状态),大家看上图,上面一个是读锁存器的缓冲器,也就是说,要读取D锁存器输出端Q的

数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为‘读锁存器’端)有效。下面一个是读引脚的缓冲器,要读取P0.X引脚上的数据,也要使标号为‘读引脚’的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机的内部数据总线上。

D锁存器:构成一个锁存器,通常要用一个时序电路,时序的单元电路在学数字电路时我们已知道,一个触发器可以保存一位的二进制数(即具有保持功能),在51单片机的32根I/O口线中都是用一个D触发器来构成锁存器的。大家看上图中的D锁存器,D端是数据输入端,CP是控制端(也就是时序控制信号输入端),Q是输出端,Q非是反向输出端。 对于D触发器来讲,当D输入端有一个输入信号,如果这时控制端CP 没有信号(也就是时序脉冲没有到来),这时输入端D的数据是无法传输到输出端Q及反向输出端Q非的。如果时序控制端CP的时序脉冲一旦到了,这时D端输入的数据就会传输到Q及Q非端。数据传送过来后,当CP时序控制端的时序信号消失了,这时,输出端还会保持着上次输入端D的数据(即把上次的数据锁存起来了)。如果下一个时序控制脉冲信号来了,这时D端的数据才再次传送到Q端,从而改变Q端的状态。 多路开关:在51单片机中,当内部的存储器够用(也就是不需要外扩展存储器时,这里讲的存储器包括数据存储器及程序存储器)时,P0口可以作为通用的输入输出端口(即I/O)使用,对于8031(内部没有ROM)的单片机或者编写的程序超过了单片机内部的存储器容量,需要外扩存储器时,P0口就作为‘地址/数据’总线使用。

单片机原理及应用课程设计报告模板

《单片机原理及应用》课程设计 题目: 专业: 班级: 姓名: 学号: 指导老师: 目录 概述 (3) 1.系统方案 (4)

1.1信号发生部分 (5) 1.2显示部分 (6) 2.系统设计 (6) 2.1总体设计思路 (6) 2.2总体框图 (6) 3.硬件电路 (7) 3.1单片机电路 (7) 3.1.1功能与基本原理 (7) 3.1.2资源分配 (8) 3.2波形转换(D/A)电路 (8) 3.3显示接口电路 (10) 3.4 键盘接口电路 (11) 3.5电源电路 (12) 4.软件设计及流程 (12) 4.1主程序流程图 (13) 4.2幅值频率设定子程序流程图 (14) 4.3显示子程序流程图 (15) 4.4中断子程序流程图 (16)

5.设计的改进 (17) 6.结束语 (18) 参考文献 (19) 附录 (20) 附录1元件清单 (20) 附录2电路原理图 (21) 附录3程序清单 (22) 概述 波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。本函数发生器采用STC89C52 单片机作为控制核心,外围采用数字/模拟转换电路

(DAC0832)、运放电路(uA741)、按键和LCD显示电路等。电路采用STC89C52单片机和一片DAC0832数模转换器组成数字式低频信号发生器。函数信号发生器,它具有价格低、性能高和在低频围稳定性好、操作方便、体积小、耗电少等特点。由于采用了uA741运算放大器和滤波电路,使其电路更加具有较高的稳定性能,性能比高。此电路清晰,出现故障容易查找错误,操作简单、方便。 通过按键控制可产生方波、三角波、正弦波,同时用LCD1602显示幅值和频率。所产生的波形V P-P围为0~5 V,。本系统设计简单、性能优良,具有一定的实用性。 1.系统方案 题目对于功能的要求:利用D/A转换器,系统能输出三角波、梯形波、锯齿波信号,使用键盘或电位器来调整输出频率,并能在显示器显示设定值。使用按键切换上述三种输出波形。 对于硬件要求:使用D/A、LED显示器、按键或电位器等。LED显示器、按键数目尽量少,但要说明显示方式和操作步骤。

单片机设计数字温度计流程图源码实物图片要点

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头文件包含到主程序 #include //将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(); //按键扫描函数

单片机实验程序及流程图

《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义

三.程序清单及程序流程框图 ORG 0000H Array LJMP MAIN MAIN: MOV R0,#30H MOV R2,#10H CLR A A1: 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,R3

MOV DPH,R4 MOVX @DPTR,A INC DPTR MOV R3,DPL MOV R4,DPH DJNZ R2,A4 MOV R0,#50H MOV DPTR,#5800H MOV R2,#10H A5: MOVX A,@DPTR MOV @R0,A INC R0 INC DPTR DJNZ R2,A5 POP DPH POP DPL HERE: LJMP HERE END

相关主题
相关文档
最新文档