没有合适的资源?快使用搜索试试~ 我知道了~
单片机培训实验设计ECMT汇总.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 145 浏览量
2021-10-02
16:39:13
上传
评论
收藏 1.38MB DOC 举报
温馨提示
试读
25页
单片机技术
资源推荐
资源详情
资源评论
实验四-1 数码管跑马显示
一、实验目的
1、熟悉 51 单片机并行口的输入方式,输出方式的编程;
2、熟悉共阴极 LED 的工作特性及控制方法;
3、学习在系统烧写单片机程序〔在系统编程 ISP〕的方法。
二、实验电路和程序
1、实验电路
一个数码管由 8 个发光二极管组成,由于是共阴极,所以低电平(高电平)选通。如图
9.6 所示,SN74ALS245A 接成直通方式通过 P0 口驱动数码管。由 74LS138 对 P1 口译码控
制 SN74ALS245A 驱动 6 个数码管的位选,剩余两路,一路接到发光二极管,另一路控制
蜂鸣器。由程序进行选通控制。
2、程序
〔1〕汇编程序:
通过程序控制使数码管进行从 0 到 9 的跑马显示和 0.到 9.的跑马显示,两个数字显示
的间隙发光二极管发光,当跑马显示完毕后,发光二极管继续闪亮。通过复位按键进行复
位。
图 9.6 实验电路图
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV A,#00H
MOV P1,A
MOV R0,#00H
LS: MOV A,R0
MOV DPTR,#TAB0
MOVC A,@A+DPTR
MOV P1,A ;数码管位选跑马
MOV A,R0
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P0,A ;数码管数字显示
INC R0
ACALL DELAY
MOV P1,#0E0H
ACALL DELAY
SJMP LS
DELAY: MOV R5,#08H ;延时
DELAY1: MOV R6,#0FAH
DELAY2: MOV R7,#0FAH
DJNZ R7,$
DJNZ R6,DELAY2
DJNZ R5,DELAY1
RET
TAB0: DB 00H,20H,40H,60H,80H,0A0H,00H,20H,40H,60H
DB 80H,0A0H,00H,20H,40H,60H,80H,0A0H,00H,20H
TAB1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H, 7FH,6FH
DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
END
〔2〕C 语言程序:
通过程序控制使数码管进行从 0 到 9 的跑马显示和 0.到 9.的跑马显示,两个数字显示
的间隙发光二极管发光,当跑马显示完毕后,发光二极管长亮。通过复位按键进行复位。
#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
uint a[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
uint b[20]={0x00,0x20,0x40,0x60,0x80,0xa0,0x00,0x20,0x40,0x60,
0x80,0xa0,0x00,0x20,0x40,0x60,0x80,0xa0,0x00,0x20};
void delay(uint count) /*延时子程序*/
{
uint i;
while(count--!=0)
{
for(i=0;i<72;i++);
}
}
main()
{
uint j;
for(j=0;j<20;j++)
{
P0=a[j]; /*数字显示*/
P1=b[j]; /*数码管跑马*/
delay(1000); /*延时*/
P1=0xe0;
delay(1000); /*延时*/
}
P1=0xe0;
}
〔3〕自编程序:
编程并烧写程序,6 个数码管依次显示 6,5,2,3,0.,9;然后,6 个数码管同时点
亮,显示 65230.9。再编一个小程序,在五个数码管上显示“HELLO〞。
#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint count) /*延时子程序*/
{
uint i;
while(count--!=0)
{
for(i=0;i<72;i++);
}
}
main()
{
for(j=0;j<1;j++) /*65230.9*/
{
uint a[6]={0x7d,0x6d,0x5b,0x4f,0xff,0x6f};
uint b[20]={0x00,0x20,0x40,0x60,0x80,0xa0};
for(i=0;i<6;i++)
{
P1=b[i];
P0=a[i];
delay(500);
}
}
for(j=0;j<500;j++)/*HELLO */
{
uint a[5]={0x76,0x79,0x38,0x38,0x3f};
uint b[20]={0x00,0x20,0x40,0x60,0x80,0xa0};
for(i=0;i<6;i++)
{
P1=b[i];
P0=a[i];
delay(1);
}
}
delay(500);
P1=0xe0;
}
三、编写程序并在实验板上执行通过
1、数码管跑马显示 0~9,0.~9.,测试数码管性能;
2、数码管依次显示 6,5,2,3,0.,9,由于数码管位选决定每次只有一个数码管点
亮,所以利用视觉误差使 6 个数码管同时点亮,显示 65230.9;
3、自编数码管段代码,用数码管显示英文“HELLO〞;
4、复位按键复位,重复执行。
实验四-2 行列按键显示
一、实验目的
1、熟悉行列按键的定位方法;
2、进一步学习在系统编程〔ISP〕的方法。
二、实验电路
实验电路图如图 9.7 所示,按键信号由 P2 口进行识别,通过对按键坐标的判断来定义
数码管的显示位和显示内容。
图 9.7 实验电路图
三、实验程序
16 个 按 键 按 照 从 左 至 右 , 从 上 至 下 的 顺 序 排 列 , 操 作 时 分 别 显 示
0 ,1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,9 , 0. , 1. , 2. , 3. , 4. ,8. ; 其 中 后六 位 分 别代 表
A,B,C,D,E,F,复位键复位。
剩余24页未读,继续阅读
资源评论
zhangao_fengg
- 粉丝: 17
- 资源: 5万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功