单片机实训任务书.docx

上传人:b****8 文档编号:28151622 上传时间:2023-07-08 格式:DOCX 页数:14 大小:250.59KB
下载 相关 举报
单片机实训任务书.docx_第1页
第1页 / 共14页
单片机实训任务书.docx_第2页
第2页 / 共14页
单片机实训任务书.docx_第3页
第3页 / 共14页
单片机实训任务书.docx_第4页
第4页 / 共14页
单片机实训任务书.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机实训任务书.docx

《单片机实训任务书.docx》由会员分享,可在线阅读,更多相关《单片机实训任务书.docx(14页珍藏版)》请在冰豆网上搜索。

单片机实训任务书.docx

单片机实训任务书

《单片机原理及接口》

实训任务书

使用班级:

电气自动化技术103

指导老师:

冉会中

电子信息与电气工程系

2011年2月

实训任务一:

选座系统设计/LED点阵广告设计

一、内容

1、选座系统设计

设计主要内容:

会议厅电影厅等有座位选择的需求,要求用单片机、LED和按键设计自助选座系统。

基本功能要求:

1)用点亮LED上对应的点表示已选的座位

2)用LED上对应的熄灭的点表示未选的座位

3)按按键实现座位的行号和列号输入,并通过矩阵LED上对应的点闪烁来形象显示将选定的座位号

2.点阵广告设计

设计主要内容:

常见室外有LED点阵广告,要求用单片机、多片LED设计显示汉字的点阵广告牌系统。

基本功能要求:

用点亮LED上对应的点显示一个特定的汉字或图形

二、目的

1.学习矩阵按键的工作原理

2.学习矩阵按键识别的方法

3.学习点阵显示的工作原理

4.学习点矩点亮显示字型的方法

5.训练程序编写和调试能力

三、知识梳理和参考:

1.矩阵按键例

功能:

用单片机的并口连接4*4矩阵按键,并在数码管上显示每个按键的序号

硬件设计

单片机P0.0至P0.3接矩阵按键的行线,P2.0至P2.3接矩阵按键的列线,P3接led段码管的abcdefgdp端,段码管的共阳端分别接P1口的P1.0和P1.3

参考程序

//用单片机的并口连接4*4矩阵按键,并在数码管上显示每个按键的序号

#include

voiddelayms(unsignedcharxms)//延时xms子函数

{

unsignedchari,m;

for(i=xms;i>0;i--)//i=xms即延时约xms毫秒

for(m=110;m>0;m--);

}

//显示子程序

voiddisplay(intj)

{

unsignedcharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//字符ABCDE

if(j!

=-1)

P3=tab[j];

else

P3=0x00;//黑屏

delayms(5);

}

//矩阵键盘扫描子程序

intscan_key(void)

{

unsignedi,temp,m,n;//i为循环次数,m为列,n为行号,P0为行,P2为列

unsignedcharsel_c,sel_column;

bitfind=0;

P0=0x0f;

P2=0x00;

temp=~P0;

temp=temp&0x0f;

if(temp!

=0x00)

{delayms(10);

temp=~P0;

temp=temp&0x0f;

if(temp!

=0x00)

sel_c=0x01;

{//判断哪一个按键

for(i=0;i<4;i++)

{

sel_column=~sel_c;

P2=sel_column;

temp=~P0;

temp=temp&0x0f;

if(temp!

=0x00)

{m=i;

find=1;

switch(temp)

{case0x01:

n=0;break;

case0x02:

n=1;break;

case0x04:

n=2;break;

case0x08:

n=3;break;

default:

break;

}

}

sel_c=sel_c<<1;

}

}

}

if(find==0)return-1;

elsereturn(n*4+m);

}

voidmain()

{

intkey;

key=-1;//没按下按键,给key赋值-1,创造黑屏条件

display(key);

while

(1)

{

key=scan_key();

if(key!

=-1)

display(key);

delayms(30);

}

}

想想练练

如果把矩阵键盘编号改为下图,程序怎么改写?

如果输入多位数,并在多位段码管上显示,程序怎么写?

2.

LED点阵显示例

功能:

单片机控制8*8的LED点阵显示数字和汉字

硬件线路:

单片机的并口P0连线8*8的LED点阵的列线,并口P2连线8*8的LED点阵的行线

知识输理:

参见教材P137

编程思路:

在点阵上稳定显示一个字符”日”的设计思路是:

用点阵上所有点亮的点来展示成”日”字的形状,从而达到显示的目的。

字型编码用二维数组表示(也可用一维数组)。

硬件接线:

单片机的两个并行端口P0和P2分别连线LED的列选和行选。

显示过程:

行扫描方式。

每次显示一行8个LED,8行扫描显示完,即为一个字型,字型要稳定显示,开始新一轮的扫描。

首先选中第一行(P2.0所接线),把该行要点亮所对应的8位二进制数0x00(字型编码)送到列控制口(P0口),延时2ms(8行显示一帧,即一个稳定的字型,一帧的显示时间不能超过超过视觉暂留时间),选中第二行(P2.1所接线),把该行要点亮所对应的8位二进制数0x3c(字型编码)送到列控制口(P0口),延时2ms,如此下去,直到把一个字的8个字节的字型编码送给8行,完整显示一个汉字。

为了稳定显示,每隔20ms刷新显示一次,刷新100次后,再显示其他字型。

参考程序

//循环显示汉字“一”、“二”和“日”三个字型

#include

voiddelay(unsignedinti)

{

unsignedcharj,k;

for(j=0;j

for(k=0;k<255;k++);

}

voidmain()

{

unsignedcharcodeled[3][8]={{0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00},//汉字字型“一”

{0x00,0x00,0x3c,0x00,0x00,0x00,0xff,0x00},////汉字字型“二”

{0x00,0x3c,0x24,0x24,0x3c,0x24,0x24,0x3c}};//汉字字型数据"日"

unsignedcharrowselect;

unsignedchark,j;

unsignedintm;

while

(1)

{

for(k=0;k<=2;k++)

{for(m=0;m<=100;m++)

//显示一个字的字型

{rowselect=0x01;

for(j=0;j<=7;j++)

{

P2=~rowselect;//选行

//同时送字型编码中的一个字节到列线

P0=led[k][j];

delay

(2);

rowselect=rowselect<<1;

}

delay(20);

}

}

}

}

想想练练

编程实现把矩阵中的任意设定点点亮

如果矩阵中的一部分点亮,让任意设定点闪烁2秒后,也点亮,但是不影响前面点亮的部分,程序如何编写

实训任务二数字电压表

一、内容

利用单片机和A/D转换芯片采集0-5V的模拟电压信号,转变为8位数字信号,在两位数码管上显示。

二、目的

1.学习单片机接口技术

2学习A/D转换技术

3.掌握模拟信号采集及数据显示的程序设计和调试方法

三、知识梳理和编程思路:

ADC0809是一个8位8通道的逐次逼近式AD转换器,各引脚功能如下:

(1)IN7〜IN0:

8个模拟量输入通道。

(2)ADDA、ADDB、ADDC:

地址线。

(3)ALE:

地址锁存允许信号。

对应ALE上升沿,ADDA、ADDB和ADDC地址状态送入地址锁存器中,经译码后输出选择模拟信号输入通道。

(4)START:

转换启动信号。

对应START上跳沿时,所有内部寄存器清0;对应START下跳沿,开始进行A/D转换;在A/D转换期间,START应保持低电平。

单片机连线此引脚,可以启动ADC0809开始转换

(5)D7~D0:

数据输出线,为三态缓冲输出形式,可以和单片机的数据线直接相连,单片机连线ADC0809的数据线,可以读取转换的结果

(6)OE:

输出允许信号,用于控制三态输出锁存器向单片机输出转换得到的数据。

当OE=0时,输出数据线呈高电阻;当OE=1时,输出转换得到的数据。

(7)CLK:

时钟信号。

ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。

通常使用频率为500kHz的时钟信号(8)EOC——转换结束状态信号。

启动转换后,系统自动设置EOC=0,转换完成后,EOC=1。

该状态信号既可作为查询的状态标志,又可以作为中断请求信号使用。

(9)Vref:

参考电源。

参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准,其典型值为+5V(Vref(+)=+5V,Vref(-)=0V)。

转换步骤:

1.ALE信号上升沿有效,锁存地址并选中相应通道。

2.ST信号有效,开始转换。

A/D转换期间ST为低电平。

3.EOC信号输出高电平,表示转换结束。

4.OE信号有效,允许输出转换结果

四、示例

用滑动电阻模拟可变的电压模拟信号,模拟信号送给ADC0809模数转换芯片的IN0通道,ADC0809芯片将其转换为数字信号,送给单片机的P1口,单片机控制2位数码管显示。

参考程序

//功能:

简易数字电压表程序

#include

#defineucharunsignedchar//无符号字符型数据预定义为uchar

ucharcodeled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8E};//定义0~F显示码

sbitP0_2=P0^2;//可寻址位定义

sbitP0_3=P0^3;

sbitP0_6=P0^6;

sbitP0_7=P0^7;

voidsepr(unsignedchari);//把形式参数i的高低位分开,分别存放在全局变量chh,chl中

voiddisp();//显示chh,chl中的数据(两位)

ucharchh,chl;//全局变量定义

voidmain()//主函数

{

uchara;

unsignedchari;

while

(1)

{

P0_2=1;

for(a=0;a<50;a++);//延时

P0_2=0;//在P0.2引脚产生下降沿,START和ALE引脚产生上升沿,锁存通道地址,所有内部寄存器清0

for(a=0;a<50;a++);//延时

P0_2=1;//在P0.2上产生上升沿,START上产生下降沿,A/D转换开始

while(P0_3==0);//等待转换完成,EOC=1表示转换完成

P0_2=0;//P0_2=0,则OE=1,允许读数

P1=0xff;//作为输入口,P1口先置全1

i=P1;//读入A/D转换数据

sepr(i);//数据高低位分开

disp();//显示数据

}

}

//函数名:

sepr

//函数功能:

将8位二进制数00~FFH转换为0.0~5.0,低位和高位分别存在chl和chh中

//形式参数:

i为A/D转换后的8位二进制数

//返回值:

chl中存放拆分后的低位、chh中存放拆分后的高位

voidsepr(unsignedchari)//拆分高位和低位

{

ucharch;

ch=i;

chh=ch/51;//除以51得到高位

ch=ch%51;//取余运算

chl=ch*10/51;//再除以51,并扩大10倍,得到低位

}

//函数名:

disp

//函数功能:

显示全局变量中chl和chh中的数字

voiddisp()

{

ucharj;

P2=led[chl];//显示低位

P0_6=1;

P0_7=0;

for(j=0;j<100;j++);//延时

P0_6=0;

P0_7=0;

P2=led[chh]&0x7f;//显示高位

P0_6=0;

P0_7=1;

for(j=0;j<100;j++);//延时

P0_6=0;

P0_7=0;

}

其他资料:

王静霞《单片机应用技术》电子工业出版社

刘高锁《单片机系统开发技术》天津出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1