实验4 显示接口仿真实验
- 格式:doc
- 大小:203.00 KB
- 文档页数:7
实验4 显示接口仿真实验
一、实验目的
1.掌握键盘控制原理
2. 掌握数码管的动态显示原理
3. 掌握定时器和中断的原理及应用
二、实验内容
采用按键调节电子时钟时间显示
三、实验原理及步骤
总体功能要求:
使用五个独立按键调节时钟,要求按第一个按键,秒加1,第二个按键分钟加1,第三个按键,小时加1,按第四个按键,全部清零,停止计时,按第五个按键,启动计时。
1. 本例设计一个可以显示小时,分钟,秒的数码时钟,从00-00-00开始计时,到23-59-59后,再过1s,各位清零重新开始计时。
定时的实现:使定时器T0每50ms产生一次中断,再建立中断次数累计变量。
如中断满20次,秒加1,如秒满60,则分钟加1同时将秒清零;如分钟满60,则小时计数加1,同时分钟清零;如小时满24,将小时清零。
2. 采用接口电路原理图
3. 编写键盘扫描子程序,按键值的判别过程如下:
(1)首先判别是否有键被按下。
将P1口的低五位置1(高电平),然后读取这低五位的电平(读引脚),只要其中有一位不为1,说明有按键被按下。
读取方法:P1=0x1f;
If((P1&0x1f)!=0x1f);
(2)按键消抖:当初次判别有键按下后,调用延时子程序(采用定时器1方式1查询方式延时),延时10毫秒后再进行判别,如仍有键按下则可确认有键按下,
去执行相应的控制功能,否则重新扫描。
(3)键值判断。
当确认有键按下,可采用逐位扫描的方法,判断哪个按键被按下。
(4)等待按键松开:
while((P1&0x1f)!=0x1f);
4. 主程序设计:先将定时器T0初始化(定时方式0),定时器1中断初始化和计数个数变量初始化,然后调用时间显示子程序:包括分钟显示延时子函数,小时显示延时子函数,秒数延时子函数;调用键盘扫描子函数。
5. 计时功能由定时器T0的中断服务子程序实现,同时键盘扫描功能也由定时器T0的中断服务子程序完成,即定时器T0每50ms发送中断一次,进行键盘扫描(为保证按键的灵敏,就必须在足够短的时间内对键盘定期扫描)。
6. 程序框架:
//独立式键盘调时的数码时钟实验
#include<reg51.h> // 包含51单片机寄存器定义的头文件
unsigned char code Tab[ ]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //数字0~9的段码
unsigned char counter; //中断次数计数变量
unsigned char second; //秒计数变量
unsigned char minute; //分钟计数变量
unsigned char hour; //小时计数变量
sbit S1=P1^0; //将P1.0位定义为S1
sbit S2=P1^1; //将P1.1位定义为S2
sbit S3=P1^2; //将P1.2位定义为S3
sbit S4=P1^3; //将P1.3位定义为S4
sbit S5=P1^4; //将P1.4位定义为S5
/*******************************************************************
函数功能:延时250*x 微秒
入口参数: x
********************************************************************/
void delay(unsigned char x)
{
// 采用定时器1查询方式定时
}
/*******************************************************************
函数功能:显示秒
入口参数:s
********************************************************************/
void DisplaySecond(unsigned char s)
{
//清屏
//显示s十位
//P2.6引脚输出高电平,DS6点亮
//清屏
//显示s个位
//P2.7引脚输出高电平,DS7点亮
//显示延时5ms
}
/******************************************************************* 函数功能:显示分钟
入口参数:m
********************************************************************/ void DisplayMinute(unsigned char m)
{
//清屏
//显示十位
// P2.3引脚输出高电平,DS3点亮
//显示延时5ms
//清屏
///显示个位
// P2.4引脚输出高电平,DS4点亮
//显示延时5ms
//清屏
//分隔符"-"的段码
//P2.5引脚输出低电平,DS5点亮
//显示延时5ms
}
/******************************************************************* 函数功能:显示小时的子程序
入口参数:h
********************************************************************/ void DisplayHour(unsigned char h)
{
//清屏
//显示十位
//P2.0引脚输出高电平,DS0点亮
//显示延时5ms
//清屏
//显示个位
//P2.1引脚输出高电平,DS1点亮
//清屏
//分隔符"-"的段码
//P2.2引脚输出高电平,DS2点亮
//显示延时5ms
}
/******************************************************************* 函数功能,键盘扫描功能
********************************************************************/ void key_scan(void )
{
//将P1口低5位置高电平"1"
//有键按下
{
//延时10ms再检测
//确认有键按下
{
{ //如果是S1键按下
//秒加1
}
{ //如果是S2键按下
//分钟加1
}
{ //如果是S3键按下
//小时加1
}
{ //如果是S4键按下
//秒清0
//分钟清0
//小时清0
//停止定时器1定时
}
{ //如果是S5键按下
//开启定时器1
}
//等待按键被释放
}
}
}
/****************************************************************** 函数功能:主函数
********************************************************************/
void main(void)
{
//使用定时器T0方式2,定时器T1方式1
//开中断总允许
//允许T0中断
//定时器0高八位赋初值
//定时器0低八位赋初值
//中断计数变量初始化
//秒计数变量初始化
//分钟计数变量初始化
//小时计数变量初始化
while(1)
{
//调用秒显示子程序
//调用分钟显示子程序
//调用小时显示子程序
//调用键盘扫描子程序
}
}
/****************************************************************** 函数功能:定时器T0的中断服务子程序
********************************************************************/ void timer0(void ) interrupt 1
{
//中断次数加1
//如果中断次数满20
{
//中断计数变量清0
//秒计数变量加1
}
//如果秒计满60
{
//如果秒计满60,将秒计数变量清0
//分钟计数变量加1
}
//如果分钟计满60
{
//如果分钟计满60,将分钟计数变量清0
//小时计数变量加1
}
//如果小时计满24
{
//如果小时计满24,将小时计数变量清0 }
//定时器T0高四位重装初值
//定时器T0低四位重装初值
//调用键盘扫描子程序,保证每50ms键盘扫描一次}
实验报告样式(用实验报告纸手写)
实验4 显示接口仿真实验
一、实验目的
1.掌握键盘控制的原理。
2. 掌握数码管的动态显示
3. 掌握定时器的使用
二、实验内容
采用按键调节电子时钟时间显示
三、实验程序
四、实验体会。