led点阵显示电子钟的程序
#include<reg52.h></reg52.h> #include<absacc.h></absacc.h> #define num XBYTE[0Xcfa8] #define P8255 XBYTE[0xcfa3] #define PA XBYTE[0xcfa0] #define uint unsigned int #define uchar unsigned char uchar s1=0,s2=0,g1=0,g2=0; uchar sec=0,min=0,counter=0; uchar table[][8]={ {0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x00},/*"0",0*/ {0x00,0x00,0x10,0x70,0x10,0x10,0x7C,0x00},/*"1",1*/ {0x00,0x00,0x3E,0x42,0x04,0x3A,0x7E,0x00},/*"2",2*/ {0x00,0x00,0x3E,0x58,0x06,0x42,0x3C,0x00},/*"3",3*/ {0x00,0x04,0x1C,0x24,0x44,0x3C,0x0C,0x00},/*"4",4*/ {0x00,0x00,0x7E,0x40,0x7C,0x42,0x3C,0x00},/*"5",5*/ {0x00,0x00,0x3C,0x40,0x7C,0x42,0x3C,0x00},/*"6",6*/ {0x00,0x00,0x7E,0x44,0x18,0x10,0x10,0x00},/*"7",7*/ {0x00,0x00,0x7E,0x42,0x3C,0x42,0x3C,0x00},/*"8",8*/ {0x00,0x00,0x3C,0x42,0x3E,0x06,0x3C,0x00},/*"9",9*/ 从给定的文件信息来看,这段代码主要实现了基于单片机的LED点阵显示电子钟程序。接下来将从几个方面详细解析此程序的关键知识点。 ### 1. 包含的头文件及其作用 #### `#include <reg52.h>` `reg52.h` 是一个用于8051系列单片机的标准头文件,它定义了单片机内部的各种寄存器地址,例如定时器、串行口等。 #### `#include <absacc.h>` `absacc.h` 同样是8051系列单片机的一个头文件,主要用于支持绝对寻址方式,即可以直接通过地址访问内存中的数据。 ### 2. 宏定义及意义 #### 定义宏 ```c #define num XBYTE[0Xcfa8] #define P8255 XBYTE[0xcfa3] #define PA XBYTE[0xcfa0] ``` 这些宏定义允许开发者通过名字来访问特定的内存地址: - `num`: 代表一个地址为`0Xcfa8`的内存单元,可能用于存储数据。 - `P8255`: 代表地址为`0xcfa3`的内存单元,可能是与外部设备(如8255并行接口芯片)交互的端口。 - `PA`: 代表地址为`0xcfa0`的内存单元,可能是控制LED点阵显示的数据端口。 ### 3. 数据类型定义 ```c #define uint unsigned int #define uchar unsigned char ``` 这里定义了两个自定义的数据类型: - `uint`: 无符号整型,通常用于表示非负整数。 - `uchar`: 无符号字符型,通常用于表示小范围的非负数值。 ### 4. 变量定义 程序中定义了一些变量,用于计时和显示控制: - `uchar s1=0,s2=0,g1=0,g2=0;`: 分别表示分钟的十位和个位,以及秒的十位和个位。 - `uchar sec=0,min=0,counter=0;`: 分别表示秒数、分钟数和计数器。 ### 5. LED点阵显示图案 在程序中,定义了一个二维数组 `table`,用于存储数字0-9的LED点阵显示图案,每个数字的显示由8×8的矩阵构成。例如: - 数字“0”对应的显示代码为 `{0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x00}`。 - 数字“1”对应的显示代码为 `{0x00,0x00,0x10,0x70,0x10,0x10,0x7C,0x00}`。 ### 6. 函数实现 #### 延迟函数 `delay(uint xms)` 该函数用于实现延时功能,确保LED点阵的刷新频率足够低,以避免闪烁。 #### 显示控制函数 `fun()` 此函数用于控制LED点阵的显示逻辑,包括逐个显示各个数字,并利用延迟函数保证刷新速度合适。 #### 时间更新函数 `get()` 此函数用于更新当前时间的各个位数,以便于显示正确的小时、分钟和秒数。 #### 主函数 `main()` 初始化定时器、中断等,并设置主循环以持续更新显示。 #### 定时器中断服务函数 `timer1_int()` 这个函数作为定时器1的中断服务程序,用于每秒钟增加时间,从而实现计时功能。 ### 总结 本程序通过单片机实现了一个简单的LED点阵显示电子钟,其中包含了定时器的配置、中断处理、显示逻辑控制等关键环节。通过对上述知识点的理解,可以进一步学习如何使用单片机进行更复杂的应用开发。
#include<absacc.h></absacc.h>
#define num XBYTE[0Xcfa8]
#define P8255 XBYTE[0xcfa3]
#define PA XBYTE[0xcfa0]
#define uint unsigned int
#define uchar unsigned char
uchar s1=0,s2=0,g1=0,g2=0;
uchar sec=0,min=0,counter=0;
uchar table[][8]={
{0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x00},/*"0",0*/
{0x00,0x00,0x10,0x70,0x10,0x10,0x7C,0x00},/*"1",1*/
{0x00,0x00,0x3E,0x42,0x04,0x3A,0x7E,0x00},/*"2",2*/
{0x00,0x00,0x3E,0x58,0x06,0x42,0x3C,0x00},/*"3",3*/
{0x00,0x04,0x1C,0x24,0x44,0x3C,0x0C,0x00},/*"4",4*/
{0x00,0x00,0x7E,0x40,0x7C,0x42,0x3C,0x00},/*"5",5*/
{0x00,0x00,0x3C,0x40,0x7C,0x42,0x3C,0x00},/*"6",6*/
{0x00,0x00,0x7E,0x44,0x18,0x10,0x10,0x00},/*"7",7*/
{0x00,0x00,0x7E,0x42,0x3C,0x42,0x3C,0x00},/*"8",8*/
{0x00,0x00,0x3C,0x42,0x3E,0x06,0x3C,0x00},/*"9",9*/
};
void delay(uint xms)
{ uint i,j;
for(i=xms;i>0;i--)
for(j=55;j>0;j--);
- soni222c2013-03-31缺少电路图,光有程序,理解起来比较困难。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 计算机毕业设计:python+爬虫+cnki网站爬
- nyakumi-lewd-snack-3-4k_720p.7z.002
- 现在微信小程序能用的mqtt.min.js
- 基于MPC的非线性摆锤系统轨迹跟踪控制matlab仿真,包括程序中文注释,仿真操作步骤
- 基于MATLAB的ITS信道模型数值模拟仿真,包括程序中文注释,仿真操作步骤
- 基于Java、JavaScript、CSS的电子产品商城设计与实现源码
- 基于Vue 2的zjc项目设计源码,适用于赶项目需求
- 基于跨语言统一的C++头文件设计源码开发方案
- 基于MindSpore 1.3的T-GCNTemporal Graph Convolutional Network设计源码
- 基于Java的贝塞尔曲线绘制酷炫轮廓背景设计源码