补充完整函数void Disp() 和void Key_Process()的代码。 //----------------------------------------------------------------- // 名称: 用8255接口扩展来实现可调电子日历 //----------------------------------------------------------------- // 说明: 8255的A、B端口分别连接8位数码管的段码和位码,C端口接按键 // //----------------------------------------------------------------- #include <reg51.h> #include <absacc.h> #define uchar unsigned char #define uint unsigned int //A,B,C端口及命令端口地址定义 #define PA XBYTE[0x0000] #define PB XBYTE[0x0001] #define PC XBYTE[0x0002] #define COM XBYTE[0x0003] //上述定义也可写成: //#define PA *(XBYTE + 0x0000) //#define PB *(XBYTE + 0x0001) //#define PC *(XBYTE + 0x0002) //#define COM *(XBYTE + 0x0003) //0-9的共阳数码管段码表,最后的0xBF表示"-" code uchar SEG_CODE[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF }; //数码管位选 code uchar INDEX_CODE[] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //初始日期20-06-25 uchar Disp_Buf[] = {2,0,10,0,6,10,2,5}; //----------------------------------------------------------------- // 延时函数 //----------------------------------------------------------------- void delay_ms(uint x) { uchar t; while(x--) for(t = 0; t < 120; t++); } //显示函数 void Disp() { } //----------------------------------------------------------------- // 8255 C端口按键处理 //----------------------------------------------------------------- void Key_Process() { } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- void main() { COM=0x89; while(1) { Key_Process(); } }

时间: 2023-08-15 10:17:58 浏览: 68
好的,以下是完整的函数`void Disp()`和`void Key_Process()`的代码: ```c //显示函数 void Disp() { static uchar index = 0; //静态变量,用于记录当前位选 static uchar cnt = 0; //静态变量,用于实现闪烁效果 uchar seg_data; //段码数据 //闪烁处理 cnt++; if (cnt == 10) //每10次循环闪烁一次 { cnt = 0; if (Disp_Buf[6] & 0x80) //最高位为1时闪烁 seg_data = 0x00; //灭 else seg_data = SEG_CODE[Disp_Buf[index]]; //显示当前位的数据 } else { seg_data = SEG_CODE[Disp_Buf[index]]; //显示当前位的数据 } //输出段码和位选 PA = seg_data; PB = INDEX_CODE[index]; //切换到下一个位选 index++; if (index > 7) index = 0; } // 8255 C端口按键处理 void Key_Process() { static uchar key_state = 0; //静态变量,用于记录按键状态 uchar key_data = PC; //读取C端口按键数据 //按键消抖处理 if (key_data != 0xff) { delay_ms(10); if (key_data == PC) { //确定按键状态 if (key_state == 0 && (key_data & 0x01) == 0) { //按键1按下,切换到年份设置模式 key_state = 1; Disp_Buf[0] = 2; Disp_Buf[1] = 0; Disp_Buf[2] = 10; Disp_Buf[3] = 0; Disp_Buf[4] = 0; Disp_Buf[5] = 0; Disp_Buf[6] = 0x80; //最高位为1表示设置模式 } else if (key_state == 1 && (key_data & 0x01) == 0) { //按键1再次按下,保存年份并退出设置模式 key_state = 0; Disp_Buf[6] = 0; //最高位为0表示正常显示模式 } else if (key_state == 0 && (key_data & 0x02) == 0) { //按键2按下,切换到月份设置模式 key_state = 2; Disp_Buf[0] = 0; Disp_Buf[1] = 0; Disp_Buf[2] = 10; Disp_Buf[3] = 0; Disp_Buf[4] = 0; Disp_Buf[5] = 0; Disp_Buf[6] = 0x80; //最高位为1表示设置模式 } else if (key_state == 2 && (key_data & 0x02) == 0) { //按键2再次按下,保存月份并退出设置模式 key_state = 0; Disp_Buf[6] = 0; //最高位为0表示正常显示模式 } else if (key_state == 0 && (key_data & 0x04) == 0) { //按键3按下,切换到日期设置模式 key_state = 3; Disp_Buf[0] = 0; Disp_Buf[1] = 0; Disp_Buf[2] = 0; Disp_Buf[3] = 6; Disp_Buf[4] = 0; Disp_Buf[5] = 0; Disp_Buf[6] = 0x80; //最高位为1表示设置模式 } else if (key_state == 3 && (key_data & 0x04) == 0) { //按键3再次按下,保存日期并退出设置模式 key_state = 0; Disp_Buf[6] = 0; //最高位为0表示正常显示模式 } else if (key_state == 0 && (key_data & 0x08) == 0) { //按键4按下,清零日期 key_state = 4; Disp_Buf[0] = 0; Disp_Buf[1] = 0; Disp_Buf[2] = 0; Disp_Buf[3] = 0; Disp_Buf[4] = 0; Disp_Buf[5] = 0; Disp_Buf[6] = 0; //最高位为0表示正常显示模式 } else if (key_state == 4 && (key_data & 0x08) == 0) { //按键4再次按下,恢复初始日期 key_state = 0; Disp_Buf[0] = 2; Disp_Buf[1] = 0; Disp_Buf[2] = 10; Disp_Buf[3] = 0; Disp_Buf[4] = 6; Disp_Buf[5] = 10; Disp_Buf[6] = 0; //最高位为0表示正常显示模式 } } } else { key_state = 0; //按键松开后,清除按键状态 } } ```

相关推荐

最新推荐

recommend-type

二维点云配准+kd-tree相结合+三角剖分

本文采用的编程环境为MATLAB2022,文章末尾含ICP和icp与kd-tree相结合的核心代码即:放置的是函数文件,没有方式.m文件。 来源于大二期末大作业,做的一般,希望能够帮助到你。(通过latex生成的论文)
recommend-type

vue里面v-bind和Props 利用props绑定动态数据的方法

今天小编就为大家分享一篇vue里面v-bind和Props 利用props绑定动态数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

C++使用WideCharToMultiByte函数生成UTF-8编码文件的方法

用来映射Unicode字符串的WideCharToMultiByte函数经常被用来进行UTF-8编码的转换,以下我们将看到C++使用WideCharToMultiByte函数生成UTF-8编码文件的方法,首先先来对WideCharToMultiByte作一个详细的了解:
recommend-type

华为认证HCIP-AI测试卷+答案.docx

1.(判断) 梯度下降算法的收敛点取决于代价函数。(数据样本) B. FALSE  2.(判断) 图像的直方图操作是统计了整幅图像的灰度值分布频率,当图像画面光照不均匀时,直方图操作效果会受到影响,需要使用改进的算法。...
recommend-type

基于MATLAB-GUI的简易计算器设计.docx

计算器设计时主要利用到get和set两个函数进行各个控件属性值的传递和设置。计算器实现的功能有:数字0~9和小数点的输入显示,平方、开平方和对数的输入显示。进行四则运算、正弦计算、余弦计算、正切计算和余切计算...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。