关于单片机最小系统设计的探索分析

时间:2022-10-02 09:08:03

关于单片机最小系统设计的探索分析

摘 要: 单片机最小系统在实际的应用中非常广泛,不管是教学还是工业生产中,很多实例都是最小系统的变形,或者是根据需要增加一部分所需要的内容。本系统采用AT89S52作为主控芯片,系统包括矩阵键盘、数码管显示、串口通信等功能模块常用。采用C语言进行编程。

关键词: 单片机; 最小系统; C语言

中图分类号: TN42 文献标识码: A 文章编号: 1009-8631(2012)09-0091-02

一、系统特点

本系统设计是使用AT89S52进行设计,使用C语言进行编程。

AT89S52是一个低功耗集成块,8位CMOS工艺处理器,具有8K在线可编程FLASH存储器。作为这次设计的核心部分,对它进行扩展。

为了对最小系统进行检查,设计是增加了记数这个功能,为了方便程序下载,在实际使用的过程中,增加了下载接口。系统可实现的功能有:(1)4×4键盘;(2)LED显示;(3)报警;(4)串行通信;(5)记数。

二、功能实现

(一)4×4键盘

键盘是这个系统的关键部分,用它可以实现数字的输入和命令的输入,是单片机实现人机交换的最主要的设备,因此键盘是关键。

矩阵键盘是最常用的键盘,一般情况下可以用逐行扫描法来实现这种键盘功能。一般先通过输出端口在所有的行线上发出全扫描信号,然后检查输入端口的列线信号是否全为“1”,是“1”则表示无键按下,若不全为“1”,这是还不能确定按下的键是属于那一行的。再次,再用逐行扫描来确定键的位置。先扫描第0行,即输出1100,然后读入列信号,判断是否去全为“1”,是“1”则表示无键按下,若不全为“1”,则表示有键按下,闭合的位置处于第0行与不为“1”的列线的相交处。以次类推,最终找到哪个键闭合。找到闭合键后,通过其所对应的行值和列值,用特定的方法就可以得到闭合键的特征值。流程图如图1所示。

程序如下:

#include

#include

#include

#include

void key_scan(void);

void delay10ms(void);

void alarm(void);

void display(void);

void receieve(void);

void send(void);

void counter(void);

unsigned char code table[]={

0xC0,0xF9,0xA4,0xB0,0x99, //0~4

0x92,0x82,0xF8,0x80,0x90, //5~9

0x88,0x83,0xA7,0xA1,0x86,0x8E};//a-f

void main(void)

{void key_scan(void)//键盘扫描

{unsigned char idata temp,hangxuan;

unsigned int idata i,j;

temp=P1;

temp&=0xf0;

if(temp!=0xf0)

{delay10ms();

temp=P1;

temp&=0xf0;

if(temp!=0xf0)

{hangxuan=0x01;

for(i=0;i

{P1=~(1

for(j=0;j

{temp=P1;

temp&=0xf0;

switch(temp) {case

0xe0:keyvalue=i*4+0;break;

case 0xd0:keyvalue=i*4+1;break;

case 0xb0:keyvalue=i*4+2;break;

case 0x70:keyvalue=i*4+3;break;}

break; }

led[4]=led[3]; //使四位

LED可以滚动显示

led[3]=led[2];

led[2]=led[1];

led[1]=led[0];

led[0]=keyvalue;

display(); //调用显示

}}}}}

(二)LED显示

其实在键盘中就已经使用了显示程序,就是把有信息显示在4个LED上面。一般通过查表来实现。

程序如下;

void display(void)//显示

{unsigned int i;

unsigned char weixuan=0x01;

for(i=0;i

{P0=table[led[i]];

P2=~(1

delay10ms();

(三)报警

所谓报警就是在需要的时候使单片机的电路可以发出声音来报警。

这里用的是一个三极管和一个蜂鸣器,并利用一个I/O口驱动它们。在需要的时候向该I/O口写入1使其导通,就可以发出声音。 程序如下:

void alarm(void)//报警

{delay10ms();

P3=0X10; //P3.4

delay10ms();

P3=0x00; //P3.4

}

(四)串口通信

AT89S52内部具有两个串行口,可同时发送和接收数据。它有四种工作方式,可供不同场合使用,波特率由软件设置。接收和发送可用查询或中断方式,使用非常灵活。这里我们为了提高CPU的效率,接收数据采用中断方式,发送数据采用查询方式。

程序如下:

TMOD=0X20;//计数器工作方式2

TL1=0XFD;//波特率 9600

TH1=0XFD;

TR1=1;//

SCON=0X50;//

EA=1;//中断

void send(void)//串行发送

{if(TI!=0)

{ TI=0;

SBUF=led[0];

display(); }}

/****************************************************/

void receive(void) interrupt 4 using 3//串行接收

{unsigned int i;

if(RI!=0)

{RI=0;

led[0]=SBUF;

for(i=0;i

{led[i+1]=led[i];

display()}

(五)记数

记数就是利用单片机内部的定时/计数器产生记数,并把它们的结果在LED上显示出来。流程图如图2。

程序如下:

void counter(void)//记数

{for(;keyvalue=0,led[0]=0,led[1]=0,led[2]=0,led[3]=0;keyvalue++)

{ if(keyvalue=='0')

{led[0]=led[0]+1;

delay10ms(); }

else if(led[0]=='0')

{led[1]=led[1]+1;

delay10ms(); }

else if(led[1]=='0')

{ led[2]=led[2]+1;

delay10ms();}

else if(led[2]=='0')

{ keyvalue='0';

led[0]='0';

led[1]='0';

led[2]='0'; }

else

; } //分号不能省略

三、总程序

总程序就是把以上的几个子程序进行组合,使它们实现应有的功能。有两种方式可以实现这种功能。

1.单任务系统:它是在把其他程序嵌套在键盘扫描程序中。

2.多任务系统:键盘扫描和其他程序是并行的。

这里才用第二种。流程图如图3;总体电路图如图4。

总程序如:

参考文献:

[1] 徐泳龙.单片机原理及应用[M].北京:机械工业出版社,2004.

[2] 成都木,马科技.单片机原理及应用[M].北京:北京希望电子出版社,2000.

[3] 王福瑞.单片微机测控系统设计大全[M].北京:北京航天大学出版社,1998.

[4] 康华光,陈大钦.电子技术基础模拟部分(第四版)[M].北京:高等教育出版社,1998.

[5] 李广弟,朱月秀,王秀山.单片机基础(修订本)[M].北京:北京航天航空大学出版社,2001.

上一篇:对卷烟零售终端教育现状的分析及思考 下一篇:文化、文明与生命