单片机主程序流程

时间:2019-05-12 04:31:44下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《单片机主程序流程》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《单片机主程序流程》。

第一篇:单片机主程序流程

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

单片机主程序流程

单片机教程 栏目导航

第一页..单片机入门教程

第二页..单片机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时执行FUNO

JB

01H,FUN1;20H.1位为1时执行FUN1

JB

02H,FUN2;20H.2位为1时执行FUN2

JB

03H,MAIN;备用

AJMP

MAIN;

返回主程序MAIN ;

;* * * * * * * * * * * *;;

功能程序

;* * * * * * * * * * * *;

;第1种闪烁功能程序

FUNO:

MOV

A,OFEH;

累加器赋初值 FUNOO:

MOV

P1,A;

累加器值送至P1口

LCALL DL05S;

延时

JNB

ACC.7.MAIN;累加器最高位为0时转MAIN

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

RL

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转KEYO

JNB

P3.1,KEY1;读P3.1口,若为0转KEY1

JNB

P3.2,KEY2;读P3.2口,若为0转KEY2

JNB

P3.3,KEY3;读P3.3口,若为0转KEY3

RET;

子程序返回 ;

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

;闪烁功能0键处理程序

KEYO:

LCALL

DL10MS;

延时10ms消抖

JB

P3.0,OUTO;P3.0为1,子程序返回(干扰)

SETB

OOH;

20H.0位置1(执行闪烁功能1标志)

CLR

01H;

20H.1位清0

CLR

02H;

20H.2位清0 OUTO:

RET;

子程序返回 ;

;闪烁功能1键处理程序

KEY1:

LCALL

PL10MS

JB

P3.1,OUT1

SETB

01H;

20H.1位置1(执行闪烁功能2标志)

CLR

00H

CLR

02H

CLR

03H OUT2:

RET ;

;闪烁功能(备用)键处理程序

KEY3:

LCALL

DL10MS

JB

P3.2,OUT2

SETB

02H;

20H.2位置1(执行闪烁功能3标志)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

CLR

01H

CLR

00H

CLR

03H OUT2:

RET ;

;闪烁功能(备用)键处理程序

KEY3:

LCALL

DL10MS

JB

P3.3,OUT3

SETB

03H;

20H.3位置1(执行闪烁功能3标志)

CLR

01H

CLR

02H

CLR

00H OUT3:

RET ;

;* * * * * * * * * * * *;;

延时程序

;* * * * * * * * * * * *;

;延时子程序,执行一次时间为513us DL512: MOV

R2,#OFFH LOOP1: DJNZ

R2,LOOP1

RET ;

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

;10ms延时子程序(调用20次0.5ms延时子程序)

DL10MS:MOV

R3,#14H LOOP2: LCALL DL512

DJNZ

R3,LOOP2

RET ;

;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为25msX15)

DL05s: MOV

R4,#OFH LOOP3: LCALL DL25MS

DJNZ R4,LOOP3

RET ;

;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为25msX15)

DL05S: MOV

R4,#OFH LOOP3: LCALL DL25MS

DJNZ R4,LOOP3

RET ;

;25ms延时子程序,调用扫键子程序延时,可快速读出功能按键值

DL25MS:MOV

R5,#OFFH LOOP4: LCALL KEYWORK

DJNZ R5,LOOP4

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

RET

END;

程序结束

12个经典单片机程序设计实例: 闪烁LED小灯主程序图 数码管时钟电路的主程序 单键学习型遥控器的设计 15路电器遥控器的设计 自行车里程/速度计的设计 自动往返行驶小汽车的设计 遥控小汽车的设计 数码管时钟电路的设计 8*8点阵LED字符显示器的设计 8路输入模拟信号数值显示电路的设计 8路输入模拟信号数值显示电路程序

单键学习型遥控器的程序如果对本文有疑问,请到论坛提问 编辑:51单片机学习网 @ 2009-10-20校对 中国开发板最佳品牌

版权:部分由编辑摘引,权利属原著作人

精心收集

精心编辑

精致阅读

如需请下载!

第二篇:电压表主程序模块

/**电压表主程序模块*/

#include

#define uchar unsigned char #define uint unsigned int void result(uchar);uchar value=0;#include“adc0809.h” #include“lcd1602.h” uchar str[5];uchar volt[7];

uchar a=0+0x30;uchar str1[11]=“tanxiaopin”;sbit CLK=P0^7;uint n;

void main(){

//uint i;ADC0809_init();lcd_init();while(1){

lcd_zifu(str1,0x01);

value=AD();//原值

str[0]=value/100+0x30;

str[1]=value%100/10+0x30;

str[2]=value%10+0x30;

result(value);

lcd_data(str,0x40);

lcd_data(volt,0x46);

} while(1);}

void result(uchar v)//转换成电压值 { float a;a=(v/255.0)*500.0;volt[0]=((int)a)/100+0x30;volt[1]='.';volt[2]=((int)a)%100/10+0x30;volt[3]=((int)a)%10+0x30;volt[4]=' ';volt[5]='V';} void t1(void)interrupt 3

{

CLK=~CLK;

}

/*ADC0809程序模块*/

#include #define uchar unsigned char #define uint unsigned int

sbit ST=P0^4;sbit EOC=P0^5;sbit OE=P0^6;//sbit CLK=P0^7;sbit ADDA=P0^0;sbit ADDB=P0^1;sbit ADDC=P0^2;

sbit ALE=P0^3;

uchar v;//保存IN0和经AD转换后的数据 /*非精确演示函数*/ void delay(ms){ uint i,j;

for(i=ms;i>0;i--)

for(j=125;j>0;j--);}

void ADC0809_init(){ TMOD=0x20;TH1=(255-250);TL1=(255-250);EA=1;//开总中断

ET1=1;//开定时器1中断

TR1=1;//启动定时器1

ST=0;

OE=0;ALE=0;} /*用中断做一个500K HZ的时钟信号*/

/******AD转换函数*******/ uchar AD(){ uchar temp=0;ST=0;//EOC=1;// ALE=1;ADDA=0;ADDB=0;ADDC=0;

delay(1);// ALE=0;

//OE=0;

ST=0;

ALE=1;

ST=1;

ALE=0;

ST=0;

delay(2);

while(EOC==0);

OE=1;

temp=P2;

delay(2);

OE=0;

return temp;}

/*ADC0809 模块封装头文件*/ void ADC0809_init();uchar AD();

/*LCD1602液晶显示模块*/ #include #include #define uchar unsigned char #define uint unsigned int sbit rs=P1^5;sbit rw=P1^6;sbit en=P1^7;void lcd_1602(uchar comm);void lcd_write(uchar dat);bit lcd_busy();extern void delay(uint);

void lcd_1602(uchar comm);void lcd_write(uchar dat);

bit lcd_busy();sbit busy=P3^7;extern void delay(uint);

/***************************** 1602液晶写命令函数 参数: 返回值:无

******************************/ void lcd_1602(uchar comm){ while(lcd_busy());//查忙

rs = 0;rw = 0;en = 0;

_nop_();P3 = comm;_nop_();en = 1;_nop_();_nop_();en = 0;} /***************************** 1602液晶写数据函数 参数: 返回值:无

******************************/ void lcd_write(uchar dat){ while(lcd_busy());//查忙

rs = 1;

rw = 0;

en = 0;

_nop_();

P3 = dat;

_nop_();

_nop_();

en = 1;

_nop_();

_nop_();

en = 0;}

/***************************** 1602液晶初始化函数 参数:无 返回值:无

******************************/ void lcd_init(){

delay(15);lcd_1602(0x38);delay(3);lcd_1602(0x38);

delay(3);lcd_1602(0x38);delay(3);lcd_1602(0x08);lcd_1602(0x01);delay(3);lcd_1602(0x06);lcd_1602(0x0c);} /***************************** 1602液晶读忙标志 参数:无 返回值:无

******************************/ bit lcd_busy(){

bit result;rs = 0;rw = 1;en = 1;delay(2);result = busy;en = 0;return result;}

/***************************** 1602液晶写字符 参数: 返回值:无

******************************/ void lcd_zifu(uchar *p,uchar wei){ uchar temp;lcd_1602(0x80+wei);/*temp= *p;while(temp!=''){

lcd_write(temp);

p++;

temp=*p;}*/ for(temp=*p;temp!='';p++,temp=*p)

lcd_write(temp);

delay(10);}

void lcd_data(uchar *p,uchar wei){ uchar temp;lcd_1602(0x80+wei);for(temp=*p;temp!='';p++,temp=*p)

lcd_write(temp);delay(10);} /*LCD1602液晶模块封装*/ void lcd_init();void lcd_zifu(uchar *p,uchar wei);void lcd_data(uchar *p,uchar wei);

第三篇:火车订票管理系统主程序流程

程序简介

此程序是采用多文件模块化形式编写;其中自定义头文件中包括了程序中所有调用的函数的声明,以及需要的所有系统头文件。

#include #include #include #include #include #include extern void searchtrain(link l);extern void Modify(link l);extern void showtrain(link l);extern void SaveTrainInfo(link l);extern void printdata(Node *q);extern void printhead();等

编写时的分块包括订票块、查询块、输出块,及已订票修改部分等。

订票块则包含了定票流程的所有代码。查询块中是通过车次号码或是到达城市来查询的。输出部分包括了主界面的输出,已定车票信息的输出,所查车次信息输出的头部分。订票修改即是改定过程的编程。

即此程序包括了查询、订票、改定的流程。

编程过程

在编写该程序时,遇到了信息的保存问题。订票时与改定时的录入信息的保存不知如何处理;之后将保存的部分分为链表暂存和文件的保存,在录入信息时是暂存在链表中的,当离开此系统是会提示是否保存信息,若是则保存到文件中。此举方便了票的改定,将数据分割开了,也精简了程序,更便于阅读。

编程模块划分后,编写程序之后的编译时,总是连分文件编译时都无法通过。但是写入的代码经过检查又没有问题,一直困扰着我。直到想起老师教的课本以外的知识,并以一种玩玩试一试的心态用条件编译得以解决此问题。

同时在编程时多次用到“清屏”,保证了输出界面的简洁。

在分出模块后,未完成所有部分的编程时的试运行时出现刚一进入子程序时便会回到主界面,后发现时由于只有输出部分没有输入部分,每当运行完子程序后回到主程序时都会被“清屏”,结果造成编译时正常,到运行时却漏洞百出。

在编程时,由于对文件的处理不熟悉,以及计算机的设置问题没考虑,使用了‘w+’的调用方式,使得在保存数据到文件时出现无法写入文件的现象。在百度,问同学以及问老师后才用‘wb+’和别的方式调用,并写入成功。

这个程序时我学习计算机c以来编写的最大型涵盖面最广的一个程序,没有之一。但同时我也知道这在c语言编程中也只是很小的一个小程序而已,我在这编程中发现:我要学的还有很多,大型程序也不是一个人能写出来的,会一些编程技巧是很有必要的,与人合作是

– 1 – 必须的,当然了,我不是在写诗,而是真的这么觉得。一个人会的有限,专精方向也不同,若能好好的合作肯定可以超过一个人单干。

部分源代码

订票程序

#ifndef TRAINHEAD_H #define TRAINHEAD_H #include“trainhead.h” #endif/*条件编译,作用是防止头文件被重复引用*/ int saveflag = 0;void Bookticket(link l,booklink k){ Node *p[10],*q;char c[2],tnum[10],str[10],str1[10];Book *r,*s;int i = 0,t = 0,flag = 0,dnum;r = k;while(r->next!=NULL)

r = r->next;printf(“Input the city you want to go:”);scanf(“%s”,&str);q = l->next;while(q!=NULL)

{

if(strcmp(q->data.reachcity,str)==0)

{

p[i] = q;

i++;

}

q = q->next;

}

printf(“nthe number of record have %dn”,i);

printhead();

for(t=0;t

printdata(p[t]);

if(i==0)

printf(“nSorry!Can't find the train for you!n”);

else

{

printf(“ndo you want to book it?n”);– 2 –

scanf(“%s”,c);

if(strcmp(c,“Y”)==0||strcmp(c,“y”)==0)/*判断是否订票*/

{

s =(Book*)malloc(sizeof(Book));

printf(“nInput your name: ”);

scanf(“%s”,&s->data.name);

printf(“nInput your ID: ”);

scanf(“%s”,&str1);

相应减少*/

strcpy(s->data.num,str1);printf(“nplease input the number of the train:”);scanf(“%s”,tnum);for(t=0;tdata.num,tnum)==0){ if(p[t]->data.ticketnum < 1)/*判断剩余的供订票的票数是否为0*/ {

printf(“nsorry,no ticket!”);

Sleep(2);

return;} printf(“nremain %d ticketsn”,p[t]->data.ticketnum);flag = 1;break;} if(flag==0){ printf(“ninput error”);Sleep(2);return;} printf(“nInput your bookNum: ”);scanf(“%d”,&dnum);p[t]->data.ticketnum=p[t]->data.ticketnum-dnum;/*定票成功则可供订的票数s->data.bookNum = dnum;s->next = NULL;r->next = s;r = s;printf(“nLucky!you have booked a ticket!”);getch();

– 3 –

} } } saveflag = 1;使用说明

运行程序时,首先进入到菜单部分,菜单部分提供了菜单显示和输入功能部分。其运行效果如图19.1所示。在主界面上输入数字0——6,实现相应的功能。

图19.1 火车订票系统主界面

主界面输入“1”,进入添加火车信息界面,如图19.2所示。根据屏幕上给出的提示输入火车的车次,起点,终点,出发时间,到达时间,票价和可以订购的票数。

– 4 –

图19.2 输入效果图

主界面输入“2”,可以查询火车信息,可以选择查询的方法有两种,一种是按照车次查询,一种是按照你想要到达的地方查询,运行效果如图19.3所示。

– 5 –

图19.3 查询效果图

当在主界面输入“3”时,进入订票界面,按照提示输入你想要到达的城市,会自动显示出你终点站为你输入城市的信息,根据提示输入你是否决定订票以及你的个人信息,运行效果如图19.4所示。

图19.4 订票效果图

当在主界面输入“4”时,进入修改界面,根据提示输入你要修改的内容,修改模块的运行效果如图19.5所示。

– 6 –

图19.5 修改效果图

当在主界面输入“5”时,可以显示出所有的火车信息,显示模块效果如图19.6所示。

– 7 –

图19.6 显示效果图

当在主界面输入“6”时,进入到保存模块,将录入的火车信息进行保存,并且将订票人的信息也进行保存,存储在指定的磁盘文件中。运行效果如图19.7所示。

图19.7 保存效果图

– 8 –

第四篇:AVR单片机相关软件安装及编译烧写流程

AVR单片机相关软件安装

本次项目开发使用AVR的AT90CAN128单片机,使用JTAG

ICE仿真器,需要安装的软件及驱动有AVRStudio、iccavr、USB转串口驱动以及仿真器驱动。

一、AVRStudio软件安装

1.双击开始准备安装

2.单击“Next”,选择同意License

3.选择安装路径

4.选择USB

驱动

5.确定开始安装

6.安装中

7.安装完成二、iccavr软件安装

1.双击,接着双击,开始装备安装

2.单击下一步

3.选择安装路径

4.点击安装

5.安装完成三、USB转串口驱动

1.双击,点击INSTALL,等待安装完成即可

四、仿真器驱动安装(XP版)

1.双击点击SETUP.EXE安装

2.安装完成,重新启动计算机

AVR单片机编译烧写流程

本文以在AT90CAN128芯片上编写的工程can128_sw_defn为例,简单介绍AVR单片机的编译和烧写流程:

一、AVR单片机编译流程

1.打开ICCAVR软件,下拉菜单栏上Project,点击open,弹出对话框如下:

选择can128_sw_defn.prj打开,点击右侧栏中的can128_sw_defn.C文件,修改代码。

2.点击Project->options,或者点按钮,弹出对话框如下:

在Target下面的Device

Configuration中选择芯片为AT90CAN128,如图所示,点击OK。

3.点击Build

Project,调试栏出现下图即为编译成功,若有错误请根据错误指示进行相应代码修改即可。

二、AVR单片机烧写流程

1.将JTAG

ICE与目标板以及PC机相连。

2.打开AVRStudio,将会提示一个welcome对话框,如下图所示:

点“Cancel”即可,然后点击avr

studio主窗口中的图标前面标有Con的那个图标,然后按下图选择点“Connect”即可进行JTAG的联机(由于avr

studio会记忆用户使用的设备是并且同时会记忆用户使用的COM号,如果下次和上次使用的是相同的设备并且没有更换COM口,那么下次使用的时候直接点击右边标有AVR的那个图标就可以快速进入联机状态;如果下次和上次使用了不同的设备或不同的COM口请使用Con图标进行联机)。

3.如果出现连接失败对话框,将JTAG

虚拟出的串口改到COM1

到COM4

之间

3.1在设备管理器中找到JTAG,如图,双击JTAG

这项:

3.2

弹出属性修改框

3.3选择端口设置

3.4

单击高级

3.5查看修改后的JTAG

4.然后点击按钮,弹出以下对话框:

在Device栏中选择AT90CAN128,并将Erase

Device

Before

勾上。在Flash->Input

HEX

Fi中选择所要烧写文件的地址,比如本工程的地址为D:\iccv7avr\examples.avr\can128_sw_defn\can128_sw_defn.hex,最后点击Flash栏中的Program等待程序烧写完成。完成后上面对话框在最后一栏会出现

表示烧写成功。

第五篇:单片机课程设计

单片机课程设计

课题: 简易电子琴设计

院:

电气与信息工程学院 专

业:

电子信息工程 姓

名:

李琳琳 学

号:

093411106

指导老师:

田巍

河南城建学院

2014年

01 月

01 日

下载单片机主程序流程word格式文档
下载单片机主程序流程.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    单片机课程设计

    课 程 设 计 设计题目: 基于单片机的8*8点阵显示数字设计 学生姓名: 指导教师: 二级学院: 专业: 班级: 学号: 目 录 摘要„„„„„„„„„„„„„„„„„„„„„„„„„„......

    单片机课程设计

    基于单片机的火灾智能报警控制系统的设计前言在各种灾害中,火灾是最经常、最普通地威胁公众安全和社会发展的灾害之一。人类能够对火进行利用和控制,是文明进步的一个重要标志......

    单片机课程设计

    《单片机技术》课程设计说明书 音乐盒 院、部:电气与信息工程学院 学生姓名:刘亮 指导教师:凌云职称讲师 专业:电子信息工程 班级:电子1302班 学号:1330340220 完成时间: 2016年1......

    单片机实验报告[范文模版]

    实 实 验 验 报 报 告实验课程: 单片机原理及应用班级: 12 自动化 2 班 学号:姓名:教师:张玲 成绩:实 验 日 期 :年 月 日 实验名称: 实验 1-—计数显示器一、实验目得: 学习Prot......

    单片机学习心得

    单片机学习心得 一直想写一个帖子,将自己学习单片机的经历、经验和方法总结一下,今天终于动手写了,呵呵,这是我学习单片机的经验、心得、方法。希望对大家学习单片机有所帮助。......

    单片机学习心得

    篇一:单片机学习心得一直想写一个帖子,将自己学习单片机的经历、经验和方法总结一下,今天终于动手写了,呵呵,这是我学习单片机的经验、心得、方法。希望对大家学习单片机有所帮助......

    单片机英文翻译

    微机发展简史第一台存储程序的计算开始出现于1950前后,它就是1949年夏天在剑桥大学,我们创造的延迟存储自动电子计算机(EDSAC)。 最初实验用的计算机是由象我一样有着广博知识的......

    单片机说课稿

    《单片机》说课稿 一、说教材 1.选用教材及特点 本课程教材选用由人民邮电出版社出版的《单片机典型模块设计实例导航》。该教材以单片机功能为模块,以外围器件、相关电路设计......