TX-1C 单片机开发板实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【实验说明】
关于按键去抖动的解释,我们在手动按键的时候,由于机械抖动或是其它一些非人为 的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的 时间大约为 50ms 左右,在按下瞬间到稳定的时间为 5-10ms,在松开的瞬间到稳定的时间也 为 5-10ms,如果我们在首次检测到键被按下后延时 10ms 左右再去检测,这时如果是干扰 信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。
【硬件电路】
25
【程序代码】
#include<reg51.h>
#define uchar unsigned char
uchar j,k,i,a,A1,A2,second; sbit dula=P2^6;
//锁存器控制端定义
sbit wela=P2^7;
uchar code table[]= {
//数字编码
参考程序:
程序一:
ORG 0000H AJMP START
ORG 000BH AJMP TIME0
;定时器 0 的中断向量地址 ;跳转到真正的定时器程序处
ORG 0030H
START:
MOV P1,#0FFH ;关所有灯
MOV TMOD,#00000001B ;定时/计数器 0 工作于方式 1
MOV TH0,#15H
【实验说明】
本开发板上数码管为共阴极。静态数码管显示原理(视频中有详细介绍):这里就共阴极数 码管显示原理进行讲解,一位数码管内一共有 8 个发光二极管,对共阴极来说其 8 个发光二极 管的阴极在数码管内部全部接在一起,也就是“共阴”说法的来源,阳极是独立的,设计电路时 一般把阴极接地,当我们从外部给任一个阳极加一个高电平时这个发光二极管就亮了,如果想要 出一个 8 字,并且把右下角的小数点也点亮的话,那可以给 8 个阳极全送高电平,想让数码管 显示几就给相对应的发光二极管送高电平,因此我们在显示数字的时候首先做的就是给 0-9 十个 数字编好码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。另外说一下,一般 的数码管每一段亮至少需要 10 个毫安的电流,而单片机的 IO 口送不出如此大的电流,所以我 们需要加数码管的驱动电路,可以用上拉电阻的方法,也可以使用专门的驱动芯片,本开发板使 用的 74HC573,其输出电流较大,足够点亮数码管。本开发板上的六位数码管中每个相同段号 (段指 a,b,c,d,e,f,g,h)全部是接在一起的,其中每一个位(阴极)是独立的,所以在做静态显 示的时候所有的数码管只能显示相同的数字,当然可以控制哪几位显示,如果让它们显示不同的 数字那就得给每一个数码管加一套驱动电路了。但这样做是没有必要的,后面我们会讲到关于数 码管动态显示原理。
{ delay10ms();
//延时,软件去抖动干扰
if(BY1==0)
//再次检测确认按键按下
{ count++;
//按键计数加 1
if(count==8) //计 8 次重新计数
{ count=0;
//将 count 清零
}
} while(BY1==0); //等待按键释放,如果键未释放则一直在此等待。
MOV TL0,#0A0H ;即数 5536
SETB EA
;开总中断允许
SETB ET0 ;开定时/计数器 0 允许
SETB TR0
;定时/计数器 0 开始运行
LOOP: AJMP LOOP
;真正工作时,这里可写任意程序
TIME0:
;定时器 0 的中断处理程序
PUSH ACC
PUSH PSW
;将 PSW 和 ACC 推入堆栈保护
JNB TF0,$ CLR TF0 CPL P1.0 JNB TF1,AT2 CLR TF1 SJMP AT1 END
实验四:59秒计数器及数码管动态显示 【实验目的】
练习进位操作,数码管动态显示。
【实验现象】
用软件延时的方法实现 0-59 秒自动计数器,用数码管的前两位显示出来。
【实验说明】

下面给出本开发板共阴极数码管数字编码
矩阵键盘的四行分别与 P3.0-P3.3 连接,四列分别与 P3.4-P3.7 连接。 27
【硬件电路】
键盘电路请参阅“单键识别”,此处略。
28
【程序代码】
#include<reg51.h>
sbit beep=P2^3;
//蜂鸣器接口
sbit dula=P2^6;
基于TX 单片机实验板的基本实验
实验一:流水灯实验 【实验目的】
掌握循环移位的工作原理和操作方法,学会使用 C51 封装好的函数库 C51LIB,延时函数的 时间估算。
【实验现象】
单片机 P1 口相连的 8 个发光二极管中的一个循环移位点亮,同时蜂鸣器发出滴滴的响声。
【实验说明】
蜂鸣器用一 PNP 型三极管驱动,集电极(C 极)通过蜂鸣器线圈接 5V 电源,基极(B 极) 是控制端,发射极(E 极)接地,当三极管 C,B 极 PN 结正偏时,PN 结导通,即 B 极为低电 平时,三极管导通,蜂鸣器发声,视频中有介绍,若大家有疑问可参考模电书。
//先给 k 一个初值 11111110 等待移位
//打开蜂鸣器 //让它响 10ms //关闭蜂鸣器 //把 k 循环左移一位 //把移完的值再送给 k //同时把值送到 P1 口点亮发光二极管 //再次循环
22
实验二:单键识别实验
【实验目的】
独立按键的识别方法、键盘消抖等。
【实验现象】
每按一次独立键盘的 S2 键,与 P1 口相连的八个发光二极管中点亮的一个往下移动一位。
CPL P1.0
MOV TH0,#15H
MOV TL0,#0A0H ;重置定时常数
POP PSW
POP ACC
RETI
END
程序二:
ORG 0000H AT0: MOV P1,#0FFH
MOV TMOD,#61H ;设置 T1 为计数器,工作于方式 2;设置 T0 为定时器,工作于方式 1 MOV TL1,#246 MOV TH1,#246 SETB TR1 AT1: CPL P1.7 AT2: MOV TL0,#00H ; MOV TH0,#4CH ;即数 15536 SETB TR0
为止。 五、编程提示 1、程序 1 说明 定时器 T0、T1 的数据寄存器都是 16 位,定时间隔有限,因此会发 现 LED3 闪烁的速度很快。 2、程序 2 说明 (1)该程序要求定时时间间隔为 1 秒,故应采用复合定时的方法。 即设 T0 为 50ms 定时器,每 50ms 使 P1.0 输出变化一次,则 100ms 后 P1.0 输出一个完整的计数脉冲,作为 T1 计数器的计数输入,所以 T1 每计数 10 次就能完成 1 秒的定时。 六、实验报告 1、画出硬件接线图。 2、写出程序清单(要写出必要的注释)和执行结果。 3、根据单片机定时器工作方式,如何选择好的工作方式?在长时间 定时中,如何提高定时精度?
delay10ms(); beep=0; delay10ms(); beep=1; j=_crol_(k,1); k=j; P1=j; } }
//后面要用到它里面的_crol_(k,l)函数这个函数的意思是把一 个字符变量 k 循环左移 l 位,关于它的说明请查看安装 KEIL 目录下的\Keil\C51\HLP 文件夹里面的 c51lib,这个文件里面 有各种用 C 语言封装好的函数库,我们在以后使用其中某些函 数时可以直接使用而自己不必再写。 //定义四个字符变量 // 定义蜂鸣器的接口 //延时子程序,大约延时 10ms
【硬件电路】
【程序代码】
#include <reg52.h> sbit BY1=P3^4; unsigned char count; unsigned char temp; unsigned char a,b; void delay10ms(void) {
unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); } key() {
//显示函数
{
dula=0; P0=table[sh_c];
//显示十位
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0; delay(5);
//亮 5ms
P0=table[g_c];
//显示个位
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0; delay(5);
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
void delay(uchar i)
/t;0;j--)
for(k=125;k>0;k--);
} void display(uchar sh_c,uchar g_c)
}
} move()
//广告灯向下移动移动函数
{ a=temp<<count;
//这三句为一个循环移位,相当于前面提到的
b=temp>>(8-count); // _crol_()函数,这里是自己写的过程,大家可对比
P1=a|b; //下。
}
main()
{ count=0;
//初始化参数设置
temp=0xfe;
//显示部分。至于时间大概是多少
{
//请用户用软件仿真看时间约等于 1 秒
display(A1,A2);//便可,如果需要精确定时请用定时器
}
}
}
实验五:矩阵键盘检测及数码管动态显示
【实验目的】
学会矩阵键盘的检测,掌握数码管静态显示原理。
【实验现象】
依次按下 4*4 矩阵键盘上从第 1 到第 20 个键,同时在六位数码管上依次显示 0、1、2、3、 4、5、6、7、8、9、A、B、C、D、E、F。
//亮 5ms
} void main()
//主函数
{
while(1)
{ second++;
//秒加一
if(second==60)
//判断是否到 60
second=0;
//如果到了则清零
A1=second/10;
//没到则分离出十位和个位
26
A2=second%10; for(a=50;a>0;a--)
【硬件电路】
21
【程序代码】
#include <reg51.h> #include <intrins.h>
unsigned char a,b,k,j; sbit beep=P2^3; void delay10ms() {
for(a=100;a>0;a--) for(b=225;b>0;b--); } void main() { k=0xfe; while(1) {
P1=0xff;
P1=temp; while(1)
//永远循环,扫描判断按键是否按下
{ key();
//调用按键识别函数
move();
//调用广告灯移动函数
}
}
24
实验三 定时器/计数器实验
一、实验目的 1、掌握 MCS-51 单片机的定时器/计数器工作方式和编程方法。 2、进一步掌握 MCS-51 单片机中断服务程序编写方法。 二、实验内容 1、程序一:利用单片机内部中断方式定时器 0 实现 LED1(通过 P1.0 口)闪烁。 2、程序二:利用单片机内部定时器和计数器,控制发光二极管 LED8 (通过 P1.7 口)以亮 1 秒,暗 1 秒的速度闪烁。 三、实验电路 见 TX 单片机实验板参考原理图。 四、实验步骤 1、认真阅读 TX 单片机实验板参考原理图。 2、在 keil 软件中用单步、断点、连续方式调试程序,检查程序运行 结果是否正确,排除软件错误。 3、将生成的*.hex 目标文件通过 USB 下载线烧写到单片机内部,观 察 LED3 的状态,验证运行结果是否正确,直至达到实验的要求为止。 4、在 keil 软件中用单步、断点、连续方式调试程序二,检查程序运 行结果是否正确,排除软件错误。 5、用导线将 P1.0 接 T1。 6、将生成的*.hex 目标文件通过 ISP 下载线烧写到单片机内部,观察 两个 LED 灯的状态,验证运行结果是否正确,直至达到实验的要求
//定义按键的输入端 S2 键 //按键计数,每按一下,count 加 1 //延时程序
//按键判断程序 23
if(BY1==0)
//判断是否按下键盘,当单片机上电时所有 IO 口为高电平,
S2 键一端接地另一端接 P3.4,所以当键被按下时 P3.4 口直
接接地,此时检测 P3.4 肯定为低电平。
相关文档
最新文档