//实例75:独立式键盘调时的数码时钟实验
#include<reg51.h> // 包含51单片机寄存器定义的头文件
unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0~9的段码
unsigned char int_time ; //中断次数计数变量
unsigned char second; //秒计数变量
unsigned char minute; //分钟计数变量
unsigned char hour; //小时计数变量
sbit S1=P1^4; //将S1位定义为P1.4
sbit S2=P1^5; //将S2位定义为P1.5
sbit S3=P1^6; //将S3位定义为P1.6
sbit S4=P1^7; //将S4位定义为P1.7
/******************************************************************
函数功能:数码管扫描延时
********************************************************************/
void delay(void)
{
unsigned char j;
for(j=0;j<200;j++)
;
}
/******************************************************************
函数功能:键盘扫描延时
********************************************************************/
void delay60ms(void)
{
unsigned char i,j;
for(i=0;i<200;i++)
for(j=0;j<100;j++)
;
}
/******************************************************************
函数功能:显示秒
入口参数:s
********************************************************************/
void DisplaySecond(unsigned char s)
{
P2=0xbf; //P2.6引脚输出低电平, DS6点亮
P0=Tab[s/10]; //显示十位
delay();
P2=0x7f; //P2.7引脚输出低电平, DS7点亮
P0=Tab[s%10]; //显示个位
delay();
P2=0xff; //关闭所有数码管
}
/******************************************************************
函数功能:显示分钟
入口参数:m
********************************************************************/
void DisplayMinute(unsigned char m)
{
P2=0xf7; // P2.3引脚输出低电平, DS3点亮
P0=Tab[m/10];//显示个位
delay();
P2=0xef; // P2.4引脚输出低电平, DS4点亮
P0=Tab[m%10];
delay();
P2=0xdf; //P2.5引脚输出低电平, DS5点亮
P0=0xbf; //分隔符“-”的段码
delay();
P2=0xff; //关闭所有数码管
}
/******************************************************************
函数功能:显示小时的子程序
入口参数:h
********************************************************************/
void DisplayHour(unsigned char h)
{
P2=0xfe; //P2.0引脚输出低电平, DS0点亮
P0=Tab[h/10]; //显示十位
delay();
P2=0xfd; //P2.1引脚输出低电平, DS1点亮
P0=Tab[h%10]; //显示个位
delay();
P2=0xfb; //P2.2引脚输出低电平, DS2点亮
P0=0xbf; //分隔符“-”的段码
delay();
P2=0xff; //关闭所有数码管
}
/******************************************************************
函数功能:键盘扫描
********************************************************************/
void key_scan(void)
{
P1=0xf0; //将P1口高4位置高电平“1”
if((P1&0xf0)!=0xf0) //有键按下
{
delay60ms(); //延时60ms再检测
if((P1&0xf0)!=0xf0) //确实有键按下
{
if(S1==0) //如果是S1键按下
second++; //秒加1
if(S2==0) //如果是S2键按下
minute++; //分钟加1
if(S3==0) //如果是S3键按下
hour++; //小时加1
if(S4==0) //如果是S4键按下
{
second=0; //秒清0
minute=0; //分钟清0
hour=0; //小时清0
}
}
}
}
/******************************************************************
函数功能:主函数
********************************************************************/
void main(void)
{
TMOD=0x01; //使用定时器T0
EA=1; //开中断总允许
ET0=1; //允许T0中断
TH0=(65536-46083)/256; //定时器高八位赋初值
TL0=(65536-46083)%256; //定时器低八位赋初值
TR0=1; //启动定时器T0
int_time=0; //中断计数变量初始化
second=0; //秒计数变量初始化
minute=0; //分钟计数变量初始化
hour=0; //小时计数变量初始化
while(1)
{
DisplaySecond(second); //调用秒显示子程序
DisplayMinute(minute); //调用分钟显示子程序
DisplayHour(hour); //调用小时显示子程序
}
}
/******************************************************************
函数功能:定时器T0的中断服务子程序
********************************************************************/
void interserve(void ) interrupt 1 using 1 //using Time0
{
TR0=0; //关闭定时器T0
int_time++; //中断次数加1
if(int_time==20) //如果中断次数满20
{
int_time=0; //中断计数变量清0
second++; //秒计数变量加1
}
if(second==60) //如果秒计满60
{
second=0; //如果秒计满60,将秒计数变量清0
minute++; //分钟计数变量加1
}
if(minute==60) //如果分钟计满60
{
minute=0; //如果分钟计满60,将分钟计数变量清0
hour++; //小时计数变量加1
}
if(hour==24) //如果小时计满24
{
hour=0; //如果小时计满24,将小时计数变量清0
}
key_scan(); //执行键盘扫描
TH0=(65536-46083)/256; //定时器T0高四位赋值
TL0=(65536-46083)%256; //定时器T0低四位赋值
TR0=1; //启动定时器T0
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
基于C语言实现独立式键盘调时的数码时钟实验(含源代码+使用说明).zip (4个子文件)
341-独立式键盘调时的数码时钟实验
ex76.hex 671B
ex76.DSN 82KB
ex75.c 5KB
Last Loaded ex76.DBK 82KB
共 4 条
- 1
资源评论
CrMylive.
- 粉丝: 1w+
- 资源: 4万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【岗位说明】物业保安人员岗位职责.doc
- 【岗位说明】物业有限公司综合部厨工岗位职责.doc
- 【岗位说明】物业管理处环境部绿化工岗位职责.doc
- 龙门式6点伺服可调中频逆变电阻焊机sw19全套技术资料100%好用.zip
- 【岗位说明】陶瓷部门职能岗位职责.doc
- 【岗位说明】最新实用陶瓷企业生产规范岗位说明书.doc
- 【岗位说明】陶瓷部门职能岗位职责.docx
- 【岗位说明】电力公司岗位职责.docx
- 【岗位说明】电网公司岗位职责02.doc
- 【岗位说明】电力公司岗位职责.doc
- 【岗位说明】电力公司岗位职责说明02.doc
- 【岗位说明】电力施工项目经理岗位职责.doc
- 【岗位说明】供电公司部门职责.doc
- 【岗位说明】苏州电力公司人力资源部主任岗位职责描述.doc
- 【岗位说明】某电力公司客户经理岗位职责描述.doc
- 【岗位说明】石油开采岗位责任制.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功