第九集 数码管 擎天柱
1 代码编写
1.1 虚拟数码管显示段码获取
点击AiCube工具栏的工具->字库生成工具
点击字库生成工具的LED数码管字库
数码管类型选择8段数码管
在设计数码管字模的选项中勾选需要显示的字符
点击确定
复制字库生成工具下面展示的段码
1.2 获取调试仿真接口的使用说明
点击AiCube工具栏的调试仿真接口->接口协议及帮助
本实验需要用到的接口使用说明
2 代码部分
io.h
- #ifndef __IO_H
- #define __IO_H
-
- #include "config.h" //调用头文件
-
- // #define 引脚名称 PXX的端口
-
- #define HC595_SER P34
- #define HC595_RCK P35
- #define HC595_SCK P32
-
- //---------------------------------595控制函数---------------------------------
- void TIMECOUNT_Task(void);
-
- void PLED_40(void);
- void SEG_PC(void);
-
- #endif
复制代码
io.c
- #include "io.h"
-
- u8 SEG_NUM[] =
- {
- 0x3F, /*'0', 0*/
- 0x06, /*'1', 1*/
- 0x5B, /*'2', 2*/
- 0x4F, /*'3', 3*/
- 0x66, /*'4', 4*/
- 0x6D, /*'5', 5*/
- 0x7D, /*'6', 6*/
- 0x07, /*'7', 7*/
- 0x7F, /*'8', 8*/
- 0x6F, /*'9', 9*/
- 0x77, /*'A', 10*/
- 0x7C, /*'B', 11*/
- 0x39, /*'C', 12*/
- 0x5E, /*'D', 13*/
- 0x79, /*'E', 14*/
- 0x71, /*'F', 15*/
- 0x40, /*'-', 16*/
- 0x00, /*' ', 17*/
- 0x80, /*'.', 18*/
- };
-
- u8 T_NUM[8] = {0X01, 0X02, 0X04, 0X08, 0X10, 0X20, 0X40, 0X80};
-
- u8 shi = 0;
- u8 fen = 0;
- u8 miao = 0;
-
- void TIMECOUNT_Task(void) {
- miao++;
- if (miao > 59) {
- miao = 0;
- fen++;
- if (fen > 59) {
- fen = 0;
- shi++;
- if (shi > 23)
- shi = 0;
- }
- }
- }
-
- u8 state_now = 0;
-
- void PLED_40(void) {
- u8 cod[8];
- cod[0] = 0x0f; // 表示开启P0-P3
- cod[1] = 0X01; // P0端口
- cod[2] = 0X01; // P1
- cod[3] = ~T_NUM[state_now]; // P2
- cod[4] = 0X01; // P3
- LED40_SendData(cod, 5);
-
- P2 = ~T_NUM[state_now];
-
- state_now++;
- if (state_now > 7)
- state_now = 0;
- }
-
- void SEG_PC(void) {
- u8 cod[8];
-
- cod[0] = SEG_NUM[shi / 10]; // 小时的十位数的数码管段码
- cod[1] = SEG_NUM[shi % 10];
- cod[2] = SEG_NUM[16]; // 数码管刷段码和位码
-
- cod[3] = SEG_NUM[fen / 10]; // 分钟
- cod[4] = SEG_NUM[fen % 10];
- cod[5] = SEG_NUM[16]; // 数码管刷段码和位码
-
- cod[6] = SEG_NUM[miao / 10]; // 分钟
- cod[7] = SEG_NUM[miao % 10];
-
- SEG7_ShowCode(cod);
- }
复制代码
task.c/Task_Comps[]
- static TASK_COMPONENTS Task_Comps[] = {
- // 状态 计数 周期 函数
- {0, 1000, 1000, TIMECOUNT_Task}, /* task 1 Period: 1000ms */
- {0, 1000, 1000, PLED_40}, /* task 2 Period: 1000ms */
- {0, 1000, 1000, SEG_PC}, /* task 3 Period: 1000ms */
-
- };
复制代码
3 查看运行结果
点击AiCube工具栏的调试仿真接口->8段数码管,调试仿真接口->擎天柱-LED-DIP40
|