时间: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.
关于畜牧业养殖 关于实习生工作计划 关于大学生活总结 关于大一学年个人总结 关于幼师实习工作报告 关于护理实习工作报告 关于未来的作文 关于坚持的作文 关于奉献的演讲稿 关于安全心得体会