根据提供的文件信息,我们可以归纳出该C语言程序用于实现一个基于7079键盘和数码管显示的数字电子钟项目。接下来将详细解析文件中的关键知识点。 ### 1. 文件结构与宏定义 #### 1.1 宏定义 - `#define uchar unsigned char`: 将`uchar`定义为`unsigned char`类型。 - `#define uint unsigned int`: 将`uint`定义为`unsigned int`类型。 - `sbit CS = P1^0;`: 定义了`CS`信号位为P1口的第0个引脚。 - `sbit CLK = P1^1;`: 定义了`CLK`信号位为P1口的第1个引脚。 - `sbit DATA = P1^2;`: 定义了`DATA`信号位为P1口的第2个引脚。 - `sbit KEY = P1^3;`: 定义了`KEY`信号位为P1口的第3个引脚。 - `sbit bjb = P1^4;`: 定义了一个名为`bjb`的信号位为P1口的第4个引脚。 #### 1.2 数组定义 - `uchar Led[8]`: 定义了一个名为`Led`的数组,用于存储数码管显示所需的代码。 - `uchar code Led_buf[]`: 定义了一个名为`Led_buf`的数组,包含了从数字0到9、字母A到F以及一些特殊字符(如点号)的显示代码。 - `uchar code Key_buf[]`: 定义了一个名为`Key_buf`的数组,包含了键盘上各个按键对应的值。 ### 2. 变量定义 - `uchar n;`: 用于计数或临时存储的变量。 - `uchar hh, mm, ss, nhh, nmm, nss, day, mon, week, mbhh, mbmm, mbss, mbmss;`: 这些变量分别表示小时、分钟、秒等时间相关的数值。 - `uint year;`: 用于表示年份的整型变量。 - `bitset set = 0, ct = 0, ck = 0, ckbj = 0, ledd = 0, mb = 0, mb1 = 0;`: 这些变量用于控制时钟的某些功能状态。 ### 3. 函数实现 #### 3.1 延时函数 - `void Delay(uchar us)`: 用于延时2us的函数。 - `void delay1(uint ms)`: 用于延时指定毫秒数的函数。 #### 3.2 数据发送与接收 - `void STFS(uchar a)`: 用于向外部设备发送数据的函数。 - `uchar STJS(void)`: 用于从外部设备接收数据的函数。 - `uchar Read_KEY(void)`: 读取键盘输入的函数。 - `uchar Key_JM(void)`: 处理键盘输入并返回键值的函数。 - `uchar Key_JH(uchar a)`: 解析键盘键值的函数。 #### 3.3 显示与初始化 - `void int7279(void)`: 初始化7279芯片的函数。 - `void Disp(void)`: 负责更新数码管显示的函数。 ### 4. 关键点分析 - **宏定义**:通过这些宏定义,可以方便地进行数据类型的转换以及引脚配置。 - **数组定义**:数组`Led_buf`和`Key_buf`对于程序的功能至关重要,它们分别负责定义了数码管显示和键盘输入的映射关系。 - **变量定义**:多个`uchar`和`uint`类型的变量用于存储时间和状态信息。 - **函数实现**:延时函数用于精确控制程序执行的时间间隔;数据发送与接收函数用于与外部设备交互;初始化与显示函数用于启动和更新显示界面。 通过以上分析可以看出,这份代码实现了较为完整的数字电子钟功能,包括时间显示、键盘输入处理等,对于学习C语言编程以及嵌入式系统的初学者来说是一份非常有价值的资料。
#define uchar unsigned char
#define uint unsigned int
sbit CS=P1^0;
sbit CLK=P1^1;
sbit DATA=P1^2;
sbit KEY=P1^3;
sbit bj=P1^4;
uchar Led[8]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70}; //显缓区
uchar code Led_buf[]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B, //0--9
0x77,0x1F,0x4E,0x3D,0x4F,0x47, // A--F
0xFE,0xB0,0xED,0xF9,0xB3,0xDB,0x5F,0xF0,0xFF,0xFB, //0.--9.
0x00,0x08,0xff,0x01,0x37,0x0e,0x77,0x05,0x1d,0x4e}; //灭灯(0X1A),_,全亮,-,H,L,R,r,o,C
uchar code Key_buf[]={0x07,0x0F,0x0E,0x0D,0X17,0X16,0X15,0X1F,0X1E,0X1D,0x1C,0X14,0x0C,0x04,0x05,0x06}; //键值码
uchar code table1[]={31,31,29,31,30,31,30,31,31,30,31,30,31}; //闰年
uchar code table2[]={31,31,28,31,30,31,30,31,31,30,31,30,31}; //非闰年
uchar n;
uchar hh,mm,ss,nhh,nmm,nss,day,mon,week,mbhh,mbmm,mbss,mbmss;
uint year;
bit set=0,ct=0,ck=0,ckbj=0,ledd=0,mb=0,mb1=0;
//---------------------------------------------------7279子程序
void Delay(uchar us) //延时2us
{while(us) {--us;}}
void delay1(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<1827;j++)
}
void STFS(uchar a) //发送子程序
{
uchar j;
for (j=0;j<8;j++)
{
if(a&&0x80)DATA=1;
else DATA=0;
a=a<<1;
CLK=1;
Delay(4); //延时8us
CLK=0;
Delay(4);
}
DATA=0;
}
uchar STJS(void) //接受子程序
{
uchar i,bval=0;
for(i=0;i<8;i++)
{
CLK=1;
DATA=1;
Delay(4); //延时8us
bval<<=1;
if(DATA) bval|=0x01;
CLK=0;
剩余23页未读,继续阅读
- 粉丝: 0
- 资源: 17
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 将流行的 ruby faker gem 引入 Java.zip
- (源码)基于C#和ArcGIS Engine的房屋管理系统.zip
- (源码)基于C语言的Haribote操作系统项目.zip
- (源码)基于Spring Boot框架的秒杀系统.zip
- (源码)基于Qt框架的待办事项管理系统.zip
- 将 Java 8 的 lambda 表达式反向移植到 Java 7、6 和 5.zip
- (源码)基于JavaWeb的学生管理系统.zip
- (源码)基于C++和Google Test框架的数独游戏生成与求解系统.zip
- 学生提交的 JavaScript 20 项目.zip
- (源码)基于Blynk IOT框架的自动化继电器控制系统.zip