单片机程序设计范文

时间:2023-03-25 15:34:52

导语:如何才能写好一篇单片机程序设计,这就需要搜集整理更多的资料和文献,欢迎阅读由公务员之家整理的十篇范文,供你借鉴。

单片机程序设计

篇1

1 鼠标信号发送协议与过程

鼠标是一个功能高度集中的小型机电一体化系统。它首先将直线移转换成角度位移,再转变成数字量,然后与按钮状态统一编码,通过RS-232串口发出。鼠标工作所需功率从RS-232串行接口的控制线上窃取(PS/2、USB接口鼠标除外)。当鼠标被拖动超过一个最小距离或某一按钮被按下时,它按照规定的协议将移动距离和按钮状态通过一次或几次信息发送到机;主机上的鼠标驱动程序将信息变换成鼠标位置和按钮状态供其它程序模块调用。每发生一次移动或按钮状态变化,鼠标向上发送一次信息。通常一般鼠标的分辨率为400DPI。理论上即沿着某一方向每拖动一英寸(一般速度),会产生400次信息发送过程。,如果拖动较快,则信息发送次数送减少,但所反映的总的移动距离仍然是400步。

各种串行接口鼠标在物理层普遍采用标准的串行通信协议,波特率为1200bps。帧格式为7个数据位、2个停止位,无奇偶校验位。上层协议则在此基础上以十六进制数形式直接发更新鼠标信息,包括:初始化报告:移动方向、距离、按钮状态。其一般形式如表1所示。

表1 鼠标信息发送格式

序 号名 称字串形式长 度意 义说 明1初始化报告4DH('M')1字节声明初始化结束加电时发送一次2移动、按钮P1、P2、P33字节反映按钮状态、移动方向和距离移动或按钮操作时发送

上述P1、P2、P3三个参数说明:

P1_D7D6固定值01;D1D0=11本次鼠标移动包含左右移动分量;D3D2=11本次鼠标移动包含上下移动分量;D4=1目前鼠标右键呈按下状态;D5=1目前鼠标左键呈按下状态(D4D5=00则键呈释放状态)。

P2_D7D6固定值00;其余六位表示一个有符号二进制数,反映左右移动量,大于0为向右移动,小于0为向左移动。

P3_D7D6固定值00;其余六位表示一个有符号二进制数,反映上下移动量,大于0为向下移动,小于0为向上移动。

例如:[6CH 02H 3AH](P1=6CH,P2=02H,P3=3AH)反馈出鼠标向右移动了2个单位,向上移动了6个单位,目前左键按下。

2 鼠标接口程序设计

80C196系列单片机内设RS-232收发器,但需要配置接口芯片实现电平转换。考虑到鼠标从串口窃取功率,接口芯片必须具有一定的驱动能力,而不能要用简单的准RS-232电平转换器。这里采用MAX232E作为接口芯片。

图1中左侧为80C196单片机,P2.0(TXD)、P2.1(RXD)通过MAX232E形成满足鼠标要求的串行接口,包括生成标准RS-232C电平和提供电源供应。图1中最右边为9针或24针标准串行接插件。由于鼠标的电源供应采用功率窃取方案,由DTR/RTS提供,这里为DTR加限流电阻防止对鼠标造成伤害。RTS由MAX232E垢信号发送端提供,通过80C196的P2.0控制MAX232E的10脚(对应的输出脚为7脚)电平高低以改变7脚电位,使鼠标可以接收来自RTS的控制命令,以实现鼠标安装与否的检测。MAX232E的11脚(对应的输入脚为14脚)设备高电平以保证14脚电位为负RS-232电位,满足鼠标发送信号时的电平要求。

从链路层看,80C196串行接口的四种工作方式均不满足鼠标的帧格式要求;但其工作方式1(1位起始位、8位数据位、1位停止位)的总传送位数与鼠标(1位起始位、7个数据位、2个停止位)相同,均为10位。接收过程中80C196收到7个数据位后,将2个停止位中的第一个作为数据位装入接收缓冲器的最高位,由于停止位在物理层是高电平,作为数据被接收后相当于逻辑“0”;剩下的第二个停止位给好为80C196提供了有效的停止位。利用80C196的工作方式1完全可以保证正确接收鼠标信息。

单片机起动后,通过鼠标驱动模块对鼠标进行初始化,即通过P2.0使RTS电平翻转一次而令鼠标发送初始化报告,以确认鼠标是否安装。之后,鼠标即可随着拖动或按钮操作向单片机发送动作信息,经接口模块释放即可反应鼠标位置和按钮状态。

鼠标接口模块主要包括按钮状态识别和位置识别两个部分。80C196将根据接收到的鼠标信息不断刷新鼠标信息缓冲区。由于鼠标事件间隔不确定,采用扫描方式但会浪费CPU时间,还可能因来不及处理而丢失信息。有效的处理方法是采用中断方式接收,应用模块通过软件接口获得鼠标信息。完整的鼠标接口程序流程图如图2所示。在初始化阶段,首先检查鼠标是否存在,根据结果设置标志位,以备以后取鼠标信息时判断用;根据需要设定鼠标初始化位置、按钮原始状态;最后设置串行接口参数(帧格式等)并开放鼠标中断。鼠标发送信息时,第三个字节为一个完整的信息报告。但80C196每接收到一个字节,就产生一次中断,然后根据当前字节是否大于40H确定其性质。若是信息报告的首字节,则还要进一步通过有效性检验后保存;若不是首字节,则必须经过一系列检验后保存起来。收到三个字节后立即进行命令分析和执行。具体处理过程可参看源程序。用户模块通过特定接口模块(图2(b))获得鼠标当前位置和按钮状,并可通过进位标志C=0/1判断鼠标是否安装。

下面是图2、3程序流程图如图对应的程序清单。该程序要求80C196单片机的工作频率为12MHz;如果采有其它工作频率,通过修改串行口的波特率设置参数以及延时程序的时间常数即可。

;

;8098特殊功能寄存器预定义

R0 EQU 00H:Word

SBUD EQU 07H:Byte

INT_MASK EQU 08H:Byte

INT_PEND EQU 09H:Byte

BAUD_RT EQU 0EH:Byte

IOP2 EQU 10H:Byte

SP_CON EQU 11H:Byte

SP_STAT EQU 11H:Byte

IOC1 EQU 16H:Byte

SP EQU 18H:Word

篇2

关键词 单片机;C语言;TG12864;液晶显示

中图分类号:TP271 文献标识码:A 文章编号:1671—7597(2013)031-017-02

1 TG12864液晶原理

1.1 TG12864显示原理

点阵式LCD其显示原理是控制LCD点阵中点的亮暗,亮和暗的点阵按一定规律可以组成汉字,组成一幅图形和曲线等。

1.2 TG12864内部结构及相关指令

1.2.1 TG12864内部结构

TG12864是一种图形点阵液晶显示器,它主要由行驱动器、列驱动器及128×64全点阵液晶显示器组成,有20个外部引脚。可以由单片机控制显示8×4个16×16点阵汉字。

1.2.2 TG12864相关指令

该类液晶显示模块的指令系统比较简单,总共有七种。

1)显示开关指令。

功能:设置屏幕显示开/关,DB0=1,开显示;DB0=0,关显示。DB7~DB0=0x3f,开显示;DB7~DB0=0x3e,关显示。

2)显示起始行设置。

功能:显示起始行是由Z地址计数器控制的,该命令自动将A0~A5位地址送入Z地址计数器,起始地址可以是0~63范围内任意一行。Z地址计数器具有循环计数功能,用于显示行扫面同步,当扫描完一行后自动加一。DB7~DB0=0xc0,显示从0行开始。

3)页设置。

功能:页地址存储在X地址计数器中,A2~A0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号RST可把页地址计数器内容清零。DB7~DB0=0xb8,显示从0页开始。

4)列地址设置。

功能:列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DDRAM进行读写操作后,Y地址自动加一。DB7~DB0=0x40,显示从0列开始。

5)读状态。

功能:读忙信号标志位BF,复位标志RST以及显示状态(ON/OFF)bf=1,内部忙;bf=0,内部空闲;res=1,正处于复位初始化状态,res=0,正常状态。

6)写数据。

写数据到DDRAM,DDRAM是存储图形数据的,写数据到DDRAM前,要先执行设置页地址及设置列地址命令。

7)读数据。

从DDRAM读数据,读数据前,要先执行设置页地址及设置列地址命令。

2 应用程序设计

#include

#define uchar unsigned char

#define uint unsigned int

#define disp_on 0x3f //定义开显示

#define disp_off 0x3e //定义关显示

#define dis_x 0xb8 //定义显示0页

#define dis_y 0x40 //定义显示0列

#define dis_z 0xc0 //定义显示0行

#define db P0

sbit rs=P2^0;

sbit rw=P2^1;

sbit e=P2^2;

sbit cs1=P2^3;

sbit cs2=P2^4;

sbit rst=P2^5;

sbit bf=P2^6;

sbit res=P2^7;

uchar code tab[]={/*青海工业职业学校*/0x01,0x00,0x01,0x00,0x3F,0xF8,0x01...};

void check_busy(void);

void chushihua(void);

void delay(uint);

void wr_lcd(uchar,uchar);

void clear_lcd(void);

void display(void);

void _disp(uchar,uchar,uchar,uchar,uchar,uchar *);

void main() //主程序

{chushihua();display();while(1);}

void chushihua(void) //液晶初始化函数

{rst=0;delay(50);rst=1;

cs1=1;cs2=1;

wr_lcd(0,disp_off);

wr_lcd(0,disp_on);}

void wr_lcd(uchar i,uchar j) //写液晶函数

{check_busy();

rs=i;rw=0;

db=j;e=1;

delay(1);

e=0;}

void check_busy(void) //检测忙闲函数

{db=0xff;

rs=0;rw=1;

delay(1);

e=1;

while(res||bf==1);

e=0;}

void clear_lcd(void) //清屏函数

{uchar i,j;cs1=1;cs2=1;

wr_lcd(0,disp_on);

for(j=0;j

{wr_lcd(0,dis_x+j);

wr_lcd(0,dis_y);

wr_lcd(0,dis_z);

for(i=0;i

{wr_lcd(1,0x00);

wr_lcd(1,0x00);}

}

}

void _disp(uchar ye,uchar lie,uchar hang,uchar ls,uchar zs,uchar *ptr1) //液晶显示函数

{ uchar i,j,m,n,a;

wr_lcd(0,disp_on);

for(m=0;m

{for(n=0;n

{for(j=0;j

{ wr_lcd(0,dis_x+j+ye+m*2); //显示起始页设置

wr_lcd(0,dis_z); //显示起始行设置

wr_lcd(0,dis_y+lie+n*ls); //显示起始列设置

a=j*ls+n*2*ls+m*zs*2*ls; //控制字的显示数组位

for(i=0;i

{wr_lcd(1,*(ptr1+a+i));}

}

}

}

}

void display(void) //显示主程序

{

uchar *ptr;

clear_lcd();

cs1=1;cs2=0; //开左屏显示青海工业

ptr=&tab[0]; //取数组首地址

_disp(0,0,1,16,4,ptr); //显示从0页、0列开始,显示一行,每个字16列显示2个字

cs1=0;cs2=1; //开右屏显示职业学校

ptr=&tab[128]; //取数组的第128个元素地址

_disp(0,0,1,16,4,ptr); //显示从0页、0列开始,显示一行,每个字16列显示2个字

}

void delay(uint x) //延时函数

{uchar i;

for(;x>0;x--)

for(i=0;i

以上程序,如果要从3页,4列开始,在左屏显示2行,每个字16列,共显示4个字青海工业,只要将显示主程序改为:

void display(void)

{uchar *ptr;

clear_lcd();

cs1=1;cs2=0;

ptr=&tab[0];

_disp(3,4,2,16,2,ptr);}

上述液晶显示程序,应用起来灵活、方便,要将汉字显示在液晶的什么位置,只需修改显示主程序中_disp(0,0,1,16,4,ptr)函数中的数据即可。

3 结束语

用C语言程序来对液晶显示模块进行编程控制,编程效率高,思路清晰,处理问题灵活方便,相对汇编语言有明显的优势。

篇3

【关键词】SDRAM;自动化测试;设计

同步动态随机存取内存(synchronous dynamic random access memory,简称SDRAM)为同步动态存储器,可用来临时存放数据。SDRAM有一个同步接口,在响应控制输入前会等待一个时钟信号,时钟被用来驱动一个有限状态机,对进入的指令进行流水线操作,而不需要等待数据写入存储队列的时间。 其缺点为掉电数据会丢失。

我公司常将SDRAM存储芯片与ARM芯片配合使用,而用户烧写的程序运行在SDRAM上,如果该芯片出现问题,用户程序将不能正常运行,而导致未知的问题,甚至可以导致装置无法正常工作。因而对SDRAM存储芯片内存单元读写的测试可有效由于SDRAM内存单元、地址线和数据线的问题导致的设备发生异常,并且实现测试自动化,节省了测试时间,也保证了测试的精度。

1.测试策略及组网

本次测试开始时,曾设计3种测试方案:

方案1:使用产品代码的基础上进行修改

优点是工作量小,修改较小。

缺点是由于用户程序直接在SDRAM上运行,生成的变量直接保存到SDRAM中,并且程序运行的过程中串口缓冲区和显示缓冲区直接保存到SDRAM中,导致某些区域无法进行测试,所以放弃该方案。

方案2:通过移植UBOOT进行测试

优点是工作量小,修改较小,测试原理成熟。

缺点是uboot的代码和堆、栈空间0x10000000处开始,这些空间是不能被刷的,否则就挂死,所以放弃该方案。

方案3:通过修改BOOTLOADER进行测试

优点是工作量小,修改较小,可以对整个SDRAM进行完全测试。

缺点是呈现给操作者的结果不够直观,需要测试者具有一定的编程基础。

最终选择第3种测试方案。

2.测试环境与测试仪器

搭建测试环境:①笔记本电脑一台,型号:X230I;②硬件仿真工具一套,型号:JLINK③硬件仿真软件,型号:AXD

3.测试内容

3.1 数据线的连接测试

数据线的连接可能存在两种错误,一种是被断开,另一种布线或生产造成互相短路。Denx设计的数据线检测算法检测数据线的连接错误:以64位地址线为例,pattern=0b101010101010101010.... 能检测出奇偶位之间的数据错误。如果这个错误被排除,每两根数据线组成一组(这是理解下一个pattern的关键),再用相同的办法,检测每相邻两组之间是否有短路,就得到第二个pattern,就是 0b110011001100...... 依次类推,相继写入并读出这6个pattern分别是 0xaaaaaaaaaaaaaaaa,0xcccccccccccccccc,0xf0f0f0f0f0f0f0f0,0xff00ff00ff00ff00,0xffff0000ffff0000,0xffffffff00000000就能验证是否存在数据线交叉短路错误。

3.2 地址线错误测试

如果地址线存在错误,其症状是地址空间中的两个不同位置被映射到同一物理存储位置。更通俗地讲,就是写一个位置却“改变”了另一个位置。

地址线的错误检测相对简单,其算法是:

(1)将地址的值作为内容写入该地址处,汇编的表示方法是(addr)=addr。即将地址值写到地址对应的空间里,这样确保每一个位置的内容不同。

(2)依次将内存基地址的某一根地址线的值翻转(flip/toggle)得到某个地址,从该地址取值,如果该值和基地址的值相等,则表示某一位地址线有问题。

这个算法的特点是每次只检测一根地址线,方法简单有效。

3.3 SDRAM内存单元读写测试

(1)点击菜单栏“Execute”―“Go”命令,程序全速运行。

(2)测试者等待XX分钟,函数指针跳转到Main函数,看到提示则测试成功,如图1所示:

图1

(3)测试者等待XX分钟,未看到上图所示,用户点击菜单栏“Execute”―“Stop”命令,测试程序将停止。

(4)点击菜单栏“Processor Views”―“Registers”命令,查看“Current”―“R2”的Value值,该值即为内存单元读写错误单元。如图2所示:

图2

结果要求:SDRAM内存单元读写正确,测试者看到测试成功图即图1。

3.4 测试说明

本次测试时仅对SDRAM内存单元正确性进行测试。

存储单元的检测则是真正对DDR内存芯片的检测。内存芯片的常见错误是bit-stuck,简而言之,就是让它是0,它偏为1,让它为1,它偏为0,检测方法也很简单,就是用不同的pattern去写尽可能所有的地址并读回比较。因此测试数据选择0x55555555,0xAAAAAAAA。

篇4

关键词:高等院校;微机原理;单片机;教学改革

中图分类号:G642.423 文献标识码:A 文章编号:2095-1302(2012)07-0074-03

0 引 言

微机原理及应用和单片机原理及应用是现今大多数院校自动化、电气自动化等信息工程类专业的重要课程。微机原理偏向于原理性的介绍,涉及的实验比较简单;而单片机则更偏向于应用性,涉及的实验较多。这两门课程的实验过程及使用的芯片及编程的的方式非常类似。大多数院校选择先开设微机原理的课程,在随后的一个学期开设单片机的课程。这样的选择在逻辑上没有错误,可毕竟这两门课程有很大的相似之处,但又有各自的特点。微机原理和单片机的内容既相关又有明显的区别,前后开课会使得学生可能产生忘了前面、记不住后面的感觉,同时两门课的相似点又使得学生区分不清,对内容产生混淆。而实验的环节,用的实验箱不同,虽然芯片不同,学生也仅仅为做而做。在实际教学中,会经常碰到学生提出“微机原理的汇编语言编程要分段(segment),而单片机的汇编语言编程为何不分段”、“微机原理课里的标志寄存器有16位,为什么单片机里才有8位”等问题。此外,这两门课一般都由同一位教师讲授,教师备课时不由得对比着备课,在教学中自然把两门课相关知识点进行描述或比较,使得单一门课程的教学时间无形中被占用。对此,以笔者实际的教学经验,现对这两门课程的教学改革进行一些探讨。

1 课程改革思路

微机原理及应用课程主要是帮助学生理解计算机的原理和结构,通过学习,使学生熟悉一款比较经典的CPU和以该CPU为中心的总线、存储器存储过程等数据处理以及用汇编语言编写程序的方法;同时,还涉及了诸如8255、8259A等一些芯片的运用及接口编程知识,微机原理及应用偏向于原理性的阐述。而单片机原理及应用课程主要是针对某类型已经非常成熟的单片机型号,帮助学生学会如何使用单片微型机以及针对实现不同的功能进行编程的知识,该课程更偏向于应用。

这两门课程的内容既有很大交叉,又有各自的特点:微机原理及应用理论更系统,单片机应用性更强。独立开设两门课程,不可避免地会出现知识点的重复和各自重点的缺失。由此,针对这两门课程授课过程中的不足,笔者有了对这两门课程进行改革的想法。即:同步开课,结合实际教授理论内容,合理分配实验学时等。

2 教学方面

2.1 教学内容

在理论教学方面,笔者对微机原理和单片机的教学内容进行了整合。微机原理基于冯·诺依曼结构,这种理论更易于学生了解计算机体系和计算机系统的工作方式;单片机本质上也是计算机系统,只是性能弱,功能单一。因此,在理论讲课过程中,应该以微机原理为主,同时针对微机原理和单片机的明显不同,比如同是45H,在微机原理中是立即数,在单片机中是存储的地址等,在这方面加以重点讲解。微机原理的内容较多,涉及面广,如果对知识点面面俱到,不仅时间不够,而且学生的学习积极性肯定不高。单片机原理课程主要基于80C51单片机进行讲解,并介绍单片机的特点、在片资源、汇编语言编程、片内接口及中断、通信及A/D、D/A转换等。在这当中,肯定会遇到一些和微机原理相冲突的地方,不论讲解与否,势必会影响到后续课程讲授的连贯和流畅,因此,必须要对相关内容进行取舍。

篇5

中图分类号:G424.1 文献标识码:A

Application and Research of Project Approach

Course in Microcontroller Technology

WANG Wenhai

(Changsha Aeronautical Vocational and Technical College, Changsha, Hu'nan 410124)

AbstractBased on the objective and teaching characteristic of single-chip microcomputer vocational electronic speciality course, in the course of microcontroller technology, use of project-driven method of teaching can play the leading role of teachers and the main role students'; Improve teaching efficiency and the teaching quality,and cultivate students' comprehensive ability.

Key wordsmicrocontroller technology; project teaching; teaching do unity; action oriented

单片机技术是高职电子信息类学生必须掌握的一门技术,同时也是高职院校电子类专业为电子产品调试、维修、助理设计等岗位服务的专业课程,学生不仅要掌握单片机的接口应用的基本技能,还应具有实际工程应用能力。因此,具有实用性强、学习难度大的特点。

1 单片机技术课程的教学现状

传统的单片机课程教学中,一般开设几十学时,通常是采用“填鸭式”的教学方法、“理论教学”+“课程设计”的教学模式。“理论教学”以讲授理论为主,内容抽象、枯燥,课程设计不过是作纸上谈兵的游戏,课程的教学效果一般。

2 教学做合一的教学模式和项目驱动法

“教学做合一”是指以培养经济社会发展所需要的人才为宗旨,教学活动以做为载体和目标,在做中教,在做中学,在教学中推动做,在做的基础上,实现教学做的有机统一。在这种教学关系下,教师是教的主体、做的主导,主要任务是指导学生学;学生是学主体、做的主体。主要任务是学习,通过亲自做的环节,学得知识,掌握技能。

“项目教学法”是通过实施一个完整的项目而进行的教学活动,其目的是在课堂教学中把理论与实践教学有机地结合起来,充分调动学生的学习积极性、培养学生解决实际问题的综合能力和创新能力。

为解决单片机技术课程学生难学、教学效率低下和教学质量一般的问题,进行教学改革:打破“理论教学”+“课程设计”的教学模式采用教学做合一的教学模式,抛弃“填鸭式”的教学方法采用项目驱动法是一种有效的举措。

3 单片机技术课程教学项目的设计

根据单片机技术的课程目标、教学内容及教学特点,以恰当、实用、渐进为原则设计课程教学项目。笔者在教改实践中按课程目标把单片机技术原理论授课内容解构,设计了六个项目,如下:

3.1 广告灯的设计制作

项目要求:①用keilC51、Proteus、EASY等软件作开发工具;②用AT89C51单片机作控制;③8位发光二极管作显示;④广告灯轮流闪烁时间为0.2秒;⑤发挥:增加1-2种显示模式。

项目任务:①拟定总体设计制作方案;②设计硬件电路;③编制软件流程图及设计源程序;④仿真调试;⑤安装元件,制作广告灯,调试功能指标;⑥完成项目报告。

内容:①单片机内部的结构;②单片机的存储器;③单片机的IO口;④单片机的引脚及工作状态;⑤单片机指令系统;⑥简单汇编程序设计;⑦工具软件的使用。

3.2 频率计的设计制作

项目要求:①用keilC51、Proteus、EASY等软件作开发工具;②用AT89C51单片机作控制;③数码管作显示;④能测1HZ-65KHZ的信号频率,误差允许?HZ;⑤发挥:扩展频率范围等。

项目任务: 同上。

内容:①单片机的中断系统;②定时/计数器;③数码管显示器接口;④工具软件的使用;⑤汇编程序设计。

3.3 电压表的设计制作

项目要求:①用keilC51、Proteus、EASY等软件作开发工具;②用AT89C51单片机作控制,ADC0809作AD转换器;③三位数码管作显示;④能测试0-5v的直流电压;⑤发挥:增加超量程提示功能、自动量程转换功能等。

项目任务:同上。

内容:①C51程序设计;②A/D转换器与单片机技术;③数码管显示器接口;④C51程序设计。

3.4 信号源的设计制作

项目要求:①用keilC51、Proteus、EASY等软件作开发工具;②用AT89C51单片机作控制,DAC0832作DA转换;③三只按键作操作按键,8位数码管作显示;④能键控输出方波、三角波、正弦波三种波形信号;⑤输出信号幅度稳定、频率可调;⑥发挥:幅度可调、频率可调等。

项目任务:同上。

内容:①D/A转换器与单片机技术;②独立式键盘与单片机技术;③C51程序设计。

3.5 密码锁的设计制作

项目要求: ①用keilC51、Proteus、EASY等软件作开发工具;②用AT89C51单片机作控制;③LCD作显示;④具有设置、清除6位密码的功能;⑤发挥:密码错误提示、控制电机开锁等。

项目任务:同上。

内容:①矩阵式键盘;②液晶1602的应用;③C51程序设计。

3.6 远程报警器的设计与制作

项目要求:①用keilC51、Proteus、EASY等软件作开发工具;②用AT89C51单片机作控制,采用串行通信方式传送数据。③主机LCD作显示,显示报警位置。④从机LED作显示,具有警点状态检测、报警编号显示的功能。⑤通信距离达8-10米;⑥发挥:记录报警时间、位置、声光报警等。

项目任务:同上。

内容:①串行通信,串行通信总线的标准;②51单片机串行口及串行通信及简单通信协议;③单片机与单片机之间通信;④端口控制;⑤C51程序设计。

4 项目教学法在单片机技术的课程教学中的实施

项目教学法在实施过程中,按照有简单到复杂的顺序实施各个项目,每个项目的实施一般以行动导向教学原则为指导教学过程分采用资讯、计划、决策、实施、检测、评价六个阶段按四个步骤实施。第一步资讯,教师提出项目要求与任务。在老师的引导下,学生明确要做什么?要学什么?老师通过案例、演示等对学生进行个别或集体的指导,使学生基本具备完成项目的能力。第二步计划与决策,学生在老师的主导下制订完成项目的实施方案。第三步实施,学生按计划与方案完成项目任务。学生通过实施发现问题、解决问题、习得知识,培养技能。老师进行个别的提示性的指导。第四步检查与评价,老师、学生分别对学生项目完成的数量与质量进行检查,根据评价标准做出评价与评分。学生的自省,老师的点评,使学生的知识与技能得以完善与提高。实施中,教学过程与项目完成过程相统一,学生在做中学、老师在做中教,获得知识与培养能力相统一。

5 结束语

通过多年的改革实践,项目教学法符合教学做合一的教学模式,提高了教学效率和教学质量,值得推广。但应用时要注意:项目的设计要恰当、实用、渐进,教学实施要导向,老师指导要科学,评价标准要合理、评分要公正。

课题来源:本文系长沙航空职业技术学院教改课题成果

参考文献

[1]姜大源.当代职业教育主流教学思想研究.北京:清华大学出版社,2007.4.

篇6

关键词 MATLAB;单片机;波形发生器

中图分类号TP36 文献标识码A 文章编号 1674-6708(2013)96-0208-02

在工业制造与日常研究过程里,往往需要一些可以灵活产生、周期与峰值等参数能方便调节、功能扩展性强的信号,这样的特定需求通常都难以实现。本次设计的系统利用MATLAB与C51语言制作的波形发生器,能很好地解决这些问题,而且费用不高、实用性强,实现了硬件电路软件化的设计。

1系统硬件设计

2.3.2“握手”通信处理程序

2.3.3接收子程序设计

2.3.4传送子程序设计

本系统发送数据是用串行模式1来进行的,由TXD端口一次送出10个位的数据。其中起始位和结束位分别位于一头一尾,夹在中间的是8个数据位(校验检查可选)。 如果串口完成了初始化工作,CPU就能执行1条写入SBUF指令启动发送器来实施数据的传送。在传输过程中,当10个串行位完成输出,SCON的位1(TI)便会置为1,表明能够继续进行下一批数据的送出操作。在程序设计中当监控到TI=1,便将数据写入SBUF寄存器,之后再将TI位清0。具体程序设计如下:

2.3.5波形输出子程序设计

3软件运行结果

本次设计的所用的matlab编程软件只用来生成波形数据,而波形的周期是使用单片机来控制的。在对单片机控制编程中c语言是一种强有力的程序设计语言,然而有些时候c语言程序还是无法完全控制程序的工作,遇到一些必须精确计算指令执行工作时间的控制问题,则一定得用汇编语言来设计了。

参考文献

[1]马崇良.单片微型计算机原理及应用[M]中国纺织出版社, 1996.

[2]张毅坤,陈善久.单片微型计算机原理及应用[M].西安电子科技大学出版社, 1998,9.

篇7

【关键词】MCGS组态软件M51单片机

一、通讯系统软件设计

1.前言。电话远程智能控制系统实现当用户离开用电设备时,依然可以远程通过电话手机遥控家里的用电设备。对被控对象进行实时监控,对家电进行全方位实时管理。同时通过双上位机人性化的监控界面。上位机通过MCGS组态软件编程对下位机进行监控,在本设计中它与下位机的通信端口为COM1。

2.MCGS与单片机的通讯。MCGS是目前较常见的一种工业控制通用组态软件,可以利用它十分方便地构成了分布式系统的监控画面,动态显示控制设备的运行状态、实时、历时曲线和报表、上下限报警等。他是一套基于Windows平台的,为工业过程控制和实时监控服务的32位全中文界面组态软件系统。为了与现场设备进行交互,它提供了国内外各种常用的工控设备的驱动程序,但基本上是与PLC,DSP等设备的数据交互通讯。如果用MCGS与单片机实现实时通讯,则需要利用MCGS驱动开发工具对某一具体的通讯协议进行单独的开发。设计者只需要经过简单的参数设定,输入,就可以编程出为自己项目所用的独立的dll构件。

MCGS用Active DLL构件的方式来实现设备驱动程序,通过规范的OLE接口挂接到MCGS中,使其构成一个整体,所以MCGS把设备驱动程序叫做设备驱动构件。MCGS设备构件的实现方法和原理与标准VB的ActiveDLL完全一致,但MCGS规定了一套接口规范,只有遵守这些接口规范的ActiveDLL才能用作MCGS的设备驱动构件。它必须具有如下5个属性和8个方法:

用户根据自己的协议要求编写成功dll构件之后,在MCGS开发环境中打开串口父设备,添加做好的电话远程控制的dll构件。

二、硬件电路设计

本设计硬件部分主要是由两部分组成。外线DTMF双音频码译码电路和家用电器控制电路。其中主要部分是DTMF译码电路。该电路由MT8880作为DTMF译码芯片,由AT89C52接收MT8880的D0~D3引脚采集的16进制码,将所得到的码反映到相对应的引脚上,从而控制不同的用电设备。

三、程序设计

篇8

关键词 单片机;智能;车位锁;蓝牙

中图分类号 G2 文献标识码 A 文章编号 1674-6708(2017)183-0076-02

现代工作生活中,汽车已走进千家万户,它给我们带来的除了出行的迅速与便捷之外,还带来了停车难、乱停车、车位被占等一系列问题,停车位的优化管理成为了一个普遍且亟待解决的社会问题。若设计一种基于单片机控制的蓝牙车位锁,实现对车位锁的智能化控制,让车主不用下车去手动开关车位锁,直接在车内通过手机蓝牙软件来操纵车位锁的升降,这样就大大提高了车位锁的实用性和便捷性。

1 车位锁系统设计方案

通过功能需求分析,需要设计单片机控制电路,超声波测距模块,步进电机驱动模块,蓝牙通信模块等来完成以下功能:用户通过手机控制车位锁的升降、实时反馈车置信息给手机、提示用户控制车位锁升降等。对于手机与单片机间的通信模块,选择使用蓝牙通信,相较于红外遥控和WiFi,蓝牙有着独特的优势,它不像红外遥控,必须要对准其接受窗才能让单片机接收到信号,也不像WiFi那样需要有WiFi覆盖点和高额的成本。使用蓝牙通信,只需手机与单片机点对点连接上即可进行无死角通信,性价比最高。

2 硬件电路设计

2.1 单片机控制电路

本次设计选取51系列单片机,他是一个集成了CPU、存储器、定时器/计数器和I/O口等部件的微型计算机。功耗低,性能强,有8K在系统可编程Flash存储器,指令代码可兼容传统的8051。通过时钟系统、复位系统以及电源系统组成单片机的最小系统,再加上超声波电路和步进电机驱动电路即可满足该智能车位锁的硬件电路设计。

2.2 超声波感应电路

车辆在位以及汽车和车位锁的相对位置信息是通过超声波感应电路实现,本设计选取常见的HC-SR04超声波模块,其有4个接口端,VCC接直流5V,GND接地,TRIG为触发控制信号接单片机I/O口,ECHO为回响信号也接到单片机的任一I/ O口即可。

其基本工作原理:1)采用I/O的TRIG触发测距,要给上至少10us的高电平信号。2)自动发送有8个40kHz的方波,感应电路自动检测是否有信号返回信号。3)有信号返回时,通过单片机的I/O口ECHO输出一个高电平,该高电平的持续时间即为超声波从发出信号到收回信号的总时间,故其测试距离=(ECHO高电平持续时间*声速)/2,持续时间的记录由定时器TO来完成。

2.3 步进电机驱动电路

步进电机使用ULN2003A驱动芯片,它是一个7路的反向器电路,价格低廉,负载能力强且电流增益高,其输出端允许通过的IC电流为200mA,饱和压降1V。使用的步进电机28BYJ-48是一种四相八拍电机,他能够将电脉冲信号转换成角位移量,其工作电压为12V,用ULN2003A驱动能充分发挥步进电机的功能。

将驱动芯片的4个IN分别接到单片机的4个I/O口,作为输入,步进电机5根导线接到ULN2003A的输出端(红线为+)。单片机通过I/O口每给到一个脉冲信号,通过驱动,步进电C就会按照设定好的方向转动一个固定的角度,在程序中用for循环语句可让其持续转动。通过单片机控制电机的正/反转,即可模拟车位锁机械部分的升/降。

2.4 蓝牙信息传输模块

要实现手机与车位锁单片机的通信,蓝牙模块是不可或缺的部分。本设计选用HC-06作为蓝牙模块,它主要采用CSR的主流蓝牙芯片和蓝牙V2.0的标准协议。有四个重要引脚,分别是电源、地、发送和接收端。给蓝牙上电后,可通过USBTTL模块对其进行AT模式设置(慢闪),根据用户需要,可对其蓝牙名称、配对密码、传输波特率等进行个性化设置。

HC-06需与单片机相连,RXD与TXD交叉相连,蓝牙模块就相当于一根无形的串口线,波特率默认为9600,单片机串口程序初始化中波特率要设为一致。

用户通过手机蓝牙App,输入设置好的密码,将单片机的蓝牙与手机进行配对连接,蓝牙接收到手机端通过App发送的指令后,将信号通过串口传输给单片机主控芯片并让单片机做出相应的处理,手机与单片机间的通信便得到实现。

3 软件程序设计

3.1 单片机程序设计

本次设计的单片机程序是使用Keil的环境用C51编写,首先在main()主函数中初始化各变量、定时器和串口等,然后进入while(1)循环,PC按顺序流经车位信息提示函数、车位锁电机处理函数、查询车位信息函数,三个函数包含了所有模块的程序,在while(1)中往复循环,并伴随着串口中断和定时器中断。通过串口中断接收手机App的指令,以此完成对车位锁的相应控制。

3.2 手机蓝牙App程序设计

使用Eclipse集成开发环境可进行安卓程序开发,一个程序工程包含布局文件和Activity控制文件。布局文件用于构建页面布局,Activity控制文件为整个程序的入口,后台逻辑程序从这里开始执行。对于安卓蓝牙软件的设计,两句代码和用于添加手机通过软件连接到蓝牙的权限。以此为基础在Activity文件中编写代码,设计出蓝牙软件,亦可通过互联网直接下载。

4 系统设计的实现

本设计是按照上述硬件电路、软件程序要求模拟出的智能车位锁系统,基本能实现用户对车位锁的智能控制,其中单片机最小系统使用51单片机开发板上的电路(含电机驱动芯片),再通过杜邦线分别连接上步进电机、蓝牙模块(已设置)和超声波模块,给单片机上电后,使用安卓手机打开“蓝牙串口助手”软件,输入配对密码,连接到车位锁单片机蓝牙,通过此软件,任意发送单片机程序设定好的指令,可实现控制车位锁(步进电机等机械装置)的升/降、查看车体与车位锁相对距离、反馈车体入位/出位情况等功能。

参考文献

[1]盛华,梅斌.单片机原理与应用[M].武汉:华中科技大学出版社,2014.

篇9

摘要:现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。本文简要介绍了Franklin C51交叉编译器的特点,较详细地讨论了C51语言程序设计的基本技巧及其与汇编语言程序的混合编程、中断处理过程等实际问题。

关键词:C51;C语言;编程

在研制单片机应用系统时,汇编语言是一种常用的软件工具。它能直接操作硬件,指令的执行速度快。但其指令系统的固有格式受硬件结构的限制很大,且难于编写与调试,可移植性也差。随着单片机硬件性能的提高,其工作速度越来越快,因此在编写单片机应用系统程序时,更着重于程序本身的编写效率。而Franklin C51交叉编译器是专为80C51系列单片机设计的一种高效的C语言编译器,使用它可以缩短开发周期,降低开发成本,因此目前它已成为开发80C51系列单片机的流行工具。

一、C51的编程规范

(一)注释

1.开始的注释:

文件(模块)注释内容:

公司名称、版权、作者名称、修改时间、模块功能、背景介绍等,复杂的算法需要加上流程说明;

函数开头的注释内容:

函数名称、功能、说明 输入、返回、函数描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明 ;

2.程序中的注释内容:

修改时间和作者、方便理解的注释等。注释内容应简炼、清楚、明了,一目了然的语句不加注释。

(二)命名:

命名必须具有一定的实际意义。

1.常量的命名:全部用大写。

2.变量的命名:

3.结构体命名:

4.函数的命名:

函数名首字大写,若包含有两个单词的每个单词首字母大写。

函数原型说明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模块名及文件名, 内部函数,只要注释其定义文件名 ;

1.缩进:缩进以Tab为单位,一个Tab为四个空格大小。预处理语句、全局数据、函数原型、标题、附加说明、函数说明、标号等均顶格书写。语句块的“{”“}”配对对齐,并与其前一行对齐;

2.空格:数据和函数在其类型,修饰名称之间适当空格并据情况对齐。关键字原则上空一格,如:

if ( ... ) 等,运算符的空格规定如下:“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正负号),“&”(取址或引用)、“*”(指使用指针时)等几个运算符两边不空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括大多数二目运算符和三目运算符“?:”两边均空一格,“(”、“)”运算符在其内侧空一格,在作函数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。

3.空行:程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行

4.修改:版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要在文件及函数的修改记录中加以记录。

二、C51语言程序设计的基本技巧

C语言是一种高级程序设计语言,它提供了十分完备的规范化流程控制结构。因此采用C51语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,这样可使整个应用系统程序结构清晰,易于调试和维护。对于不同的功能模块,分别指定相应的入口参数和出口参数,而经常使用的一些程序最好编成函数,这样既不会引起整个程序管理的混乱,还可增强可读性,移植性也好。

在程序设计过程中,要充分利用C51语言的预处理命令。对于一些常用的常数,如TRUE,FALSE,PI以及各种特殊功能寄存器,或程序中一些重要的依据外界条件可变的常量,可采用宏定义"#define"或集中起来放在一个头文件中进行定义,再采用文件包含命令"#include"将其加入到程序中去。这样当需要修改某个参量时,只须修改相应的包含文件或宏定义,而不必对使用它们的每个程序文件都作修改,从而有利于文件的维护和更新。

三、C51语言与汇编语言程序的混合编程

C51编译器能对C语言源程序进行高效率的编译,生成高效简洁的代码,在绝大多数场合采用C语言编程即可完成预期的目的。但有时为了编程直观或某些特殊地址的处理,还须采用一定的汇编语言编程。它们必须有完整的约定,否则数据的交换就可能出错。下面就以力源公司的10位串行A/D转换器TLC1549 为例说明C语言程序与汇编语言程序的调用。

四、C51中断处理过程

C51编译器支持在C源程序中直接开发中断过程,因此减轻了使用汇编语言的繁琐工作,提高了开发效率。中断服务函数的完整语法如下:

void函数名(void)[模式]

[再入]interrupt n [using r]

其中n(0~31)代表中断号。C51编译器允许32个中断,具体使用哪个中断由80C51系列的芯片决定。r(0~3)代表第r组寄存器。在调用中断函数时,要求中断过程调用的函数所使用的寄存器组必须与其相同。"再入"用于说明中断处理函数有无"再入"能力。C51编译器及其对C语言的扩充允许编程者对中断所有方面的控制和寄存器组的使用。这种支持能使编程者创建高效的中断服务程序,用户只须在C语言下关心中断和必要的寄存器组切换操作。

四、结语

C51编译器不但可以缩短单片机控制系统的开发周期,而且易于调试和维护。此外,C51语言还有许多强大的功能,如提供丰富的库函数供用户直接调用,完整的编译控制指令为程序调试提供必要的符号信息等等。总之,C51语言是广大单片机开发人员的强有力的工具。

参考文献:

[1]周立功.单片机实验与实践教程(三)[M].北京:北京航天航空大学出版社.2006

[2]柴钰.单片机原理及应用[M].北京:西安电子科技大学出版社.2009

篇10

关键词:AT89C51;三线方式;串行接口;I2C

中图分类号:TP36 文献标识码:B

文章编号:1004373X(2008)0310902

Three―line Structure Design for Single Chip Series Periphery Interface Circuit

CAO Junxia1,YUAN Tonglu2

(1.Shaanxi Energy Professional and Technological Institute,Xianyang,712000,China;

2.College of Computer Science,Xi′an Shiyou University,Xi′an,710065,China)

Abstract:The paper introduces characteristics of SPI and I2C general bus protocol and its realization in MCS―51,researches scheme of single chip system,discusses its feasibility.The concrete way of realization is using Protel―99 SE to draw the schematic diagram,build the electric circuit in the experimental board with the assembly language compilation driver.To the process debugging,has realized minimum of that the system successfully.

Keywords:AT89C51;three―line control method;serial interface; I2C

SPI总线接口芯片为完成单片机的常规电路扩展设计带来了机遇,可扩展的电路包括A/D与D/A转换器、显示、时钟、存储器、监视复位、I/O、显示等。本文利用国内目前较为流行的I2C,SPI串行通信协议实现单片机电路的A/D转换、 D/A转换、时钟、I/O扩展、E2PROM以及LED驱动器件的扩展功能,实现了单片机系统功能模块化,电路集成化的目的。

1 SPI集成接口芯片功能及应用

1.1 A/D转换器

单片机应用系统中典型的应用模式是通过传感器采集现场的微弱信号参数,经过滤波放大处理后再通过A/D模数转换送至单片机系统实现各种工业调节和控制,在此过程中A/D转换电路的设计尤其重要。早期的A/D转换器与CPU接口一般采用并行总线方式,新型A/D转换器采用I2C,SPI总线方式可节省CPU的I/O资源,使产品小型化。本文中选用的A/D转换器为SPI串行总线接口的10位模数转换器TLC1549。

1.2 D/A转换器

D/A转换器的种类繁多,从接口形式而言,有串口和并口之分。目前新型的D/A转换器大都采用了串行总线协议。D/A芯片的输出形式有电流型和电压型两种,由于电流输出形式在实际电路中必须将输出转换成电压输出。为了简化电路和提高可靠性,本文选用电压型的SPI串行总线接口TLC5615 D/A转换器。

1.3 驱动显示器接口芯片

目前广泛使用的显示器件主要有LED(二极管显示管)、LCD(液晶显示器)和VFD(真空荧光管)等。LCD和VFD显示器显示成本较高,而LED显示器造价低廉,与单片机接口方便灵活,技术上易于实现,通常用于显示阿拉伯数字和少数字符。本文选用LED作为显示器件。串行总线方式的LED显示器接口芯片与并行方式相比,仅占有CPU的少数几根I/O口线便可实现LED功能,因此本设计中采用了SPI串行接口显示驱动芯片MAX7219。

1.4 看门狗芯片X5045

单片机应用系统(或产品)在运行中会受到各种各样的干扰,导致系统内部数据出错或严重影响程序的运行。因此,单片机应用系统的开发要考虑系统的可靠性设计。“看门狗”是系统可靠性设计中的重要一环。所谓“看门狗”是指在单片机程序设计中采用的一种程序监视技术,当单片机受到干扰失控导致程序跑飞或陷入死循环时,通过采取一定的软硬件措施使程序脱离死循环或重新运行。本文中选用多功能芯片X5045。

1.5 I/O扩展芯片PCF8574

目前,在单片机应用系统的串行扩展接口器件中,除了上述SPI总线以外,还有I2C总线。I2C总线提供了较完善的总线协议和最简单的串行连接方式,并提供了总线操作的状态处理软件包。本文在设计中加入常用的I2C总线的I/O扩展片PCF8574,用他来增加单片机的I/O口,提高单片机的外挂器件的能力。PCF8574具有低的电流损耗并有输出锁存功能,能输出大电流,可直接驱动LED发光管。

2 硬件设计

本次设计所有的接口芯片均采用串行方式,串行方式通信有单线、两线、三线等多种方式,其中以两线、三线最为流行。在本次设计中,主要采用三线方式,即SPI(Serial Peripheral Interface,串行接口)。设计中所用的接口器件包括A/D转换器、D/A转换器、实时时钟、存储器、看门狗、I/O、LED显示器。在本次设计中采用的是51系列的单片机作为主CPU,而他不具有SPI接口系统,故不可直接与各个厂家生产的多种标准的SPI器件直接接口。为了解决这一难题,在本设计中使用软件来模拟SPI系统中的4条线:串行时钟总线SCK、主机输入/从机输出数据线MOSO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线/CS。用P2.1模拟CPU的数据输出端(MOSI),P2.0模拟CPU的数据输入端(MOSO),P2.2 模拟CPU的SCK输出端。接口芯片公用这三条控制线,但在这种方式下,每次只能驱动执行一片芯片。鉴于SPI与I2C总线电路设计、时序和程序设计的不同,又在本次设计中加入了一片I2C总线接口的I/O扩展芯片,用P1.0来模拟SDA,用P1.1来模拟SCL,以便了解两者的截然不同之处。硬件框图如图1所示。

图1 硬件框图

3 软件设计

用PCF8574来扩展I/O端口,低四位为灯,高四位为

小开关,通过中断的方法读入I/O的状态。经过取高四位,打到低四位,以点亮或熄灭相应的指示灯。整个系统在工作中,只要按下任意一个键都将使PCF8574产生中断申请信号,使CPU响应中断,执行中断服务程序。在中断服务程序中,CPU根据按键的状态控制程序转移。按下键1,调用A/D转换子程序;按下键2,调用显示子程序;按下键3,调用D/A转换子程序,用示波器观察其输出波形;按下键4,调用看门狗芯片X5045的工作子程序,进行单字节的写、读。软件总体流程框图见图2。

图2 软件总体流程图

4 结 语

目前,单片机应用系统的扩展已从并行方式为主过渡到以串行方式为主的时代。许多新型器件都带有UART的移位寄存器方式,MOTOROLA公司的SPI、NS公司的Microwire、Dallas公司的1―wire和Philips公司的I2C总线等,他们都提供了较完善的总线协议,连接方式简单,在扩展器件设计中得到广泛的应用。本文通过在设计中使用MCS―51的I/O口来模拟总线接口,实现了单片机与串行总线接口器件的数据传输,该方案已通过调试,整个单片机系统运行良好。试验表明MCS―51的I/O口来模拟总线接口的方法在设计中可行有效。

参考文献

[1]何立民.I2C总线应用系统设计[M].北京:北京航空航天大学出版社,1995.

[2]马忠梅,籍顺心,张凯,等.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,1996.

[3]何立民.单片机应用技术选编[M].北京:北京航空航天大学出版社,2000.

[4]谭浩强.C语言程序设计教程[M].北京:高等教育出版社,2000.

[5]祝贞凤,张跃武.TMS320F206电路典型设计[J].现代电子技术,2007,30(11):44―45,48.