交给生产
This commit is contained in:
commit
21bc991c48
39
.vscode/c_cpp_properties.json
vendored
Normal file
39
.vscode/c_cpp_properties.json
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Target 1",
|
||||
"includePath": [
|
||||
"e:\\my code all\\stc\\Motorcontroller\\myinc",
|
||||
"D:\\Keil_v5\\C51\\INC",
|
||||
"e:\\my code all\\stc\\Motorcontroller",
|
||||
"e:\\my code all\\stc\\Motorcontroller\\mycode"
|
||||
],
|
||||
"defines": [
|
||||
"__C51__",
|
||||
"__VSCODE_C51__",
|
||||
"reentrant=",
|
||||
"compact=",
|
||||
"small=",
|
||||
"large=",
|
||||
"data=",
|
||||
"idata=",
|
||||
"pdata=",
|
||||
"bdata=",
|
||||
"xdata=",
|
||||
"code=",
|
||||
"bit=char",
|
||||
"sbit=char",
|
||||
"sfr=char",
|
||||
"sfr16=int",
|
||||
"sfr32=int",
|
||||
"interrupt=",
|
||||
"using=",
|
||||
"_at_=",
|
||||
"_priority_=",
|
||||
"_task_="
|
||||
],
|
||||
"intelliSenseMode": "${default}"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
34
.vscode/keil-assistant.log
vendored
Normal file
34
.vscode/keil-assistant.log
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
[info] Log at : 2023/3/14|08:48:46|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/14|09:21:10|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/14|09:32:32|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/14|11:05:08|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/14|11:30:16|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/14|13:14:03|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/15|08:27:33|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/16|14:53:18|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/17|08:42:14|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/17|10:35:48|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/17|16:54:22|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/18|08:31:18|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/20|08:28:25|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/21|08:29:01|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/22|08:33:44|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/22|16:38:07|GMT+0800
|
||||
|
||||
[info] Log at : 2023/3/23|08:37:05|GMT+0800
|
||||
|
15
.vscode/settings.json
vendored
Normal file
15
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"UART.C": "cpp",
|
||||
"gpio.h": "c",
|
||||
"TM5160.C": "cpp",
|
||||
"i2c.h": "c",
|
||||
"timer.h": "c",
|
||||
"tm1650.h": "c",
|
||||
"delay.h": "c",
|
||||
"config.h": "c",
|
||||
"common.h": "c",
|
||||
"eeprom.h": "c",
|
||||
"stdio.h": "c"
|
||||
}
|
||||
}
|
14
.vscode/uv4.log
vendored
Normal file
14
.vscode/uv4.log
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
Build target 'Target 1'
|
||||
compiling timer.c...
|
||||
compiling common.c...
|
||||
linking...
|
||||
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
|
||||
SEGMENT: ?PR?_PRINTSTRING1?UART
|
||||
|
||||
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
|
||||
SEGMENT: ?PR?_TM1650_PRINT_SMG3?TM1650
|
||||
|
||||
Program Size: data=100.1 xdata=64 code=8087
|
||||
creating hex file from ".\Objects\Motorcontroller"...
|
||||
".\Objects\Motorcontroller" - 0 Error(s), 2 Warning(s).
|
||||
Build Time Elapsed: 00:00:00
|
1
.vscode/uv4.log.lock
vendored
Normal file
1
.vscode/uv4.log.lock
vendored
Normal file
@ -0,0 +1 @@
|
||||
2023/3/23 16:31:25
|
155
Listings/EEPROM.lst
Normal file
155
Listings/EEPROM.lst
Normal file
@ -0,0 +1,155 @@
|
||||
C51 COMPILER V9.60.0.0 EEPROM 03/23/2023 13:25:30 PAGE 1
|
||||
|
||||
|
||||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE EEPROM
|
||||
OBJECT MODULE PLACED IN .\Objects\EEPROM.obj
|
||||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\EEPROM.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXT
|
||||
-END PRINT(.\Listings\EEPROM.lst) TABS(2) OBJECT(.\Objects\EEPROM.obj)
|
||||
|
||||
line level source
|
||||
|
||||
1 /*---------------------------------------------------------------------*/
|
||||
2 /* --- STC MCU Limited ------------------------------------------------*/
|
||||
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
9 /* --- QQ: 800003751 -------------------------------------------------*/
|
||||
10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
11 /*---------------------------------------------------------------------*/
|
||||
12
|
||||
13 /*************** 功能说明 ****************
|
||||
14
|
||||
15 本文件为STC8系列的内置EEPROM读写程序,用户几乎可以不修改这个程序.
|
||||
16
|
||||
17 ******************************************/
|
||||
18
|
||||
19 #include "config.h"
|
||||
20 #include "eeprom.h"
|
||||
21
|
||||
22 //========================================================================
|
||||
23 // 函数: void ISP_Disable(void)
|
||||
24 // 描述: 禁止访问ISP/IAP.
|
||||
25 // 参数: non.
|
||||
26 // 返回: non.
|
||||
27 // 版本: V1.0, 2012-10-22
|
||||
28 //========================================================================
|
||||
29 void DisableEEPROM(void)
|
||||
30 {
|
||||
31 1 IAP_CONTR = 0; //禁止IAP操作
|
||||
32 1 IAP_CMD = 0; //去除IAP命令
|
||||
33 1 IAP_TRIG = 0; //防止IAP命令误触发
|
||||
34 1 IAP_ADDRH = 0xff; //清0地址高字节
|
||||
35 1 IAP_ADDRL = 0xff; //清0地址低字节,指向非EEPROM区,防止误操作
|
||||
36 1 }
|
||||
37
|
||||
38 //========================================================================
|
||||
39 // 函数: void EEPROM_Trig(void)
|
||||
40 // 描述: 触发EEPROM操作.
|
||||
41 // 参数: none.
|
||||
42 // 返回: none.
|
||||
43 // 版本: V1.0, 2014-6-30
|
||||
44 //========================================================================
|
||||
45 void EEPROM_Trig(void)
|
||||
46 {
|
||||
47 1 F0 = EA; //保存全局中断
|
||||
48 1 EA = 0; //禁止中断, 避免触发命令无效
|
||||
49 1 IAP_TRIG = 0x5A;
|
||||
50 1 IAP_TRIG = 0xA5; //先送5AH,再送A5H到IAP触发寄存器,每次都需要如此
|
||||
51 1 //送完A5H后,IAP命令立即被触发启动
|
||||
52 1 //CPU等待IAP完成后,才会继续执行程序。
|
||||
53 1 _nop_();
|
||||
54 1 _nop_();
|
||||
C51 COMPILER V9.60.0.0 EEPROM 03/23/2023 13:25:30 PAGE 2
|
||||
|
||||
55 1 EA = F0; //恢复全局中断
|
||||
56 1 }
|
||||
57
|
||||
58 //========================================================================
|
||||
59 // 函数: void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number)
|
||||
60 // 描述: 从指定EEPROM首地址读出n个字节放指定的缓冲.
|
||||
61 // 参数: EE_address: 读出EEPROM的首地址.
|
||||
62 // DataAddress: 读出数据放缓冲的首地址.
|
||||
63 // number: 读出的字节长度.
|
||||
64 // 返回: non.
|
||||
65 // 版本: V1.0, 2012-10-22
|
||||
66 //========================================================================
|
||||
67 void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number)
|
||||
68 {
|
||||
69 1 IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够
|
||||
70 1 IAP_READ(); //送字节读命令,命令不需改变时,不需重新送命令
|
||||
71 1 do
|
||||
72 1 {
|
||||
73 2 IAP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址)
|
||||
74 2 IAP_ADDRL = EE_address % 256; //送地址低字节
|
||||
75 2 EEPROM_Trig(); //触发EEPROM操作
|
||||
76 2 *DataAddress = IAP_DATA; //读出的数据送往
|
||||
77 2 EE_address++;
|
||||
78 2 DataAddress++;
|
||||
79 2 }while(--number);
|
||||
80 1
|
||||
81 1 DisableEEPROM();
|
||||
82 1 }
|
||||
83
|
||||
84 //========================================================================
|
||||
85 // 函数: void EEPROM_SectorErase(u16 EE_address)
|
||||
86 // 描述: 把指定地址的EEPROM扇区擦除.
|
||||
87 // 参数: EE_address: 要擦除的扇区EEPROM的地址.
|
||||
88 // 返回: non.
|
||||
89 // 版本: V1.0, 2013-5-10
|
||||
90 //========================================================================
|
||||
91 void EEPROM_SectorErase(u16 EE_address)
|
||||
92 {
|
||||
93 1 IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够
|
||||
94 1 IAP_ERASE(); //宏调用, 送扇区擦除命令,命令不需改变时,不需重新送命令
|
||||
95 1 //只有扇区擦除,没有字节擦除,512字节/扇区。
|
||||
96 1 //扇区中任意一个字节地址都是扇区地址。
|
||||
97 1 IAP_ADDRH = EE_address / 256; //送扇区地址高字节(地址需要改变时才需重新送地址)
|
||||
98 1 IAP_ADDRL = EE_address % 256; //送扇区地址低字节
|
||||
99 1 EEPROM_Trig(); //触发EEPROM操作
|
||||
100 1 DisableEEPROM(); //禁止EEPROM操作
|
||||
101 1 }
|
||||
102
|
||||
103 //========================================================================
|
||||
104 // 函数: void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number)
|
||||
105 // 描述: 把缓冲的n个字节写入指定首地址的EEPROM.
|
||||
106 // 参数: EE_address: 写入EEPROM的首地址.
|
||||
107 // DataAddress: 写入源数据的缓冲的首地址.
|
||||
108 // number: 写入的字节长度.
|
||||
109 // 返回: non.
|
||||
110 // 版本: V1.0, 2012-10-22
|
||||
111 //========================================================================
|
||||
112 void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number)
|
||||
113 {
|
||||
114 1 IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够
|
||||
115 1 IAP_WRITE(); //宏调用, 送字节写命令
|
||||
116 1 do
|
||||
C51 COMPILER V9.60.0.0 EEPROM 03/23/2023 13:25:30 PAGE 3
|
||||
|
||||
117 1 {
|
||||
118 2 IAP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址)
|
||||
119 2 IAP_ADDRL = EE_address % 256; //送地址低字节
|
||||
120 2 IAP_DATA = *DataAddress; //送数据到IAP_DATA,只有数据改变时才需重新送
|
||||
121 2 EEPROM_Trig(); //触发EEPROM操作
|
||||
122 2 EE_address++; //下一个地址
|
||||
123 2 DataAddress++; //下一个数据
|
||||
124 2 }while(--number); //直到结束
|
||||
125 1 DisableEEPROM();
|
||||
126 1 }
|
||||
127
|
||||
|
||||
|
||||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||||
CODE SIZE = 162 ----
|
||||
CONSTANT SIZE = ---- ----
|
||||
XDATA SIZE = ---- ----
|
||||
PDATA SIZE = ---- ----
|
||||
DATA SIZE = ---- 14
|
||||
IDATA SIZE = ---- ----
|
||||
BIT SIZE = ---- ----
|
||||
END OF MODULE INFORMATION.
|
||||
|
||||
|
||||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
179
Listings/GPIO.lst
Normal file
179
Listings/GPIO.lst
Normal file
@ -0,0 +1,179 @@
|
||||
C51 COMPILER V9.60.0.0 GPIO 03/23/2023 13:25:30 PAGE 1
|
||||
|
||||
|
||||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE GPIO
|
||||
OBJECT MODULE PLACED IN .\Objects\GPIO.obj
|
||||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\GPIO.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEN
|
||||
-D PRINT(.\Listings\GPIO.lst) TABS(2) OBJECT(.\Objects\GPIO.obj)
|
||||
|
||||
line level source
|
||||
|
||||
1 /*---------------------------------------------------------------------*/
|
||||
2 /* --- STC MCU Limited ------------------------------------------------*/
|
||||
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
9 /* --- QQ: 800003751 -------------------------------------------------*/
|
||||
10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
11 /*---------------------------------------------------------------------*/
|
||||
12
|
||||
13 /*************** 功能说明 ****************
|
||||
14
|
||||
15 本文件为STC8系列的端口初始化程序,用户几乎可以不修改这个程序.
|
||||
16
|
||||
17 ******************************************/
|
||||
18
|
||||
19 #include "GPIO.h"
|
||||
20 //========================================================================
|
||||
21 // 函数: u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
|
||||
22 // 描述: 初始化IO口.
|
||||
23 // 参数: GPIOx: 结构参数,请参考timer.h里的定义.
|
||||
24 // 返回: 成功返回0, 空操作返回1,错误返回2.
|
||||
25 // 版本: V1.0, 2012-10-22
|
||||
26 //========================================================================
|
||||
27 u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
|
||||
28 {
|
||||
29 1 if (GPIO > GPIO_P7)
|
||||
30 1 return 1; // 空操作
|
||||
31 1 if (GPIOx->Mode > GPIO_OUT_PP)
|
||||
32 1 return 2; // 错误
|
||||
33 1 if (GPIO == GPIO_P0)
|
||||
34 1 {
|
||||
35 2 if (GPIOx->Mode == GPIO_PullUp)
|
||||
36 2 P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
37 2 if (GPIOx->Mode == GPIO_HighZ)
|
||||
38 2 P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
39 2 if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
40 2 P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; // 开漏输出
|
||||
41 2 if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
42 2 P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; // 推挽输出
|
||||
43 2 }
|
||||
44 1 if (GPIO == GPIO_P1)
|
||||
45 1 {
|
||||
46 2 if (GPIOx->Mode == GPIO_PullUp)
|
||||
47 2 P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
48 2 if (GPIOx->Mode == GPIO_HighZ)
|
||||
49 2 P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
50 2 if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
51 2 P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; // 开漏输出
|
||||
52 2 if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
53 2 P1M1 &= ~GPIOx->Pin, P1M0 |= GPIOx->Pin; // 推挽输出
|
||||
54 2 }
|
||||
C51 COMPILER V9.60.0.0 GPIO 03/23/2023 13:25:30 PAGE 2
|
||||
|
||||
55 1 if (GPIO == GPIO_P2)
|
||||
56 1 {
|
||||
57 2 if (GPIOx->Mode == GPIO_PullUp)
|
||||
58 2 P2M1 &= ~GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
59 2 if (GPIOx->Mode == GPIO_HighZ)
|
||||
60 2 P2M1 |= GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
61 2 if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
62 2 P2M1 |= GPIOx->Pin, P2M0 |= GPIOx->Pin; // 开漏输出
|
||||
63 2 if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
64 2 P2M1 &= ~GPIOx->Pin, P2M0 |= GPIOx->Pin; // 推挽输出
|
||||
65 2 }
|
||||
66 1 if (GPIO == GPIO_P3)
|
||||
67 1 {
|
||||
68 2 if (GPIOx->Mode == GPIO_PullUp)
|
||||
69 2 P3M1 &= ~GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
70 2 if (GPIOx->Mode == GPIO_HighZ)
|
||||
71 2 P3M1 |= GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
72 2 if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
73 2 P3M1 |= GPIOx->Pin, P3M0 |= GPIOx->Pin; // 开漏输出
|
||||
74 2 if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
75 2 P3M1 &= ~GPIOx->Pin, P3M0 |= GPIOx->Pin; // 推挽输出
|
||||
76 2 }
|
||||
77 1 if (GPIO == GPIO_P4)
|
||||
78 1 {
|
||||
79 2 if (GPIOx->Mode == GPIO_PullUp)
|
||||
80 2 P4M1 &= ~GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
81 2 if (GPIOx->Mode == GPIO_HighZ)
|
||||
82 2 P4M1 |= GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
83 2 if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
84 2 P4M1 |= GPIOx->Pin, P4M0 |= GPIOx->Pin; // 开漏输出
|
||||
85 2 if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
86 2 P4M1 &= ~GPIOx->Pin, P4M0 |= GPIOx->Pin; // 推挽输出
|
||||
87 2 }
|
||||
88 1 if (GPIO == GPIO_P5)
|
||||
89 1 {
|
||||
90 2 if (GPIOx->Mode == GPIO_PullUp)
|
||||
91 2 P5M1 &= ~GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
92 2 if (GPIOx->Mode == GPIO_HighZ)
|
||||
93 2 P5M1 |= GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
94 2 if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
95 2 P5M1 |= GPIOx->Pin, P5M0 |= GPIOx->Pin; // 开漏输出
|
||||
96 2 if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
97 2 P5M1 &= ~GPIOx->Pin, P5M0 |= GPIOx->Pin; // 推挽输出
|
||||
98 2 }
|
||||
99 1 if (GPIO == GPIO_P6)
|
||||
100 1 {
|
||||
101 2 if (GPIOx->Mode == GPIO_PullUp)
|
||||
102 2 P6M1 &= ~GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
103 2 if (GPIOx->Mode == GPIO_HighZ)
|
||||
104 2 P6M1 |= GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
105 2 if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
106 2 P6M1 |= GPIOx->Pin, P6M0 |= GPIOx->Pin; // 开漏输出
|
||||
107 2 if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
108 2 P6M1 &= ~GPIOx->Pin, P6M0 |= GPIOx->Pin; // 推挽输出
|
||||
109 2 }
|
||||
110 1 if (GPIO == GPIO_P7)
|
||||
111 1 {
|
||||
112 2 if (GPIOx->Mode == GPIO_PullUp)
|
||||
113 2 P7M1 &= ~GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
114 2 if (GPIOx->Mode == GPIO_HighZ)
|
||||
115 2 P7M1 |= GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
116 2 if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
C51 COMPILER V9.60.0.0 GPIO 03/23/2023 13:25:30 PAGE 3
|
||||
|
||||
117 2 P7M1 |= GPIOx->Pin, P7M0 |= GPIOx->Pin; // 开漏输出
|
||||
118 2 if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
119 2 P7M1 &= ~GPIOx->Pin, P7M0 |= GPIOx->Pin; // 推挽输出
|
||||
120 2 }
|
||||
121 1 return 0; // 成功
|
||||
122 1 }
|
||||
123 /******************** IO口配置 ********************/
|
||||
124 void GPIO_config(void)
|
||||
125 {
|
||||
126 1 GPIO_InitTypeDef GPIO_InitStructure; // 结构定义
|
||||
127 1
|
||||
128 1 GPIO_InitStructure.Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; // 指定要初始
|
||||
-化 或操作p32
|
||||
129 1 GPIO_InitStructure.Mode = GPIO_PullUp; // 指定IO的输
|
||||
-入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
|
||||
130 1 GPIO_Inilize(GPIO_P3, &GPIO_InitStructure); // 初始化
|
||||
131 1
|
||||
132 1 GPIO_InitStructure.Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4; // 指定要初始化 或操作输出使能
|
||||
133 1 GPIO_InitStructure.Mode = GPIO_OUT_PP; // 指定IO的输入或输出方式,GPIO_PullUp,G
|
||||
-PIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
|
||||
134 1 GPIO_Inilize(GPIO_P1, &GPIO_InitStructure); // 初始化
|
||||
135 1
|
||||
136 1 GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; // 指定要初始化 或操作输出
|
||||
-使能
|
||||
137 1 GPIO_InitStructure.Mode = GPIO_PullUp; // 指定IO的输入或输出方式,
|
||||
-GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
|
||||
138 1 GPIO_Inilize(GPIO_P1, &GPIO_InitStructure); // 初始化
|
||||
139 1
|
||||
140 1 GPIO_InitStructure.Pin = GPIO_Pin_4; // 指定要初始化 或操作输出使能
|
||||
141 1 GPIO_InitStructure.Mode = GPIO_PullUp; // 指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_
|
||||
-OD,GPIO_OUT_PP
|
||||
142 1 GPIO_Inilize(GPIO_P5, &GPIO_InitStructure); // 初始化
|
||||
143 1 EN=1;
|
||||
144 1 }
|
||||
145
|
||||
|
||||
|
||||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||||
CODE SIZE = 683 ----
|
||||
CONSTANT SIZE = ---- ----
|
||||
XDATA SIZE = ---- ----
|
||||
PDATA SIZE = ---- ----
|
||||
DATA SIZE = ---- 2
|
||||
IDATA SIZE = ---- ----
|
||||
BIT SIZE = ---- ----
|
||||
END OF MODULE INFORMATION.
|
||||
|
||||
|
||||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
288
Listings/I2C.lst
Normal file
288
Listings/I2C.lst
Normal file
@ -0,0 +1,288 @@
|
||||
C51 COMPILER V9.60.0.0 I2C 03/14/2023 09:20:44 PAGE 1
|
||||
|
||||
|
||||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE I2C
|
||||
OBJECT MODULE PLACED IN .\Objects\I2C.obj
|
||||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\I2C.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND
|
||||
- PRINT(.\Listings\I2C.lst) TABS(2) OBJECT(.\Objects\I2C.obj)
|
||||
|
||||
line level source
|
||||
|
||||
1 /*---------------------------------------------------------------------*/
|
||||
2 /* --- STC MCU Limited ------------------------------------------------*/
|
||||
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
9 /* --- QQ: 800003751 -------------------------------------------------*/
|
||||
10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
11 /*---------------------------------------------------------------------*/
|
||||
12
|
||||
13 #include "I2C.h"
|
||||
14
|
||||
15 u8 I2C_BUF_type I2C_RxBuffer[I2C_BUF_LENTH];
|
||||
16
|
||||
17 #define SLAW 0xA2
|
||||
18 #define SLAR 0xA3
|
||||
19
|
||||
20 //========================================================================
|
||||
21 // 函数: void I2C_Init(I2C_InitTypeDef *I2Cx)
|
||||
22 // 描述: I2C初始化程序.
|
||||
23 // 参数: I2Cx: 结构参数,请参考I2C.h里的定义.
|
||||
24 // 返回: none.
|
||||
25 // 版本: V1.0, 2012-11-22
|
||||
26 //========================================================================
|
||||
27 void I2C_Init(I2C_InitTypeDef *I2Cx)
|
||||
28 {
|
||||
29 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */
|
||||
30 1
|
||||
31 1 if(I2Cx->I2C_Mode == I2C_Mode_Master)
|
||||
32 1 {
|
||||
33 2 I2C_Master(); //设为主机
|
||||
34 2 I2CMSST = 0x00; //清除I2C主机状态寄存器
|
||||
35 2 I2C_Master_Inturrupt(I2Cx->I2C_MS_Interrupt);
|
||||
36 2 I2C_SetSpeed(I2Cx->I2C_Speed);
|
||||
37 2 if(I2Cx->I2C_MS_WDTA == ENABLE) I2C_WDTA_EN(); //使能自动发送
|
||||
38 2 else I2C_WDTA_DIS(); //禁止自动发送
|
||||
39 2 }
|
||||
40 1 else
|
||||
41 1 {
|
||||
42 2 I2C_Slave(); //设为从机
|
||||
43 2 I2CSLST = 0x00; //清除I2C从机状态寄存器
|
||||
44 2 if(I2Cx->I2C_SL_ESTAI == ENABLE) I2C_ESTAI_EN(); //使能从机接收START信号中断
|
||||
45 2 else I2C_ESTAI_DIS(); //禁止从机接收START信号中断
|
||||
46 2 if(I2Cx->I2C_SL_ERXI == ENABLE) I2C_ERXI_EN(); //使能从机接收1字节数据中断
|
||||
47 2 else I2C_ERXI_DIS(); //禁止从机接收1字节数据中断
|
||||
48 2 if(I2Cx->I2C_SL_ETXI == ENABLE) I2C_ETXI_EN(); //使能从机发送1字节数据中断
|
||||
49 2 else I2C_ETXI_DIS(); //禁止从机发送1字节数据中断
|
||||
50 2 if(I2Cx->I2C_SL_ESTOI == ENABLE) I2C_ESTOI_EN(); //使能从机接收STOP信号中断
|
||||
51 2 else I2C_ESTOI_DIS(); //禁止从机接收STOP信号中断
|
||||
52 2 I2C_Address(I2Cx->I2C_SL_ADR);
|
||||
53 2 if(I2Cx->I2C_SL_MA == ENABLE) I2C_MATCH_EN(); //从机地址比较功能,只接受相匹配地址
|
||||
54 2 else I2C_MATCH_DIS(); //禁止从机地址比较功能,接受所有设备地址
|
||||
C51 COMPILER V9.60.0.0 I2C 03/14/2023 09:20:44 PAGE 2
|
||||
|
||||
55 2 }
|
||||
56 1
|
||||
57 1 P_SW2 = (P_SW2 & ~(3<<4)) | I2Cx->I2C_IoUse;
|
||||
58 1 I2C_Function(I2Cx->I2C_Enable);
|
||||
59 1
|
||||
60 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */
|
||||
61 1 }
|
||||
62
|
||||
63 //========================================================================
|
||||
64 // 函数: void Wait (void)
|
||||
65 // 描述: 等待主机模式I2C控制器执行完成I2CMSCR.
|
||||
66 // 参数: mode: 指定模式, 取值 I2C_Mode_Master 或 I2C_Mode_Slave.
|
||||
67 // 返回: none.
|
||||
68 // 版本: V1.0, 2012-11-22
|
||||
69 //========================================================================
|
||||
70 void Wait()
|
||||
71 {
|
||||
72 1 while (!(I2CMSST & 0x40));
|
||||
73 1 I2CMSST &= ~0x40;
|
||||
74 1 }
|
||||
75
|
||||
76 //========================================================================
|
||||
77 // 函数: void Start (void)
|
||||
78 // 描述: I2C总线起始函数.
|
||||
79 // 参数: none.
|
||||
80 // 返回: none.
|
||||
81 // 版本: V1.0, 2020-09-15
|
||||
82 //========================================================================
|
||||
83 void Start()
|
||||
84 {
|
||||
85 1 I2CMSCR = 0x01; //发送START命令
|
||||
86 1 Wait();
|
||||
87 1 }
|
||||
88
|
||||
89 //========================================================================
|
||||
90 // 函数: void SendData (char dat)
|
||||
91 // 描述: I2C发送一个字节数据函数.
|
||||
92 // 参数: 发送的数据.
|
||||
93 // 返回: none.
|
||||
94 // 版本: V1.0, 2020-09-15
|
||||
95 //========================================================================
|
||||
96 void SendData(char dat)
|
||||
97 {
|
||||
98 1 I2CTXD = dat; //写数据到数据缓冲区
|
||||
99 1 I2CMSCR = 0x02; //发送SEND命令
|
||||
100 1 Wait();
|
||||
101 1 }
|
||||
102
|
||||
103 //========================================================================
|
||||
104 // 函数: void RecvACK (void)
|
||||
105 // 描述: I2C获取ACK函数.
|
||||
106 // 参数: none.
|
||||
107 // 返回: none.
|
||||
108 // 版本: V1.0, 2020-09-15
|
||||
109 //========================================================================
|
||||
110 void RecvACK()
|
||||
111 {
|
||||
112 1 I2CMSCR = 0x03; //发送读ACK命令
|
||||
113 1 Wait();
|
||||
114 1 }
|
||||
115
|
||||
116 //========================================================================
|
||||
C51 COMPILER V9.60.0.0 I2C 03/14/2023 09:20:44 PAGE 3
|
||||
|
||||
117 // 函数: char RecvData (void)
|
||||
118 // 描述: I2C读取一个字节数据函数.
|
||||
119 // 参数: none.
|
||||
120 // 返回: 读取数据.
|
||||
121 // 版本: V1.0, 2020-09-15
|
||||
122 //========================================================================
|
||||
123 char RecvData()
|
||||
124 {
|
||||
125 1 I2CMSCR = 0x04; //发送RECV命令
|
||||
126 1 Wait();
|
||||
127 1 return I2CRXD;
|
||||
128 1 }
|
||||
129
|
||||
130 //========================================================================
|
||||
131 // 函数: void SendACK (void)
|
||||
132 // 描述: I2C发送ACK函数.
|
||||
133 // 参数: none.
|
||||
134 // 返回: none.
|
||||
135 // 版本: V1.0, 2020-09-15
|
||||
136 //========================================================================
|
||||
137 void SendACK()
|
||||
138 {
|
||||
139 1 I2CMSST = 0x00; //设置ACK信号
|
||||
140 1 I2CMSCR = 0x05; //发送ACK命令
|
||||
141 1 Wait();
|
||||
142 1 }
|
||||
143
|
||||
144 //========================================================================
|
||||
145 // 函数: void SendNAK (void)
|
||||
146 // 描述: I2C发送NAK函数.
|
||||
147 // 参数: none.
|
||||
148 // 返回: none.
|
||||
149 // 版本: V1.0, 2020-09-15
|
||||
150 //========================================================================
|
||||
151 void SendNAK()
|
||||
152 {
|
||||
153 1 I2CMSST = 0x01; //设置NAK信号
|
||||
154 1 I2CMSCR = 0x05; //发送ACK命令
|
||||
155 1 Wait();
|
||||
156 1 }
|
||||
157
|
||||
158 //========================================================================
|
||||
159 // 函数: void Stop (void)
|
||||
160 // 描述: I2C总线停止函数.
|
||||
161 // 参数: none.
|
||||
162 // 返回: none.
|
||||
163 // 版本: V1.0, 2020-09-15
|
||||
164 //========================================================================
|
||||
165 void Stop()
|
||||
166 {
|
||||
167 1 I2CMSCR = 0x06; //发送STOP命令
|
||||
168 1 Wait();
|
||||
169 1 }
|
||||
170
|
||||
171 //========================================================================
|
||||
172 // 函数: void WriteNbyte(u8 addr, u8 *p, u8 number)
|
||||
173 // 描述: I2C写入数据函数.
|
||||
174 // 参数: addr: 指定地址, *p写入数据存储位置, number写入数据个数.
|
||||
175 // 返回: none.
|
||||
176 // 版本: V1.0, 2020-09-15
|
||||
177 //========================================================================
|
||||
178 void WriteNbyte(u8 addr, u8 *p, u8 number) /* WordAddress,First Data Address,Byte lenth */
|
||||
C51 COMPILER V9.60.0.0 I2C 03/14/2023 09:20:44 PAGE 4
|
||||
|
||||
179 {
|
||||
180 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */
|
||||
181 1 Start(); //发送起始命令
|
||||
182 1 SendData(SLAW); //发送设备地址+写命令
|
||||
183 1 RecvACK();
|
||||
184 1 SendData(addr); //发送存储地址
|
||||
185 1 RecvACK();
|
||||
186 1 do
|
||||
187 1 {
|
||||
188 2 SendData(*p++);
|
||||
189 2 RecvACK();
|
||||
190 2 }
|
||||
191 1 while(--number);
|
||||
192 1 Stop(); //发送停止命令
|
||||
193 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */
|
||||
194 1 }
|
||||
195
|
||||
196 //========================================================================
|
||||
197 // 函数: void ReadNbyte(u8 addr, u8 *p, u8 number)
|
||||
198 // 描述: I2C读取数据函数.
|
||||
199 // 参数: addr: 指定地址, *p读取数据存储位置, number读取数据个数.
|
||||
200 // 返回: none.
|
||||
201 // 版本: V1.0, 2020-09-15
|
||||
202 //========================================================================
|
||||
203 void ReadNbyte(u8 addr, u8 *p, u8 number) /* WordAddress,First Data Address,Byte lenth */
|
||||
204 {
|
||||
205 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */
|
||||
206 1 Start(); //发送起始命令
|
||||
207 1 SendData(SLAW); //发送设备地址+写命令
|
||||
208 1 RecvACK();
|
||||
209 1 SendData(addr); //发送存储地址
|
||||
210 1 RecvACK();
|
||||
211 1 Start(); //发送起始命令
|
||||
212 1 SendData(SLAR); //发送设备地址+读命令
|
||||
213 1 RecvACK();
|
||||
214 1 do
|
||||
215 1 {
|
||||
216 2 *p = RecvData();
|
||||
217 2 p++;
|
||||
218 2 if(number != 1) SendACK(); //send ACK
|
||||
219 2 }
|
||||
220 1 while(--number);
|
||||
221 1 SendNAK(); //send no ACK
|
||||
222 1 Stop(); //发送停止命令
|
||||
223 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */
|
||||
224 1 }
|
||||
225
|
||||
226 //========================================================================
|
||||
227 // 函数: void I2C_Isr (void) interrupt I2C_VECTOR
|
||||
228 // 描述: I2C中断函数.
|
||||
229 // 参数: none.
|
||||
230 // 返回: none.
|
||||
231 // 版本: V1.0, 2020-09-15
|
||||
232 //========================================================================
|
||||
233 void I2C_Isr() interrupt I2C_VECTOR
|
||||
234 {
|
||||
235 1 char store;
|
||||
236 1
|
||||
237 1 store = P_SW2;
|
||||
238 1 P_SW2 |= 0x80;
|
||||
239 1
|
||||
240 1 //Add user code here.
|
||||
C51 COMPILER V9.60.0.0 I2C 03/14/2023 09:20:44 PAGE 5
|
||||
|
||||
241 1
|
||||
242 1 P_SW2 = store;
|
||||
243 1 }
|
||||
244 /**************** I2C初始化函数 *****************/
|
||||
245 void I2C_config(void)
|
||||
246 {
|
||||
247 1 I2C_InitTypeDef I2C_InitStructure;
|
||||
248 1 I2C_InitStructure.I2C_Mode = I2C_Mode_Master; //主从选择 I2C_Mode_Master, I2C_Mode_Slave
|
||||
249 1 I2C_InitStructure.I2C_Enable = ENABLE; //I2C功能使能, ENABLE, DISABLE
|
||||
250 1 I2C_InitStructure.I2C_MS_WDTA = DISABLE; //主机使能自动发送, ENABLE, DISABLE
|
||||
251 1 I2C_InitStructure.I2C_MS_Interrupt = DISABLE; //使能主机模式中断, ENABLE, DISABLE
|
||||
252 1 I2C_InitStructure.I2C_Speed = 16; //总线速度=Fosc/2/(Speed*2+4), 0~63
|
||||
253 1 I2C_InitStructure.I2C_IoUse = I2C_P14_P15; //IO口切换 I2C_P14_P15, I2C_P24_P25, I2C_P33_P32
|
||||
254 1
|
||||
255 1 I2C_Init(&I2C_InitStructure);
|
||||
256 1 }
|
||||
|
||||
|
||||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||||
CODE SIZE = 516 ----
|
||||
CONSTANT SIZE = ---- ----
|
||||
XDATA SIZE = 128 ----
|
||||
PDATA SIZE = ---- ----
|
||||
DATA SIZE = ---- 22
|
||||
IDATA SIZE = ---- ----
|
||||
BIT SIZE = ---- ----
|
||||
END OF MODULE INFORMATION.
|
||||
|
||||
|
||||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
1988
Listings/Motorcontroller.m51
Normal file
1988
Listings/Motorcontroller.m51
Normal file
File diff suppressed because it is too large
Load Diff
204
Listings/PWM.lst
Normal file
204
Listings/PWM.lst
Normal file
@ -0,0 +1,204 @@
|
||||
C51 COMPILER V9.60.0.0 PWM 03/13/2023 17:49:47 PAGE 1
|
||||
|
||||
|
||||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE PWM
|
||||
OBJECT MODULE PLACED IN .\Objects\PWM.obj
|
||||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\PWM.C OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND
|
||||
- PRINT(.\Listings\PWM.lst) TABS(2) OBJECT(.\Objects\PWM.obj)
|
||||
|
||||
line level source
|
||||
|
||||
1 /*---------------------------------------------------------------------*/
|
||||
2 /* --- STC MCU Limited ------------------------------------------------*/
|
||||
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
9 /* --- QQ: 800003751 -------------------------------------------------*/
|
||||
10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
11 /*---------------------------------------------------------------------*/
|
||||
12
|
||||
13 #include "PWM.h"
|
||||
14 PWMx_Duty PWMA_Duty;
|
||||
15 u8 PWM_Configuration(u8 PWM, PWMx_InitDefine *PWMx)
|
||||
16 {
|
||||
17 1 if(PWM == PWMA)
|
||||
18 1 {
|
||||
19 2 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */
|
||||
20 2
|
||||
21 2 if(PWMx->PWM1_SetPriority <= Priority_3) PWM1_Priority(PWMx->PWM1_SetPriority); //指定中断优先级(低到高)
|
||||
- Priority_0,Priority_1,Priority_2,Priority_3
|
||||
22 2 if(PWMx->PWM2_SetPriority <= Priority_3) PWM2_Priority(PWMx->PWM2_SetPriority); //指定中断优先级(低到高)
|
||||
- Priority_0,Priority_1,Priority_2,Priority_3
|
||||
23 2 if(PWMx->PWM3_SetPriority <= Priority_3) PWM3_Priority(PWMx->PWM3_SetPriority); //指定中断优先级(低到高)
|
||||
- Priority_0,Priority_1,Priority_2,Priority_3
|
||||
24 2 if(PWMx->PWM4_SetPriority <= Priority_3) PWM4_Priority(PWMx->PWM4_SetPriority); //指定中断优先级(低到高)
|
||||
- Priority_0,Priority_1,Priority_2,Priority_3
|
||||
25 2
|
||||
26 2 PWMA_CCER1_Disable(); //关闭所有输入捕获/比较输出
|
||||
27 2 PWMA_CCER2_Disable(); //关闭所有输入捕获/比较输出
|
||||
28 2 PWMA_OC1ModeSet(PWMx->PWM1_Mode); //设置输出比较模式
|
||||
29 2 PWMA_OC2ModeSet(PWMx->PWM2_Mode); //设置输出比较模式
|
||||
30 2 PWMA_OC3ModeSet(PWMx->PWM3_Mode); //设置输出比较模式
|
||||
31 2 PWMA_OC4ModeSet(PWMx->PWM4_Mode); //设置输出比较模式
|
||||
32 2 if(PWMx->PWM_Reload == ENABLE) PWMA_OC1_ReloadEnable(); //输出比较的预装载使能
|
||||
33 2 else PWMA_OC1_RelosdDisable(); //禁止输出比较的预装载
|
||||
34 2 if(PWMx->PWM_Fast == ENABLE) PWMA_OC1_FastEnable(); //输出比较快速功能使能
|
||||
35 2 else PWMA_OC1_FastDisable(); //禁止输出比较快速功能
|
||||
36 2
|
||||
37 2 if(PWMx->PWM_CC1Enable == ENABLE) PWMA_CC1E_Enable(); //开启输入捕获/比较输出
|
||||
38 2 else PWMA_CC1E_Disable(); //关闭输入捕获/比较输出
|
||||
39 2 if(PWMx->PWM_CC1NEnable == ENABLE) PWMA_CC1NE_Enable(); //开启输入捕获/比较输出
|
||||
40 2 else PWMA_CC1NE_Disable(); //关闭输入捕获/比较输出
|
||||
41 2 if(PWMx->PWM_CC2Enable == ENABLE) PWMA_CC2E_Enable(); //开启输入捕获/比较输出
|
||||
42 2 else PWMA_CC2E_Disable(); //关闭输入捕获/比较输出
|
||||
43 2 if(PWMx->PWM_CC2NEnable == ENABLE) PWMA_CC2NE_Enable(); //开启输入捕获/比较输出
|
||||
44 2 else PWMA_CC2NE_Disable(); //关闭输入捕获/比较输出
|
||||
45 2 if(PWMx->PWM_CC3Enable == ENABLE) PWMA_CC3E_Enable(); //开启输入捕获/比较输出
|
||||
46 2 else PWMA_CC3E_Disable(); //关闭输入捕获/比较输出
|
||||
47 2 if(PWMx->PWM_CC3NEnable == ENABLE) PWMA_CC3NE_Enable(); //开启输入捕获/比较输出
|
||||
48 2 else PWMA_CC3NE_Disable(); //关闭输入捕获/比较输出
|
||||
49 2 if(PWMx->PWM_CC4Enable == ENABLE) PWMA_CC4E_Enable(); //开启输入捕获/比较输出
|
||||
50 2 else PWMA_CC4E_Disable(); //关闭输入捕获/比较输出
|
||||
C51 COMPILER V9.60.0.0 PWM 03/13/2023 17:49:47 PAGE 2
|
||||
|
||||
51 2 if(PWMx->PWM_CC4NEnable == ENABLE) PWMA_CC4NE_Enable(); //开启输入捕获/比较输出
|
||||
52 2 else PWMA_CC4NE_Disable(); //关闭输入捕获/比较输出
|
||||
53 2
|
||||
54 2 PWMA_AutoReload(PWMx->PWM_Period);
|
||||
55 2 PWMA_Duty1(PWMx->PWM1_Duty);
|
||||
56 2 PWMA_Duty2(PWMx->PWM2_Duty);
|
||||
57 2 PWMA_Duty3(PWMx->PWM3_Duty);
|
||||
58 2 PWMA_Duty4(PWMx->PWM4_Duty);
|
||||
59 2
|
||||
60 2 PWMA_CCPCAPreloaded(PWMx->PWM_PreLoad); //捕获/比较预装载控制位(该位只对具有互补输出的通道起作用)
|
||||
61 2 PWMA_PS = PWMx->PWM_PS_SW; //切换IO
|
||||
62 2 PWMA_ENO = PWMx->PWM_EnoSelect; //输出通道选择
|
||||
63 2 PWMA_DeadTime(PWMx->PWM_DeadTime); //死区发生器设置
|
||||
64 2
|
||||
65 2 if(PWMx->PWM_BrakeEnable == ENABLE) PWMA_BrakeEnable(); //开启刹车输入
|
||||
66 2 else PWMA_BrakeDisable(); //禁止刹车输入
|
||||
67 2 if(PWMx->PWM_MainOutEnable == ENABLE) PWMA_BrakeOutputEnable(); //主输出使能
|
||||
68 2 else PWMA_BrakeOutputDisable(); //主输出禁止
|
||||
69 2 if(PWMx->PWM_CEN_Enable == ENABLE) PWMA_CEN_Enable(); //使能计数器
|
||||
70 2 else PWMA_CEN_Disable(); //禁止计数器
|
||||
71 2
|
||||
72 2 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */
|
||||
73 2 return 0;
|
||||
74 2 }
|
||||
75 1
|
||||
76 1 if(PWM == PWMB)
|
||||
77 1 {
|
||||
78 2 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */
|
||||
79 2
|
||||
80 2 if(PWMx->PWM5_SetPriority <= Priority_3) PWM5_Priority(PWMx->PWM5_SetPriority); //指定中断优先级(低到高)
|
||||
- Priority_0,Priority_1,Priority_2,Priority_3
|
||||
81 2
|
||||
82 2 PWMB_CCER1_Disable(); //关闭所有输入捕获/比较输出
|
||||
83 2 PWMB_CCER2_Disable(); //关闭所有输入捕获/比较输出
|
||||
84 2 PWMB_OC5ModeSet(PWMx->PWM5_Mode); //设置输出比较模式
|
||||
85 2 PWMB_OC6ModeSet(PWMx->PWM6_Mode); //设置输出比较模式
|
||||
86 2 PWMB_OC7ModeSet(PWMx->PWM7_Mode); //设置输出比较模式
|
||||
87 2 PWMB_OC8ModeSet(PWMx->PWM8_Mode); //设置输出比较模式
|
||||
88 2 if(PWMx->PWM_Reload == ENABLE) PWMB_OC5_ReloadEnable(); //输出比较的预装载使能
|
||||
89 2 else PWMB_OC5_RelosdDisable(); //禁止输出比较的预装载
|
||||
90 2 if(PWMx->PWM_Fast == ENABLE) PWMB_OC5_FastEnable(); //输出比较快速功能使能
|
||||
91 2 else PWMB_OC5_FastDisable(); //禁止输出比较快速功能
|
||||
92 2
|
||||
93 2 if(PWMx->PWM_CC5Enable == ENABLE) PWMB_CC5E_Enable(); //开启输入捕获/比较输出
|
||||
94 2 else PWMB_CC5E_Disable(); //关闭输入捕获/比较输出
|
||||
95 2 if(PWMx->PWM_CC6Enable == ENABLE) PWMB_CC6E_Enable(); //开启输入捕获/比较输出
|
||||
96 2 else PWMB_CC6E_Disable(); //关闭输入捕获/比较输出
|
||||
97 2 if(PWMx->PWM_CC7Enable == ENABLE) PWMB_CC7E_Enable(); //开启输入捕获/比较输出
|
||||
98 2 else PWMB_CC7E_Disable(); //关闭输入捕获/比较输出
|
||||
99 2 if(PWMx->PWM_CC8Enable == ENABLE) PWMB_CC8E_Enable(); //开启输入捕获/比较输出
|
||||
100 2 else PWMB_CC8E_Disable(); //关闭输入捕获/比较输出
|
||||
101 2
|
||||
102 2 PWMB_AutoReload(PWMx->PWM_Period);
|
||||
103 2 PWMB_Duty5(PWMx->PWM5_Duty);
|
||||
104 2 PWMB_Duty6(PWMx->PWM6_Duty);
|
||||
105 2 PWMB_Duty7(PWMx->PWM7_Duty);
|
||||
106 2 PWMB_Duty8(PWMx->PWM8_Duty);
|
||||
107 2
|
||||
108 2 PWMB_CCPCBPreloaded(PWMx->PWM_PreLoad); //捕获/比较预装载控制位(该位只对具有互补输出的通道起作用)
|
||||
109 2 PWMB_PS = PWMx->PWM_PS_SW; //切换IO
|
||||
110 2 PWMB_ENO = PWMx->PWM_EnoSelect; //输出通道选择
|
||||
111 2 PWMB_DeadTime(PWMx->PWM_DeadTime); //死区发生器设置
|
||||
C51 COMPILER V9.60.0.0 PWM 03/13/2023 17:49:47 PAGE 3
|
||||
|
||||
112 2
|
||||
113 2 if(PWMx->PWM_BrakeEnable == ENABLE) PWMB_BrakeEnable(); //开启刹车输入
|
||||
114 2 else PWMB_BrakeDisable(); //禁止刹车输入
|
||||
115 2 if(PWMx->PWM_MainOutEnable == ENABLE) PWMB_BrakeOutputEnable(); //主输出使能
|
||||
116 2 else PWMB_BrakeOutputDisable(); //主输出禁止
|
||||
117 2 if(PWMx->PWM_CEN_Enable == ENABLE) PWMB_CEN_Enable(); //使能计数器
|
||||
118 2 else PWMB_CEN_Disable(); //禁止计数器
|
||||
119 2
|
||||
120 2 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */
|
||||
121 2 return 0;
|
||||
122 2 }
|
||||
123 1
|
||||
124 1 return 2; //错误
|
||||
125 1 }
|
||||
126
|
||||
127 /*********************************************************/
|
||||
128
|
||||
129 /******************* PWM 占空比设置函数 *******************/
|
||||
130 void UpdatePwm(u8 PWM, PWMx_Duty *PWMx)
|
||||
131 {
|
||||
132 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */
|
||||
133 1
|
||||
134 1 if(PWM == PWMA)
|
||||
135 1 {
|
||||
136 2 PWMA_Duty1(PWMx->PWM1_Duty);
|
||||
137 2 PWMA_Duty2(PWMx->PWM2_Duty);
|
||||
138 2 PWMA_Duty3(PWMx->PWM3_Duty);
|
||||
139 2 PWMA_Duty4(PWMx->PWM4_Duty);
|
||||
140 2 }
|
||||
141 1 else
|
||||
142 1 {
|
||||
143 2 PWMB_Duty5(PWMx->PWM5_Duty);
|
||||
144 2 PWMB_Duty6(PWMx->PWM6_Duty);
|
||||
145 2 PWMB_Duty7(PWMx->PWM7_Duty);
|
||||
146 2 PWMB_Duty8(PWMx->PWM8_Duty);
|
||||
147 2 }
|
||||
148 1
|
||||
149 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */
|
||||
150 1 }
|
||||
151
|
||||
152 /*********************************************************/
|
||||
153 void PWM_config(void)
|
||||
154 {
|
||||
155 1 PWMx_InitDefine PWMx_InitStructure;
|
||||
156 1 PWMx_InitStructure.PWM2_Mode = CCMRn_PWM_MODE1; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_IN
|
||||
-VALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
|
||||
157 1 PWMx_InitStructure.PWM2_SetPriority = Priority_0; //指定中断优先级(低到高) Priority_0,Priority_1,Prior
|
||||
-ity_2,Priority_3
|
||||
158 1 PWMx_InitStructure.PWM_Period = 2047; //周期时间, 0~65535
|
||||
159 1 PWMx_InitStructure.PWM2_Duty = PWMA_Duty.PWM2_Duty; //PWM2占空比时间, 0~Period
|
||||
160 1 PWMx_InitStructure.PWM_DeadTime = 0; //死区发生器设置, 0~255
|
||||
161 1 PWMx_InitStructure.PWM_EnoSelect = ENO2N ;
|
||||
162 1 PWMx_InitStructure.PWM_PS_SW =PWM2_SW_P12_P13;
|
||||
163 1 PWMx_InitStructure.PWM_CC2NEnable = ENABLE; //开启PWM2N输入捕获/比较输出, ENABLE,DISABLE
|
||||
164 1 PWMx_InitStructure.PWM_MainOutEnable= ENABLE; //主输出使能, ENABLE,DISABLE
|
||||
165 1 PWMx_InitStructure.PWM_CEN_Enable = ENABLE; //使能计数器, ENABLE,DISABLE
|
||||
166 1 PWM_Configuration(PWMA, &PWMx_InitStructure); //初始化PWM, PWMA,PWMB
|
||||
167 1 }
|
||||
|
||||
|
||||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||||
CODE SIZE = 1440 ----
|
||||
C51 COMPILER V9.60.0.0 PWM 03/13/2023 17:49:47 PAGE 4
|
||||
|
||||
CONSTANT SIZE = ---- ----
|
||||
XDATA SIZE = ---- ----
|
||||
PDATA SIZE = ---- ----
|
||||
DATA SIZE = 16 52
|
||||
IDATA SIZE = ---- ----
|
||||
BIT SIZE = ---- ----
|
||||
END OF MODULE INFORMATION.
|
||||
|
||||
|
||||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
253
Listings/STARTUP.lst
Normal file
253
Listings/STARTUP.lst
Normal file
@ -0,0 +1,253 @@
|
||||
A51 MACRO ASSEMBLER STARTUP 03/20/2023 09:24:24 PAGE 1
|
||||
|
||||
|
||||
MACRO ASSEMBLER A51 V8.2.7.0
|
||||
OBJECT MODULE PLACED IN .\Objects\STARTUP.obj
|
||||
ASSEMBLER INVOKED BY: d:\Keil_v5\C51\BIN\A51.EXE STARTUP.A51 SET(SMALL) DEBUG PRINT(.\Listings\STARTUP.lst) OBJECT(.\Obj
|
||||
ects\STARTUP.obj) EP
|
||||
|
||||
LOC OBJ LINE SOURCE
|
||||
|
||||
1 $nomod51
|
||||
2 ;------------------------------------------------------------------------------
|
||||
3 ; This file is part of the C51 Compiler package
|
||||
4 ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
|
||||
5 ; Version 8.01
|
||||
6 ;
|
||||
7 ; *** <<< Use Configuration Wizard in Context Menu >>> ***
|
||||
8 ;------------------------------------------------------------------------------
|
||||
9 ; STARTUP.A51: This code is executed after processor reset.
|
||||
10 ;
|
||||
11 ; To translate this file use A51 with the following invocation:
|
||||
12 ;
|
||||
13 ; A51 STARTUP.A51
|
||||
14 ;
|
||||
15 ; To link the modified STARTUP.OBJ file to your application use the following
|
||||
16 ; Lx51 invocation:
|
||||
17 ;
|
||||
18 ; Lx51 your object file list, STARTUP.OBJ controls
|
||||
19 ;
|
||||
20 ;------------------------------------------------------------------------------
|
||||
21 ;
|
||||
22 ; User-defined <h> Power-On Initialization of Memory
|
||||
23 ;
|
||||
24 ; With the following EQU statements the initialization of memory
|
||||
25 ; at processor reset can be defined:
|
||||
26 ;
|
||||
27 ; <o> IDATALEN: IDATA memory size <0x0-0x100>
|
||||
28 ; <i> Note: The absolute start-address of IDATA memory is always 0
|
||||
29 ; <i> The IDATA space overlaps physically the DATA and BIT areas.
|
||||
0080 30 IDATALEN EQU 80H
|
||||
31 ;
|
||||
32 ; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF>
|
||||
33 ; <i> The absolute start address of XDATA memory
|
||||
0000 34 XDATASTART EQU 0
|
||||
35 ;
|
||||
36 ; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
|
||||
37 ; <i> The length of XDATA memory in bytes.
|
||||
0000 38 XDATALEN EQU 0
|
||||
39 ;
|
||||
40 ; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
|
||||
41 ; <i> The absolute start address of PDATA memory
|
||||
0000 42 PDATASTART EQU 0H
|
||||
43 ;
|
||||
44 ; <o> PDATALEN: PDATA memory size <0x0-0xFF>
|
||||
45 ; <i> The length of PDATA memory in bytes.
|
||||
0000 46 PDATALEN EQU 0H
|
||||
47 ;
|
||||
48 ;</h>
|
||||
49 ;------------------------------------------------------------------------------
|
||||
50 ;
|
||||
51 ;<h> Reentrant Stack Initialization
|
||||
52 ;
|
||||
53 ; The following EQU statements define the stack pointer for reentrant
|
||||
54 ; functions and initialized it:
|
||||
55 ;
|
||||
56 ; <h> Stack Space for reentrant functions in the SMALL model.
|
||||
57 ; <q> IBPSTACK: Enable SMALL model reentrant stack
|
||||
A51 MACRO ASSEMBLER STARTUP 03/20/2023 09:24:24 PAGE 2
|
||||
|
||||
58 ; <i> Stack space for reentrant functions in the SMALL model.
|
||||
0000 59 IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
|
||||
60 ; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
|
||||
61 ; <i> Set the top of the stack to the highest location.
|
||||
0100 62 IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
|
||||
63 ; </h>
|
||||
64 ;
|
||||
65 ; <h> Stack Space for reentrant functions in the LARGE model.
|
||||
66 ; <q> XBPSTACK: Enable LARGE model reentrant stack
|
||||
67 ; <i> Stack space for reentrant functions in the LARGE model.
|
||||
0000 68 XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
|
||||
69 ; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
|
||||
70 ; <i> Set the top of the stack to the highest location.
|
||||
0000 71 XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
|
||||
72 ; </h>
|
||||
73 ;
|
||||
74 ; <h> Stack Space for reentrant functions in the COMPACT model.
|
||||
75 ; <q> PBPSTACK: Enable COMPACT model reentrant stack
|
||||
76 ; <i> Stack space for reentrant functions in the COMPACT model.
|
||||
0000 77 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
|
||||
78 ;
|
||||
79 ; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
|
||||
80 ; <i> Set the top of the stack to the highest location.
|
||||
0100 81 PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
|
||||
82 ; </h>
|
||||
83 ;</h>
|
||||
84 ;------------------------------------------------------------------------------
|
||||
85 ;
|
||||
86 ; Memory Page for Using the Compact Model with 64 KByte xdata RAM
|
||||
87 ; <e>Compact Model Page Definition
|
||||
88 ;
|
||||
89 ; <i>Define the XDATA page used for PDATA variables.
|
||||
90 ; <i>PPAGE must conform with the PPAGE set in the linker invocation.
|
||||
91 ;
|
||||
92 ; Enable pdata memory page initalization
|
||||
0000 93 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
|
||||
94 ;
|
||||
95 ; <o> PPAGE number <0x0-0xFF>
|
||||
96 ; <i> uppermost 256-byte address of the page used for PDATA variables.
|
||||
0000 97 PPAGE EQU 0
|
||||
98 ;
|
||||
99 ; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
|
||||
100 ; <i> most 8051 variants use P2 as uppermost address byte
|
||||
00A0 101 PPAGE_SFR DATA 0A0H
|
||||
102 ;
|
||||
103 ; </e>
|
||||
104 ;------------------------------------------------------------------------------
|
||||
105
|
||||
106 ; Standard SFR Symbols
|
||||
00E0 107 ACC DATA 0E0H
|
||||
00F0 108 B DATA 0F0H
|
||||
0081 109 SP DATA 81H
|
||||
0082 110 DPL DATA 82H
|
||||
0083 111 DPH DATA 83H
|
||||
112
|
||||
113 NAME ?C_STARTUP
|
||||
114
|
||||
115
|
||||
116 ?C_C51STARTUP SEGMENT CODE
|
||||
117 ?STACK SEGMENT IDATA
|
||||
118
|
||||
---- 119 RSEG ?STACK
|
||||
0000 120 DS 1
|
||||
121
|
||||
122 EXTRN CODE (?C_START)
|
||||
123 PUBLIC ?C_STARTUP
|
||||
A51 MACRO ASSEMBLER STARTUP 03/20/2023 09:24:24 PAGE 3
|
||||
|
||||
124
|
||||
---- 125 CSEG AT 0
|
||||
0000 020000 F 126 ?C_STARTUP: LJMP STARTUP1
|
||||
127
|
||||
---- 128 RSEG ?C_C51STARTUP
|
||||
129
|
||||
0000 130 STARTUP1:
|
||||
131
|
||||
132 IF IDATALEN <> 0
|
||||
0000 787F 133 MOV R0,#IDATALEN - 1
|
||||
0002 E4 134 CLR A
|
||||
0003 F6 135 IDATALOOP: MOV @R0,A
|
||||
0004 D8FD 136 DJNZ R0,IDATALOOP
|
||||
137 ENDIF
|
||||
138
|
||||
139 IF XDATALEN <> 0
|
||||
MOV DPTR,#XDATASTART
|
||||
MOV R7,#LOW (XDATALEN)
|
||||
IF (LOW (XDATALEN)) <> 0
|
||||
MOV R6,#(HIGH (XDATALEN)) +1
|
||||
ELSE
|
||||
MOV R6,#HIGH (XDATALEN)
|
||||
ENDIF
|
||||
CLR A
|
||||
XDATALOOP: MOVX @DPTR,A
|
||||
INC DPTR
|
||||
DJNZ R7,XDATALOOP
|
||||
DJNZ R6,XDATALOOP
|
||||
ENDIF
|
||||
153
|
||||
154 IF PPAGEENABLE <> 0
|
||||
MOV PPAGE_SFR,#PPAGE
|
||||
ENDIF
|
||||
157
|
||||
158 IF PDATALEN <> 0
|
||||
MOV R0,#LOW (PDATASTART)
|
||||
MOV R7,#LOW (PDATALEN)
|
||||
CLR A
|
||||
PDATALOOP: MOVX @R0,A
|
||||
INC R0
|
||||
DJNZ R7,PDATALOOP
|
||||
ENDIF
|
||||
166
|
||||
167 IF IBPSTACK <> 0
|
||||
EXTRN DATA (?C_IBP)
|
||||
|
||||
MOV ?C_IBP,#LOW IBPSTACKTOP
|
||||
ENDIF
|
||||
172
|
||||
173 IF XBPSTACK <> 0
|
||||
EXTRN DATA (?C_XBP)
|
||||
|
||||
MOV ?C_XBP,#HIGH XBPSTACKTOP
|
||||
MOV ?C_XBP+1,#LOW XBPSTACKTOP
|
||||
ENDIF
|
||||
179
|
||||
180 IF PBPSTACK <> 0
|
||||
EXTRN DATA (?C_PBP)
|
||||
MOV ?C_PBP,#LOW PBPSTACKTOP
|
||||
ENDIF
|
||||
184
|
||||
0006 758100 F 185 MOV SP,#?STACK-1
|
||||
186
|
||||
187 ; This code is required if you use L51_BANK.A51 with Banking Mode 4
|
||||
188 ;<h> Code Banking
|
||||
189 ; <q> Select Bank 0 for L51_BANK.A51 Mode 4
|
||||
A51 MACRO ASSEMBLER STARTUP 03/20/2023 09:24:24 PAGE 4
|
||||
|
||||
190
|
||||
|
||||
|
||||
|
||||
|
||||
195 ;</h>
|
||||
0009 020000 F 196 LJMP ?C_START
|
||||
197
|
||||
198 END
|
||||
A51 MACRO ASSEMBLER STARTUP 03/20/2023 09:24:24 PAGE 5
|
||||
|
||||
SYMBOL TABLE LISTING
|
||||
------ ----- -------
|
||||
|
||||
|
||||
N A M E T Y P E V A L U E ATTRIBUTES
|
||||
|
||||
?C_C51STARTUP. . . C SEG 000CH REL=UNIT
|
||||
?C_START . . . . . C ADDR ----- EXT
|
||||
?C_STARTUP . . . . C ADDR 0000H A
|
||||
?STACK . . . . . . I SEG 0001H REL=UNIT
|
||||
ACC. . . . . . . . D ADDR 00E0H A
|
||||
B. . . . . . . . . D ADDR 00F0H A
|
||||
DPH. . . . . . . . D ADDR 0083H A
|
||||
DPL. . . . . . . . D ADDR 0082H A
|
||||
IBPSTACK . . . . . N NUMB 0000H A
|
||||
IBPSTACKTOP. . . . N NUMB 0100H A
|
||||
IDATALEN . . . . . N NUMB 0080H A
|
||||
IDATALOOP. . . . . C ADDR 0003H R SEG=?C_C51STARTUP
|
||||
PBPSTACK . . . . . N NUMB 0000H A
|
||||
PBPSTACKTOP. . . . N NUMB 0100H A
|
||||
PDATALEN . . . . . N NUMB 0000H A
|
||||
PDATASTART . . . . N NUMB 0000H A
|
||||
PPAGE. . . . . . . N NUMB 0000H A
|
||||
PPAGEENABLE. . . . N NUMB 0000H A
|
||||
PPAGE_SFR. . . . . D ADDR 00A0H A
|
||||
SP . . . . . . . . D ADDR 0081H A
|
||||
STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP
|
||||
XBPSTACK . . . . . N NUMB 0000H A
|
||||
XBPSTACKTOP. . . . N NUMB 0000H A
|
||||
XDATALEN . . . . . N NUMB 0000H A
|
||||
XDATASTART . . . . N NUMB 0000H A
|
||||
|
||||
|
||||
REGISTER BANK(S) USED: 0
|
||||
|
||||
|
||||
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
28
Listings/TM5160.lst
Normal file
28
Listings/TM5160.lst
Normal file
@ -0,0 +1,28 @@
|
||||
C51 COMPILER V9.60.0.0 TM5160 03/14/2023 09:21:34 PAGE 1
|
||||
|
||||
|
||||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE TM5160
|
||||
OBJECT MODULE PLACED IN .\Objects\TM5160.obj
|
||||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\TM5160.C OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXT
|
||||
-END PRINT(.\Listings\TM5160.lst) TABS(2) OBJECT(.\Objects\TM5160.obj)
|
||||
|
||||
line level source
|
||||
|
||||
1 #include "tm5160.h"
|
||||
2 void tmc()
|
||||
3 {
|
||||
4 1 }
|
||||
|
||||
|
||||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||||
CODE SIZE = 1 ----
|
||||
CONSTANT SIZE = ---- ----
|
||||
XDATA SIZE = ---- ----
|
||||
PDATA SIZE = ---- ----
|
||||
DATA SIZE = ---- ----
|
||||
IDATA SIZE = ---- ----
|
||||
BIT SIZE = ---- ----
|
||||
END OF MODULE INFORMATION.
|
||||
|
||||
|
||||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
495
Listings/UART.lst
Normal file
495
Listings/UART.lst
Normal file
@ -0,0 +1,495 @@
|
||||
C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 1
|
||||
|
||||
|
||||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE UART
|
||||
OBJECT MODULE PLACED IN .\Objects\UART.obj
|
||||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\UART.C OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEN
|
||||
-D PRINT(.\Listings\UART.lst) TABS(2) OBJECT(.\Objects\UART.obj)
|
||||
|
||||
line level source
|
||||
|
||||
1 /*---------------------------------------------------------------------*/
|
||||
2 /* --- STC MCU Limited ------------------------------------------------*/
|
||||
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
9 /* --- QQ: 800003751 -------------------------------------------------*/
|
||||
10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
11 /*---------------------------------------------------------------------*/
|
||||
12
|
||||
13 #include "UART.h"
|
||||
14 #include "STDIO.H"
|
||||
15
|
||||
16 #ifdef UART1
|
||||
17 COMx_Define COM1;
|
||||
18 u8 xdata TX1_Buffer[COM_TX1_Lenth]; //发送缓冲
|
||||
19 u8 xdata RX1_Buffer[COM_RX1_Lenth]; //接收缓冲
|
||||
20 #endif
|
||||
21 #ifdef UART2
|
||||
COMx_Define COM2;
|
||||
u8 xdata TX2_Buffer[COM_TX2_Lenth]; //发送缓冲
|
||||
u8 xdata RX2_Buffer[COM_RX2_Lenth]; //接收缓冲
|
||||
#endif
|
||||
26 #ifdef UART3
|
||||
COMx_Define COM3;
|
||||
u8 xdata TX3_Buffer[COM_TX3_Lenth]; //发送缓冲
|
||||
u8 xdata RX3_Buffer[COM_RX3_Lenth]; //接收缓冲
|
||||
#endif
|
||||
31 #ifdef UART4
|
||||
COMx_Define COM4;
|
||||
u8 xdata TX4_Buffer[COM_TX4_Lenth]; //发送缓冲
|
||||
u8 xdata RX4_Buffer[COM_RX4_Lenth]; //接收缓冲
|
||||
#endif
|
||||
36
|
||||
37 u8 UART_Configuration(u8 UARTx, COMx_InitDefine *COMx)
|
||||
38 {
|
||||
39 1 u8 i;
|
||||
40 1 u32 j;
|
||||
41 1
|
||||
42 1 #ifdef UART1
|
||||
43 1 if(UARTx == UART1)
|
||||
44 1 {
|
||||
45 2 COM1.id = 1;
|
||||
46 2 COM1.TX_read = 0;
|
||||
47 2 COM1.TX_write = 0;
|
||||
48 2 COM1.B_TX_busy = 0;
|
||||
49 2 COM1.RX_Cnt = 0;
|
||||
50 2 COM1.RX_TimeOut = 0;
|
||||
51 2 COM1.B_RX_OK = 0;
|
||||
52 2 for(i=0; i<COM_TX1_Lenth; i++) TX1_Buffer[i] = 0;
|
||||
53 2 for(i=0; i<COM_RX1_Lenth; i++) RX1_Buffer[i] = 0;
|
||||
54 2
|
||||
C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 2
|
||||
|
||||
55 2 if(COMx->UART_Priority > Priority_3) return 2; //错误
|
||||
56 2 UART1_Priority(COMx->UART_Priority); //指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_
|
||||
-3
|
||||
57 2 if(COMx->UART_Mode > UART_9bit_BRTx) return 2; //模式错误
|
||||
58 2 SCON = (SCON & 0x3f) | COMx->UART_Mode;
|
||||
59 2 if((COMx->UART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //可变波特率
|
||||
60 2 {
|
||||
61 3 j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //按1T计算
|
||||
62 3 if(j >= 65536UL) return 2; //错误
|
||||
63 3 j = 65536UL - j;
|
||||
64 3 if(COMx->UART_BRT_Use == BRT_Timer1)
|
||||
65 3 {
|
||||
66 4 TR1 = 0;
|
||||
67 4 AUXR &= ~0x01; //S1 BRT Use Timer1;
|
||||
68 4 TMOD &= ~(1<<6); //Timer1 set As Timer
|
||||
69 4 TMOD &= ~0x30; //Timer1_16bitAutoReload;
|
||||
70 4 AUXR |= (1<<6); //Timer1 set as 1T mode
|
||||
71 4 TH1 = (u8)(j>>8);
|
||||
72 4 TL1 = (u8)j;
|
||||
73 4 ET1 = 0; //禁止中断
|
||||
74 4 TMOD &= ~0x40; //定时
|
||||
75 4 INT_CLKO &= ~0x02; //不输出时钟
|
||||
76 4 TR1 = 1;
|
||||
77 4 }
|
||||
78 3 else if(COMx->UART_BRT_Use == BRT_Timer2)
|
||||
79 3 {
|
||||
80 4 AUXR &= ~(1<<4); //Timer stop
|
||||
81 4 AUXR |= 0x01; //S1 BRT Use Timer2;
|
||||
82 4 AUXR &= ~(1<<3); //Timer2 set As Timer
|
||||
83 4 AUXR |= (1<<2); //Timer2 set as 1T mode
|
||||
84 4 TH2 = (u8)(j>>8);
|
||||
85 4 TL2 = (u8)j;
|
||||
86 4 IE2 &= ~(1<<2); //禁止中断
|
||||
87 4 AUXR |= (1<<4); //Timer run enable
|
||||
88 4 }
|
||||
89 3 else return 2; //错误
|
||||
90 3 }
|
||||
91 2 else if(COMx->UART_Mode == UART_ShiftRight)
|
||||
92 2 {
|
||||
93 3 if(COMx->BaudRateDouble == ENABLE) AUXR |= (1<<5); //固定波特率SysClk/2
|
||||
94 3 else AUXR &= ~(1<<5); //固定波特率SysClk/12
|
||||
95 3 }
|
||||
96 2 else if(COMx->UART_Mode == UART_9bit) //固定波特率SysClk*2^SMOD/64
|
||||
97 2 {
|
||||
98 3 if(COMx->BaudRateDouble == ENABLE) PCON |= (1<<7); //固定波特率SysClk/32
|
||||
99 3 else PCON &= ~(1<<7); //固定波特率SysClk/64
|
||||
100 3 }
|
||||
101 2 if(COMx->UART_Interrupt == ENABLE) ES = 1; //允许中断
|
||||
102 2 else ES = 0; //禁止中断
|
||||
103 2 if(COMx->UART_RxEnable == ENABLE) REN = 1; //允许接收
|
||||
104 2 else REN = 0; //禁止接收
|
||||
105 2 P_SW1 = (P_SW1 & 0x3f) | (COMx->UART_P_SW & 0xc0); //切换IO
|
||||
106 2 return 0;
|
||||
107 2 }
|
||||
108 1 #endif
|
||||
109 1 #ifdef UART2
|
||||
if(UARTx == UART2)
|
||||
{
|
||||
COM2.id = 2;
|
||||
COM2.TX_read = 0;
|
||||
COM2.TX_write = 0;
|
||||
COM2.B_TX_busy = 0;
|
||||
C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 3
|
||||
|
||||
COM2.RX_Cnt = 0;
|
||||
COM2.RX_TimeOut = 0;
|
||||
COM2.B_RX_OK = 0;
|
||||
for(i=0; i<COM_TX2_Lenth; i++) TX2_Buffer[i] = 0;
|
||||
for(i=0; i<COM_RX2_Lenth; i++) RX2_Buffer[i] = 0;
|
||||
|
||||
if((COMx->UART_Mode == UART_9bit_BRTx) ||(COMx->UART_Mode == UART_8bit_BRTx)) //可变波特率
|
||||
{
|
||||
if(COMx->UART_Priority > Priority_3) return 2; //错误
|
||||
UART2_Priority(COMx->UART_Priority); //指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority
|
||||
-_3
|
||||
if(COMx->UART_Mode == UART_9bit_BRTx) S2CON |= (1<<7); //9bit
|
||||
else S2CON &= ~(1<<7); //8bit
|
||||
j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //按1T计算
|
||||
if(j >= 65536UL) return 2; //错误
|
||||
j = 65536UL - j;
|
||||
AUXR &= ~(1<<4); //Timer stop
|
||||
AUXR &= ~(1<<3); //Timer2 set As Timer
|
||||
AUXR |= (1<<2); //Timer2 set as 1T mode
|
||||
TH2 = (u8)(j>>8);
|
||||
TL2 = (u8)j;
|
||||
IE2 &= ~(1<<2); //禁止中断
|
||||
AUXR |= (1<<4); //Timer run enable
|
||||
}
|
||||
else return 2; //模式错误
|
||||
if(COMx->UART_Interrupt == ENABLE) IE2 |= 1; //允许中断
|
||||
else IE2 &= ~1; //禁止中断
|
||||
if(COMx->UART_RxEnable == ENABLE) S2CON |= (1<<4); //允许接收
|
||||
else S2CON &= ~(1<<4); //禁止接收
|
||||
P_SW2 = (P_SW2 & ~1) | (COMx->UART_P_SW & 0x01); //切换IO
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
148 1 #ifdef UART3
|
||||
if(UARTx == UART3)
|
||||
{
|
||||
COM3.id = 3;
|
||||
COM3.TX_read = 0;
|
||||
COM3.TX_write = 0;
|
||||
COM3.B_TX_busy = 0;
|
||||
COM3.RX_Cnt = 0;
|
||||
COM3.RX_TimeOut = 0;
|
||||
COM3.B_RX_OK = 0;
|
||||
for(i=0; i<COM_TX3_Lenth; i++) TX3_Buffer[i] = 0;
|
||||
for(i=0; i<COM_RX3_Lenth; i++) RX3_Buffer[i] = 0;
|
||||
|
||||
if((COMx->UART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //可变波特率
|
||||
{
|
||||
if(COMx->UART_Priority > Priority_3) return 2; //错误
|
||||
UART3_Priority(COMx->UART_Priority); //指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority
|
||||
-_3
|
||||
if(COMx->UART_Mode == UART_9bit_BRTx) S3_9bit(); //9bit
|
||||
else S3_8bit(); //8bit
|
||||
j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //按1T计算
|
||||
if(j >= 65536UL) return 2; //错误
|
||||
j = 65536UL - j;
|
||||
if(COMx->UART_BRT_Use == BRT_Timer3)
|
||||
{
|
||||
S3_BRT_UseTimer3(); //S3 BRT Use Timer3;
|
||||
TH3 = (u8)(j>>8);
|
||||
TL3 = (u8)j;
|
||||
T4T3M &= 0xf0;
|
||||
C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 4
|
||||
|
||||
T4T3M |= 0x0a; //Timer3 set As Timer, 1T mode, Start timer3
|
||||
}
|
||||
else if(COMx->UART_BRT_Use == BRT_Timer2)
|
||||
{
|
||||
AUXR &= ~(1<<4); //Timer stop
|
||||
S3_BRT_UseTimer2(); //S3 BRT Use Timer2;
|
||||
AUXR &= ~(1<<3); //Timer2 set As Timer
|
||||
AUXR |= (1<<2); //Timer2 set as 1T mode
|
||||
TH2 = (u8)(j>>8);
|
||||
TL2 = (u8)j;
|
||||
IE2 &= ~(1<<2); //禁止中断
|
||||
AUXR |= (1<<4); //Timer run enable
|
||||
}
|
||||
else return 2; //错误
|
||||
}
|
||||
else return 2; //模式错误
|
||||
if(COMx->UART_Interrupt == ENABLE) S3_Int_Enable(); //允许中断
|
||||
else S3_Int_Disable(); //禁止中断
|
||||
if(COMx->UART_RxEnable == ENABLE) S3_RX_Enable(); //允许接收
|
||||
else S3_RX_Disable(); //禁止接收
|
||||
P_SW2 = (P_SW2 & ~2) | (COMx->UART_P_SW & 0x02); //切换IO
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
200 1 #ifdef UART4
|
||||
if(UARTx == UART4)
|
||||
{
|
||||
COM4.id = 3;
|
||||
COM4.TX_read = 0;
|
||||
COM4.TX_write = 0;
|
||||
COM4.B_TX_busy = 0;
|
||||
COM4.RX_Cnt = 0;
|
||||
COM4.RX_TimeOut = 0;
|
||||
COM4.B_RX_OK = 0;
|
||||
for(i=0; i<COM_TX4_Lenth; i++) TX4_Buffer[i] = 0;
|
||||
for(i=0; i<COM_RX4_Lenth; i++) RX4_Buffer[i] = 0;
|
||||
|
||||
if((COMx->UART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //可变波特率
|
||||
{
|
||||
if(COMx->UART_Priority > Priority_3) return 2; //错误
|
||||
UART4_Priority(COMx->UART_Priority); //指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority
|
||||
-_3
|
||||
if(COMx->UART_Mode == UART_9bit_BRTx) S4_9bit(); //9bit
|
||||
else S4_8bit(); //8bit
|
||||
j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //按1T计算
|
||||
if(j >= 65536UL) return 2; //错误
|
||||
j = 65536UL - j;
|
||||
if(COMx->UART_BRT_Use == BRT_Timer4)
|
||||
{
|
||||
S4_BRT_UseTimer4(); //S4 BRT Use Timer4;
|
||||
TH4 = (u8)(j>>8);
|
||||
TL4 = (u8)j;
|
||||
T4T3M &= 0x0f;
|
||||
T4T3M |= 0xa0; //Timer4 set As Timer, 1T mode, Start timer4
|
||||
}
|
||||
else if(COMx->UART_BRT_Use == BRT_Timer2)
|
||||
{
|
||||
AUXR &= ~(1<<4); //Timer stop
|
||||
S4_BRT_UseTimer2(); //S4 BRT Use Timer2;
|
||||
AUXR &= ~(1<<3); //Timer2 set As Timer
|
||||
AUXR |= (1<<2); //Timer2 set as 1T mode
|
||||
TH2 = (u8)(j>>8);
|
||||
C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 5
|
||||
|
||||
TL2 = (u8)j;
|
||||
IE2 &= ~(1<<2); //禁止中断
|
||||
AUXR |= (1<<4); //Timer run enable
|
||||
}
|
||||
else return 2; //错误
|
||||
}
|
||||
else return 2; //模式错误
|
||||
if(COMx->UART_Interrupt == ENABLE) S4_Int_Enable(); //允许中断
|
||||
else S4_Int_Disable(); //禁止中断
|
||||
if(COMx->UART_RxEnable == ENABLE) S4_RX_Enable(); //允许接收
|
||||
else S4_RX_Disable(); //禁止接收
|
||||
P_SW2 = (P_SW2 & ~4) | (COMx->UART_P_SW & 0x04); //切换IO
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
252 1 return 2; //错误
|
||||
253 1 }
|
||||
254
|
||||
255 /*********************************************************/
|
||||
256
|
||||
257 /********************* UART1 函数 ************************/
|
||||
258 #ifdef UART1
|
||||
259 void TX1_write2buff(u8 dat) //写入发送缓冲,指针+1
|
||||
260 {
|
||||
261 1 TX1_Buffer[COM1.TX_write] = dat; //装发送缓冲
|
||||
262 1 if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0;
|
||||
263 1
|
||||
264 1 if(COM1.B_TX_busy == 0) //空闲
|
||||
265 1 {
|
||||
266 2 COM1.B_TX_busy = 1; //标志忙
|
||||
267 2 TI = 1; //触发发送中断
|
||||
268 2 }
|
||||
269 1 }
|
||||
270
|
||||
271 void PrintString1(u8 *puts)
|
||||
272 {
|
||||
273 1 for (; *puts != 0; puts++) TX1_write2buff(*puts); //遇到停止符0结束
|
||||
274 1 }
|
||||
275
|
||||
276 void UART1_int (void) interrupt UART1_VECTOR
|
||||
277 {
|
||||
278 1 if(RI)
|
||||
279 1 {
|
||||
280 2 RI = 0;
|
||||
281 2 if(COM1.B_RX_OK == 0)
|
||||
282 2 {
|
||||
283 3 if(COM1.RX_Cnt >= COM_RX1_Lenth) COM1.RX_Cnt = 0;
|
||||
284 3 RX1_Buffer[COM1.RX_Cnt++] = SBUF;
|
||||
285 3 COM1.RX_TimeOut = TimeOutSet1;
|
||||
286 3 }
|
||||
287 2 }
|
||||
288 1
|
||||
289 1 if(TI)
|
||||
290 1 {
|
||||
291 2 TI = 0;
|
||||
292 2 if(COM1.TX_read != COM1.TX_write)
|
||||
293 2 {
|
||||
294 3 SBUF = TX1_Buffer[COM1.TX_read];
|
||||
295 3 if(++COM1.TX_read >= COM_TX1_Lenth) COM1.TX_read = 0;
|
||||
296 3 }
|
||||
297 2 else COM1.B_TX_busy = 0;
|
||||
298 2 }
|
||||
C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 6
|
||||
|
||||
299 1 }
|
||||
300 #endif
|
||||
301
|
||||
302 /********************* UART2 函数 ************************/
|
||||
303 #ifdef UART2
|
||||
void TX2_write2buff(u8 dat) //写入发送缓冲,指针+1
|
||||
{
|
||||
TX2_Buffer[COM2.TX_write] = dat; //装发送缓冲
|
||||
if(++COM2.TX_write >= COM_TX2_Lenth) COM2.TX_write = 0;
|
||||
|
||||
if(COM2.B_TX_busy == 0) //空闲
|
||||
{
|
||||
COM2.B_TX_busy = 1; //标志忙
|
||||
SET_TI2(); //触发发送中断
|
||||
}
|
||||
}
|
||||
|
||||
void PrintString2(u8 *puts)
|
||||
{
|
||||
for (; *puts != 0; puts++) TX2_write2buff(*puts); //遇到停止符0结束
|
||||
}
|
||||
|
||||
void UART2_int (void) interrupt UART2_VECTOR
|
||||
{
|
||||
if(RI2)
|
||||
{
|
||||
CLR_RI2();
|
||||
if(COM2.B_RX_OK == 0)
|
||||
{
|
||||
if(COM2.RX_Cnt >= COM_RX2_Lenth) COM2.RX_Cnt = 0;
|
||||
RX2_Buffer[COM2.RX_Cnt++] = S2BUF;
|
||||
COM2.RX_TimeOut = TimeOutSet2;
|
||||
}
|
||||
}
|
||||
|
||||
if(TI2)
|
||||
{
|
||||
CLR_TI2();
|
||||
if(COM2.TX_read != COM2.TX_write)
|
||||
{
|
||||
S2BUF = TX2_Buffer[COM2.TX_read];
|
||||
if(++COM2.TX_read >= COM_TX2_Lenth) COM2.TX_read = 0;
|
||||
}
|
||||
else COM2.B_TX_busy = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
346
|
||||
347 /********************* UART3 函数 ************************/
|
||||
348 #ifdef UART3
|
||||
void TX3_write2buff(u8 dat) //写入发送缓冲,指针+1
|
||||
{
|
||||
TX3_Buffer[COM3.TX_write] = dat; //装发送缓冲
|
||||
if(++COM3.TX_write >= COM_TX3_Lenth) COM3.TX_write = 0;
|
||||
|
||||
if(COM3.B_TX_busy == 0) //空闲
|
||||
{
|
||||
COM3.B_TX_busy = 1; //标志忙
|
||||
SET_TI3(); //触发发送中断
|
||||
}
|
||||
}
|
||||
|
||||
C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 7
|
||||
|
||||
void PrintString3(u8 *puts)
|
||||
{
|
||||
for (; *puts != 0; puts++) TX3_write2buff(*puts); //遇到停止符0结束
|
||||
}
|
||||
|
||||
void UART3_int (void) interrupt UART3_VECTOR
|
||||
{
|
||||
if(RI3)
|
||||
{
|
||||
CLR_RI3();
|
||||
if(COM3.B_RX_OK == 0)
|
||||
{
|
||||
if(COM3.RX_Cnt >= COM_RX3_Lenth) COM3.RX_Cnt = 0;
|
||||
RX3_Buffer[COM3.RX_Cnt++] = S3BUF;
|
||||
COM3.RX_TimeOut = TimeOutSet3;
|
||||
}
|
||||
}
|
||||
|
||||
if(TI3)
|
||||
{
|
||||
CLR_TI3();
|
||||
if(COM3.TX_read != COM3.TX_write)
|
||||
{
|
||||
S3BUF = TX3_Buffer[COM3.TX_read];
|
||||
if(++COM3.TX_read >= COM_TX3_Lenth) COM3.TX_read = 0;
|
||||
}
|
||||
else COM3.B_TX_busy = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
391
|
||||
392 /********************* UART4 函数 ************************/
|
||||
393 #ifdef UART4
|
||||
void TX4_write2buff(u8 dat) //写入发送缓冲,指针+1
|
||||
{
|
||||
TX4_Buffer[COM4.TX_write] = dat; //装发送缓冲
|
||||
if(++COM4.TX_write >= COM_TX4_Lenth) COM4.TX_write = 0;
|
||||
|
||||
if(COM4.B_TX_busy == 0) //空闲
|
||||
{
|
||||
COM4.B_TX_busy = 1; //标志忙
|
||||
SET_TI4(); //触发发送中断
|
||||
}
|
||||
}
|
||||
|
||||
void PrintString4(u8 *puts)
|
||||
{
|
||||
for (; *puts != 0; puts++) TX4_write2buff(*puts); //遇到停止符0结束
|
||||
}
|
||||
|
||||
void UART4_int (void) interrupt UART4_VECTOR
|
||||
{
|
||||
if(RI4)
|
||||
{
|
||||
CLR_RI4();
|
||||
if(COM4.B_RX_OK == 0)
|
||||
{
|
||||
if(COM4.RX_Cnt >= COM_RX4_Lenth) COM4.RX_Cnt = 0;
|
||||
RX4_Buffer[COM4.RX_Cnt++] = S4BUF;
|
||||
COM4.RX_TimeOut = TimeOutSet4;
|
||||
}
|
||||
}
|
||||
C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 8
|
||||
|
||||
|
||||
if(TI4)
|
||||
{
|
||||
CLR_TI4();
|
||||
if(COM4.TX_read != COM4.TX_write)
|
||||
{
|
||||
S4BUF = TX4_Buffer[COM4.TX_read];
|
||||
if(++COM4.TX_read >= COM_TX4_Lenth) COM4.TX_read = 0;
|
||||
}
|
||||
else COM4.B_TX_busy = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
436 void UART_config(void)
|
||||
437 {
|
||||
438 1 COMx_InitDefine COMx_InitStructure;
|
||||
439 1 COMx_InitStructure.UART_Mode = UART_8bit_BRTx;
|
||||
440 1 COMx_InitStructure.UART_BRT_Use = BRT_Timer1;
|
||||
441 1 COMx_InitStructure.UART_BaudRate = 115200ul;
|
||||
442 1 COMx_InitStructure.UART_RxEnable = ENABLE;
|
||||
443 1 COMx_InitStructure.BaudRateDouble = DISABLE;
|
||||
444 1 COMx_InitStructure.UART_Interrupt = ENABLE;
|
||||
445 1 COMx_InitStructure.UART_Priority = Priority_0;
|
||||
446 1 COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31;
|
||||
447 1 UART_Configuration(UART1, &COMx_InitStructure);
|
||||
448 1 }
|
||||
449 char putchar(char c)
|
||||
450 {
|
||||
451 1 TX1_write2buff(c);
|
||||
452 1 return c;
|
||||
453 1 }
|
||||
|
||||
|
||||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||||
CODE SIZE = 726 ----
|
||||
CONSTANT SIZE = ---- ----
|
||||
XDATA SIZE = 64 ----
|
||||
PDATA SIZE = ---- ----
|
||||
DATA SIZE = 7 19
|
||||
IDATA SIZE = ---- ----
|
||||
BIT SIZE = ---- ----
|
||||
END OF MODULE INFORMATION.
|
||||
|
||||
|
||||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
419
Listings/common.lst
Normal file
419
Listings/common.lst
Normal file
@ -0,0 +1,419 @@
|
||||
C51 COMPILER V9.60.0.0 COMMON 03/23/2023 16:31:25 PAGE 1
|
||||
|
||||
|
||||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE COMMON
|
||||
OBJECT MODULE PLACED IN .\Objects\common.obj
|
||||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\common.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXT
|
||||
-END PRINT(.\Listings\common.lst) TABS(2) OBJECT(.\Objects\common.obj)
|
||||
|
||||
line level source
|
||||
|
||||
1 #include "common.h"
|
||||
2 #include "GPIO.h"
|
||||
3 #include "tm1650.h"
|
||||
4 #include "STDIO.H"
|
||||
5 #include "EEPROM.h"
|
||||
6 #include "timer.h"
|
||||
7 u8 keyflag = 0;
|
||||
8 u8 sunmode = 1;
|
||||
9 u8 pog = 4;
|
||||
10 u16 keytime = 0;
|
||||
11 u8 keyloog = 0;
|
||||
12 u8 speedmode1 = speedstart, speedmode2 = speedstart, speedmode3 = speedstart, speedmode4 = speedstart, sub
|
||||
-division1 = substart, subdivision2 = substart, subdivision3 = substart, subdivision4 = substart;
|
||||
13 u8 num[9] = 0;
|
||||
14 static void key_add(u8 *speedmode, u8 *subdivision)
|
||||
15 {
|
||||
16 1 u8 key__time = 0;
|
||||
17 1 if (keyloog)
|
||||
18 1 key__time = 100;
|
||||
19 1 else
|
||||
20 1 key__time = 500;
|
||||
21 1 switch (pog)
|
||||
22 1 {
|
||||
23 2 case 1:
|
||||
24 2 break;
|
||||
25 2 case 2:
|
||||
26 2 if (keyflag == 0)
|
||||
27 2 {
|
||||
28 3 *speedmode += 1;
|
||||
29 3 if (*speedmode >= speedmax)
|
||||
30 3 *speedmode = speedmax;
|
||||
31 3 keyflag = 1;
|
||||
32 3 }
|
||||
33 2 if (keytime > key__time)
|
||||
34 2 {
|
||||
35 3 *speedmode += 1;
|
||||
36 3 keytime = 0;
|
||||
37 3 keyloog = 1;
|
||||
38 3 if (*speedmode >= speedmax)
|
||||
39 3 *speedmode = speedmax;
|
||||
40 3 }
|
||||
41 2 break;
|
||||
42 2 case 3:
|
||||
43 2 if (keyflag == 0)
|
||||
44 2 {
|
||||
45 3 *subdivision += 1;
|
||||
46 3 if (*subdivision >= subdivisionmax)
|
||||
47 3 *subdivision = subdivisionmax;
|
||||
48 3 keyflag = 1;
|
||||
49 3 }
|
||||
50 2 if (keytime > key__time)
|
||||
51 2 {
|
||||
52 3 *subdivision += 1;
|
||||
53 3 keytime = 0;
|
||||
C51 COMPILER V9.60.0.0 COMMON 03/23/2023 16:31:25 PAGE 2
|
||||
|
||||
54 3 keyloog = 1;
|
||||
55 3 if (*subdivision >= subdivisionmax)
|
||||
56 3 *subdivision = subdivisionmax;
|
||||
57 3 }
|
||||
58 2 break;
|
||||
59 2 }
|
||||
60 1 }
|
||||
61
|
||||
62 static void key_Redu(u8 *speedmode, u8 *subdivision)
|
||||
63 {
|
||||
64 1 u8 key__time = 0;
|
||||
65 1 if (keyloog)
|
||||
66 1 key__time = 100;
|
||||
67 1 else
|
||||
68 1 key__time = 500;
|
||||
69 1 switch (pog)
|
||||
70 1 {
|
||||
71 2 case 1:
|
||||
72 2 break;
|
||||
73 2 case 2:
|
||||
74 2 if (keyflag == 0)
|
||||
75 2 {
|
||||
76 3 *speedmode -= 1;
|
||||
77 3 if (*speedmode <= speedmin)
|
||||
78 3 *speedmode = speedmin;
|
||||
79 3 keyflag = 1;
|
||||
80 3 }
|
||||
81 2 if (keytime > key__time)
|
||||
82 2 {
|
||||
83 3 *speedmode -= 1;
|
||||
84 3 keytime = 0;
|
||||
85 3 keyloog = 1;
|
||||
86 3 if (*speedmode <= speedmin)
|
||||
87 3 *speedmode = speedmin;
|
||||
88 3 }
|
||||
89 2 break;
|
||||
90 2 case 3:
|
||||
91 2 if (keyflag == 0)
|
||||
92 2 {
|
||||
93 3 if (*subdivision <= subdivisionmin)
|
||||
94 3 *subdivision = subdivisionmin;
|
||||
95 3 else
|
||||
96 3 *subdivision -= 1;
|
||||
97 3 keyflag = 1;
|
||||
98 3 }
|
||||
99 2 if (keytime > key__time)
|
||||
100 2 {
|
||||
101 3 keytime = 0;
|
||||
102 3 keyloog = 1;
|
||||
103 3 if (*subdivision <= subdivisionmin)
|
||||
104 3 *subdivision = subdivisionmin;
|
||||
105 3 else
|
||||
106 3 *subdivision -= 1;
|
||||
107 3 }
|
||||
108 2 break;
|
||||
109 2 }
|
||||
110 1 }
|
||||
111 void keyscan()
|
||||
112 {
|
||||
113 1 if (k1 == 0)
|
||||
114 1 if (keyflag == 0)
|
||||
115 1 {
|
||||
C51 COMPILER V9.60.0.0 COMMON 03/23/2023 16:31:25 PAGE 3
|
||||
|
||||
116 2 timex = 400 * subdivision1;
|
||||
117 2 DIR = 1;
|
||||
118 2 sunmode = 1;
|
||||
119 2 keyflag = 1;
|
||||
120 2 setconfig();
|
||||
121 2 }
|
||||
122 1 if (k2 == 0)
|
||||
123 1 if (keyflag == 0)
|
||||
124 1 {
|
||||
125 2 timex = 400 * subdivision2;
|
||||
126 2 DIR = 0;
|
||||
127 2 sunmode = 2;
|
||||
128 2 keyflag = 1;
|
||||
129 2 setconfig();
|
||||
130 2 }
|
||||
131 1 if (k3 == 0)
|
||||
132 1 if (keyflag == 0)
|
||||
133 1 {
|
||||
134 2 timex = 800 <<subdivision3;
|
||||
135 2 DIR = 1;
|
||||
136 2 sunmode = 3;
|
||||
137 2 keyflag = 1;
|
||||
138 2 setconfig();
|
||||
139 2 }
|
||||
140 1 if (k4 == 0)
|
||||
141 1 if (keyflag == 0)
|
||||
142 1 {
|
||||
143 2 timex = 0;
|
||||
144 2 sunmode = 4;
|
||||
145 2 keyflag = 1;
|
||||
146 2 setconfig();
|
||||
147 2 }
|
||||
148 1 if (k5 == 0)
|
||||
149 1 {
|
||||
150 2 if (keyflag == 0)
|
||||
151 2 {
|
||||
152 3 switch (pog)
|
||||
153 3 {
|
||||
154 4 case 1:
|
||||
155 4 pog = 2;
|
||||
156 4 break;
|
||||
157 4 case 2:
|
||||
158 4 pog = 3;
|
||||
159 4 break;
|
||||
160 4 case 3:
|
||||
161 4 pog = 4;
|
||||
162 4 setconfig();
|
||||
163 4 break;
|
||||
164 4 case 4:
|
||||
165 4 pog = 2;
|
||||
166 4 break;
|
||||
167 4 }
|
||||
168 3 keyflag = 1;
|
||||
169 3 }
|
||||
170 2 }
|
||||
171 1 if (k6 == 0)
|
||||
172 1 {
|
||||
173 2 switch (sunmode)
|
||||
174 2 {
|
||||
175 3 case 1:
|
||||
176 3 key_add(&speedmode1, &subdivision1);
|
||||
177 3 break;
|
||||
C51 COMPILER V9.60.0.0 COMMON 03/23/2023 16:31:25 PAGE 4
|
||||
|
||||
178 3 case 2:
|
||||
179 3 key_add(&speedmode2, &subdivision2);
|
||||
180 3 break;
|
||||
181 3 case 3:
|
||||
182 3 key_add(&speedmode3, &subdivision3);
|
||||
183 3 break;
|
||||
184 3 case 4:
|
||||
185 3 key_add(&speedmode4, &subdivision4);
|
||||
186 3 break;
|
||||
187 3 }
|
||||
188 2 }
|
||||
189 1 if (k7 == 0)
|
||||
190 1 {
|
||||
191 2 switch (sunmode)
|
||||
192 2 {
|
||||
193 3 case 1:
|
||||
194 3 key_Redu(&speedmode1, &subdivision1);
|
||||
195 3 break;
|
||||
196 3 case 2:
|
||||
197 3 key_Redu(&speedmode2, &subdivision2);
|
||||
198 3 break;
|
||||
199 3 case 3:
|
||||
200 3 key_Redu(&speedmode3, &subdivision3);
|
||||
201 3 break;
|
||||
202 3 case 4:
|
||||
203 3 key_Redu(&speedmode4, &subdivision4);
|
||||
204 3 break;
|
||||
205 3 }
|
||||
206 2 }
|
||||
207 1 if (k8 == 0)
|
||||
208 1 {
|
||||
209 2 if (keyflag == 0)
|
||||
210 2 {
|
||||
211 3 if (pog != 1)
|
||||
212 3 pog = 1;
|
||||
213 3 else
|
||||
214 3 pog = 4;
|
||||
215 3 setconfig();
|
||||
216 3 keyflag = 1;
|
||||
217 3 switch (sunmode)
|
||||
218 3 {
|
||||
219 4 case 1:
|
||||
220 4 timex = 400 << subdivision1;
|
||||
221 4 DIR = 1;
|
||||
222 4 break;
|
||||
223 4 case 2:
|
||||
224 4 timex = 400 << subdivision2;
|
||||
225 4 DIR = 0;
|
||||
226 4 break;
|
||||
227 4 case 3:
|
||||
228 4 timex = 800 << subdivision3;
|
||||
229 4 DIR = 1;
|
||||
230 4 break;
|
||||
231 4 case 4:
|
||||
232 4 break;
|
||||
233 4 }
|
||||
234 3 }
|
||||
235 2 }
|
||||
236 1 if (k1 != 0 & k2 != 0 & k3 != 0 & k4 != 0 & k5 != 0 & k6 != 0 & k7 != 0 & k8 != 0)
|
||||
237 1 {
|
||||
238 2 keyflag = 0;
|
||||
239 2 keyloog = 0;
|
||||
C51 COMPILER V9.60.0.0 COMMON 03/23/2023 16:31:25 PAGE 5
|
||||
|
||||
240 2 }
|
||||
241 1 }
|
||||
242 static void dislittleplay(u8 speedmode, u16 subdivision)
|
||||
243 {
|
||||
244 1 switch (pog)
|
||||
245 1 {
|
||||
246 2 case 1:
|
||||
247 2 TM1650_printpogrun(sunmode, displaydata);
|
||||
248 2 break;
|
||||
249 2 case 2:
|
||||
250 2 TM1650_print_SMG1(speedmode);
|
||||
251 2 break;
|
||||
252 2 case 3:
|
||||
253 2 TM1650_print_SMG2(subdivision);
|
||||
254 2 break;
|
||||
255 2 case 4:
|
||||
256 2 TM1650_printpogstop(sunmode);
|
||||
257 2 break;
|
||||
258 2 }
|
||||
259 1 }
|
||||
260 void display()
|
||||
261 {
|
||||
262 1 switch (sunmode)
|
||||
263 1 {
|
||||
264 2 case 1:
|
||||
265 2 dislittleplay(speedmode1, (u16)(1 << subdivision1));
|
||||
266 2 break;
|
||||
267 2 case 2:
|
||||
268 2 dislittleplay(speedmode2, (u16)(1 << subdivision2));
|
||||
269 2 break;
|
||||
270 2 case 3:
|
||||
271 2 dislittleplay(speedmode3, (u16)(1 << subdivision3));
|
||||
272 2 break;
|
||||
273 2 case 4:
|
||||
274 2 dislittleplay(speedmode4, (u16)(1 << subdivision4));
|
||||
275 2 break;
|
||||
276 2 }
|
||||
277 1 }
|
||||
278 void shuju()
|
||||
279 {
|
||||
280 1
|
||||
281 1 switch (sunmode)
|
||||
282 1 {
|
||||
283 2 case 1:
|
||||
284 2 if (((u16)(speedmode1 * 20 * (1 << subdivision1) / 3)) < 400)
|
||||
285 2 {
|
||||
286 3 Timer0_12T();
|
||||
287 3 T0_Load(65536UL - (MAIN_Fosc / ((u32)speedmode1 * 80 * (1 << subdivision1))));
|
||||
288 3 }
|
||||
289 2 else
|
||||
290 2 {
|
||||
291 3 Timer0_1T();
|
||||
292 3 T0_Load(65536UL - (MAIN_Fosc / ((u32)speedmode1 * 20 * (1 << subdivision1) / 3)));
|
||||
293 3 }
|
||||
294 2 break;
|
||||
295 2 case 2:
|
||||
296 2 if ((u16)(speedmode2 * 20 * (1 << subdivision2) / 3) < 400)
|
||||
297 2 {
|
||||
298 3 Timer0_12T();
|
||||
299 3 T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode2 * 80 * (1 << subdivision2))));
|
||||
300 3 }
|
||||
301 2 else
|
||||
C51 COMPILER V9.60.0.0 COMMON 03/23/2023 16:31:25 PAGE 6
|
||||
|
||||
302 2 {
|
||||
303 3 Timer0_1T();
|
||||
304 3 T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode2 * 20 * (1 << subdivision2) / 3)));
|
||||
305 3 }
|
||||
306 2 break;
|
||||
307 2 case 3:
|
||||
308 2 if ((u16)(speedmode3 * 20 * (1 << subdivision3) / 3) < 400)
|
||||
309 2 {
|
||||
310 3 Timer0_12T();
|
||||
311 3 T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode3 * 80 * (1 << subdivision3))));
|
||||
312 3 }
|
||||
313 2 else
|
||||
314 2 {
|
||||
315 3 Timer0_1T();
|
||||
316 3 T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode3 * 20 * (1 << subdivision3) / 3)));
|
||||
317 3 }
|
||||
318 2 break;
|
||||
319 2 case 4:
|
||||
320 2 if ((u16)(speedmode4 * 20 * (1 << subdivision4) / 3) < 400)
|
||||
321 2 {
|
||||
322 3 Timer0_12T();
|
||||
323 3 T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode4 * 80 * (1 << subdivision4))));
|
||||
324 3 }
|
||||
325 2 else
|
||||
326 2 {
|
||||
327 3 Timer0_1T();
|
||||
328 3 T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode4 * 20 * (1 << subdivision4) / 3)));
|
||||
329 3 }
|
||||
330 2 break;
|
||||
331 2 }
|
||||
332 1 }
|
||||
333 void run()
|
||||
334 {
|
||||
335 1 switch (pog)
|
||||
336 1 {
|
||||
337 2 case 1:
|
||||
338 2 if (timex == 0)
|
||||
339 2 pog = 4;
|
||||
340 2 EN = 0;
|
||||
341 2 break;
|
||||
342 2 case 2:
|
||||
343 2 EN = 1;
|
||||
344 2 break;
|
||||
345 2 case 3:
|
||||
346 2 EN = 1;
|
||||
347 2 break;
|
||||
348 2 case 4:
|
||||
349 2 EN = 1;
|
||||
350 2 break;
|
||||
351 2 }
|
||||
352 1 }
|
||||
353 void getconfig()
|
||||
354 {
|
||||
355 1 EEPROM_read_n(MYaddress, num, 9);
|
||||
356 1 if (num[0] != 255)
|
||||
357 1 {
|
||||
358 2 speedmode1 = num[0];
|
||||
359 2 speedmode2 = num[1];
|
||||
360 2 speedmode3 = num[2];
|
||||
361 2 speedmode4 = num[3];
|
||||
362 2 subdivision1 = num[4];
|
||||
363 2 subdivision2 = num[5];
|
||||
C51 COMPILER V9.60.0.0 COMMON 03/23/2023 16:31:25 PAGE 7
|
||||
|
||||
364 2 subdivision3 = num[6];
|
||||
365 2 subdivision4 = num[7];
|
||||
366 2 sunmode = num[8];
|
||||
367 2 }
|
||||
368 1 }
|
||||
369 void setconfig()
|
||||
370 {
|
||||
371 1 EEPROM_SectorErase(MYaddress);
|
||||
372 1 num[0] = speedmode1;
|
||||
373 1 num[1] = speedmode2;
|
||||
374 1 num[2] = speedmode3;
|
||||
375 1 num[3] = speedmode4;
|
||||
376 1 num[4] = subdivision1;
|
||||
377 1 num[5] = subdivision2;
|
||||
378 1 num[6] = subdivision3;
|
||||
379 1 num[7] = subdivision4;
|
||||
380 1 num[8] = sunmode;
|
||||
381 1 EEPROM_write_n(MYaddress, num, 9);
|
||||
382 1 }
|
||||
|
||||
|
||||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||||
CODE SIZE = 2668 ----
|
||||
CONSTANT SIZE = ---- ----
|
||||
XDATA SIZE = ---- ----
|
||||
PDATA SIZE = ---- ----
|
||||
DATA SIZE = 23 15
|
||||
IDATA SIZE = ---- ----
|
||||
BIT SIZE = ---- ----
|
||||
END OF MODULE INFORMATION.
|
||||
|
||||
|
||||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
82
Listings/delay.lst
Normal file
82
Listings/delay.lst
Normal file
@ -0,0 +1,82 @@
|
||||
C51 COMPILER V9.60.0.0 DELAY 03/23/2023 13:25:30 PAGE 1
|
||||
|
||||
|
||||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE DELAY
|
||||
OBJECT MODULE PLACED IN .\Objects\delay.obj
|
||||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\delay.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTE
|
||||
-ND PRINT(.\Listings\delay.lst) TABS(2) OBJECT(.\Objects\delay.obj)
|
||||
|
||||
line level source
|
||||
|
||||
1 /*---------------------------------------------------------------------*/
|
||||
2 /* --- STC MCU Limited ------------------------------------------------*/
|
||||
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
9 /* --- QQ: 800003751 -------------------------------------------------*/
|
||||
10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
11 /*---------------------------------------------------------------------*/
|
||||
12
|
||||
13 /*************** 功能说明 ****************
|
||||
14
|
||||
15 本文件为STC8系列的延时程序,用户几乎可以不修改这个程序.
|
||||
16
|
||||
17 ******************************************/
|
||||
18
|
||||
19 #include "delay.h"
|
||||
20
|
||||
21 //========================================================================
|
||||
22 // 函数: void delay_ms(unsigned char ms)
|
||||
23 // 描述: 延时函数。
|
||||
24 // 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
|
||||
25 // 返回: none.
|
||||
26 // 版本: VER1.0
|
||||
27 // 日期: 2021-3-9
|
||||
28 // 备注:
|
||||
29 //========================================================================
|
||||
30 void delay_ms(unsigned char ms)
|
||||
31 {
|
||||
32 1 unsigned int i;
|
||||
33 1 do{
|
||||
34 2 i = MAIN_Fosc / 10000;
|
||||
35 2 while(--i);
|
||||
36 2 }while(--ms);
|
||||
37 1 }
|
||||
38 void Delay4us() //@11.0592MHz
|
||||
39 {
|
||||
40 1 unsigned char i;
|
||||
41 1
|
||||
42 1 _nop_();
|
||||
43 1 _nop_();
|
||||
44 1 i = 12;
|
||||
45 1 while (--i)
|
||||
46 1 ;
|
||||
47 1 }
|
||||
48 void Delay2us() //@11.0592MHz
|
||||
49 {
|
||||
50 1 unsigned char i;
|
||||
51 1
|
||||
52 1 _nop_();
|
||||
53 1 i = 5;
|
||||
54 1 while (--i)
|
||||
C51 COMPILER V9.60.0.0 DELAY 03/23/2023 13:25:30 PAGE 2
|
||||
|
||||
55 1 ;
|
||||
56 1 }
|
||||
|
||||
|
||||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||||
CODE SIZE = 29 ----
|
||||
CONSTANT SIZE = ---- ----
|
||||
XDATA SIZE = ---- ----
|
||||
PDATA SIZE = ---- ----
|
||||
DATA SIZE = ---- ----
|
||||
IDATA SIZE = ---- ----
|
||||
BIT SIZE = ---- ----
|
||||
END OF MODULE INFORMATION.
|
||||
|
||||
|
||||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
52
Listings/main.lst
Normal file
52
Listings/main.lst
Normal file
@ -0,0 +1,52 @@
|
||||
C51 COMPILER V9.60.0.0 MAIN 03/23/2023 15:55:27 PAGE 1
|
||||
|
||||
|
||||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE MAIN
|
||||
OBJECT MODULE PLACED IN .\Objects\main.obj
|
||||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\main.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEN
|
||||
-D PRINT(.\Listings\main.lst) TABS(2) OBJECT(.\Objects\main.obj)
|
||||
|
||||
line level source
|
||||
|
||||
1 #include "config.h"
|
||||
2 #include "GPIO.h"
|
||||
3 #include "tm1650.h"
|
||||
4 #include "timer.h"
|
||||
5 #include "UART.h"
|
||||
6 #include "STDIO.H"
|
||||
7 #include "delay.h"
|
||||
8 #include "common.h"
|
||||
9 #include "EEPROM.h"
|
||||
10
|
||||
11 void main()
|
||||
12 {
|
||||
13 1 TM1650_init();
|
||||
14 1 Timer_config();
|
||||
15 1 GPIO_config();
|
||||
16 1 UART_config();
|
||||
17 1 getconfig();
|
||||
18 1 EA = 1;
|
||||
19 1 delay_ms(10);
|
||||
20 1 while (1)
|
||||
21 1 {
|
||||
22 2 shuju();
|
||||
23 2 keyscan();
|
||||
24 2 display();
|
||||
25 2 run();
|
||||
26 2 printf("%d\r\n", timex);
|
||||
27 2 }
|
||||
28 1 }
|
||||
|
||||
|
||||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||||
CODE SIZE = 57 ----
|
||||
CONSTANT SIZE = 5 ----
|
||||
XDATA SIZE = ---- ----
|
||||
PDATA SIZE = ---- ----
|
||||
DATA SIZE = ---- ----
|
||||
IDATA SIZE = ---- ----
|
||||
BIT SIZE = ---- ----
|
||||
END OF MODULE INFORMATION.
|
||||
|
||||
|
||||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
312
Listings/timer.lst
Normal file
312
Listings/timer.lst
Normal file
@ -0,0 +1,312 @@
|
||||
C51 COMPILER V9.60.0.0 TIMER 03/23/2023 16:31:25 PAGE 1
|
||||
|
||||
|
||||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE TIMER
|
||||
OBJECT MODULE PLACED IN .\Objects\timer.obj
|
||||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\timer.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTE
|
||||
-ND PRINT(.\Listings\timer.lst) TABS(2) OBJECT(.\Objects\timer.obj)
|
||||
|
||||
line level source
|
||||
|
||||
1 /*---------------------------------------------------------------------*/
|
||||
2 /* --- STC MCU Limited ------------------------------------------------*/
|
||||
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
9 /* --- QQ: 800003751 -------------------------------------------------*/
|
||||
10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
11 /*---------------------------------------------------------------------*/
|
||||
12
|
||||
13 /************* 功能说明 **************
|
||||
14
|
||||
15 本文件为STC8系列的定时器初始化和中断程序,用户可以在这个文件中修改自己需要的中断程序.
|
||||
16
|
||||
17 ******************************************/
|
||||
18
|
||||
19 #include "timer.h"
|
||||
20 #include "GPIO.h"
|
||||
21 #include "common.h"
|
||||
22 u32 timex;
|
||||
23 static u16 displaytime = 0;
|
||||
24 u8 displaydata = 0;
|
||||
25 /********************* Timer0中断函数************************/
|
||||
26 void timer0_int(void) interrupt TIMER0_VECTOR
|
||||
27 {
|
||||
28 1 if (sunmode == 3)
|
||||
29 1 {
|
||||
30 2 if (timex <= 400 << subdivision3)
|
||||
31 2 DIR = 0;
|
||||
32 2 }
|
||||
33 1 if (timex <= 0)
|
||||
34 1 timex = 0;
|
||||
35 1 else
|
||||
36 1 {
|
||||
37 2
|
||||
38 2 if (pog == 1)
|
||||
39 2 {
|
||||
40 3 timex--;
|
||||
41 3 PUL = ~PUL;
|
||||
42 3 }
|
||||
43 2 }
|
||||
44 1 }
|
||||
45
|
||||
46 /********************* Timer1中断函数************************/
|
||||
47 void timer1_int(void) interrupt TIMER1_VECTOR
|
||||
48 {
|
||||
49 1 }
|
||||
50
|
||||
51 /********************* Timer2中断函数************************/
|
||||
52 void timer2_int(void) interrupt TIMER2_VECTOR
|
||||
53 {
|
||||
54 1 displaytime++;
|
||||
C51 COMPILER V9.60.0.0 TIMER 03/23/2023 16:31:25 PAGE 2
|
||||
|
||||
55 1 if (displaytime >= 200)
|
||||
56 1 {
|
||||
57 2 if (DIR)
|
||||
58 2 {
|
||||
59 3 if (displaydata >= 7)
|
||||
60 3 displaydata = 0;
|
||||
61 3 else
|
||||
62 3 displaydata++;
|
||||
63 3 }
|
||||
64 2 else
|
||||
65 2 {
|
||||
66 3 if (displaydata <= 0)
|
||||
67 3 displaydata = 7;
|
||||
68 3 else
|
||||
69 3 displaydata--;
|
||||
70 3 }
|
||||
71 2 displaytime = 0;
|
||||
72 2 }
|
||||
73 1 if (keyflag)
|
||||
74 1 keytime++;
|
||||
75 1 else
|
||||
76 1 keytime = 0;
|
||||
77 1 }
|
||||
78
|
||||
79 /********************* Timer3中断函数************************/
|
||||
80 void timer3_int(void) interrupt TIMER3_VECTOR
|
||||
81 {
|
||||
82 1 }
|
||||
83
|
||||
84 /********************* Timer4中断函数************************/
|
||||
85 void timer4_int(void) interrupt TIMER4_VECTOR
|
||||
86 {
|
||||
87 1 }
|
||||
88
|
||||
89 //========================================================================
|
||||
90 // 函数: u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)
|
||||
91 // 描述: 定时器初始化程序.
|
||||
92 // 参数: TIMx: 结构参数,请参考timer.h里的定义.
|
||||
93 // 返回: 成功返回0, 空操作返回1,错误返回2.
|
||||
94 // 版本: V1.0, 2012-10-22
|
||||
95 //========================================================================
|
||||
96 u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)
|
||||
97 {
|
||||
98 1 if (TIM > Timer4)
|
||||
99 1 return 1; // 空操作
|
||||
100 1
|
||||
101 1 if (TIM == Timer0)
|
||||
102 1 {
|
||||
103 2 Timer0_Stop(); // 停止计数
|
||||
104 2 if (TIMx->TIM_Interrupt == ENABLE)
|
||||
105 2 Timer0_InterruptEnable(); // 允许中断
|
||||
106 2 else
|
||||
107 2 Timer0_InterruptDisable(); // 禁止中断
|
||||
108 2 if (TIMx->TIM_Priority > Priority_3)
|
||||
109 2 return 2; // 错误
|
||||
110 2 Timer0_Priority(TIMx->TIM_Priority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Pr
|
||||
-iority_3
|
||||
111 2
|
||||
112 2 if (TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask)
|
||||
113 2 return 2; // 错误
|
||||
114 2 TMOD = (TMOD & ~0x03) | TIMx->TIM_Mode; // 工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动<E887AA>
|
||||
-刈<>, 3: 不可屏蔽16位自动重装
|
||||
C51 COMPILER V9.60.0.0 TIMER 03/23/2023 16:31:25 PAGE 3
|
||||
|
||||
115 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T)
|
||||
116 2 Timer0_12T(); // 12T
|
||||
117 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T)
|
||||
118 2 Timer0_1T(); // 1T
|
||||
119 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext)
|
||||
120 2 Timer0_AsCounter(); // 对外计数或分频
|
||||
121 2 else
|
||||
122 2 Timer0_AsTimer(); // 定时
|
||||
123 2 if (TIMx->TIM_ClkOut == ENABLE)
|
||||
124 2 Timer0_CLKO_Enable(); // 输出时钟
|
||||
125 2 else
|
||||
126 2 Timer0_CLKO_Disable(); // 不输出时钟
|
||||
127 2
|
||||
128 2 T0_Load(TIMx->TIM_Value);
|
||||
129 2 if (TIMx->TIM_Run == ENABLE)
|
||||
130 2 Timer0_Run(); // 开始运行
|
||||
131 2 return 0; // 成功
|
||||
132 2 }
|
||||
133 1
|
||||
134 1 if (TIM == Timer1)
|
||||
135 1 {
|
||||
136 2 Timer1_Stop(); // 停止计数
|
||||
137 2 if (TIMx->TIM_Interrupt == ENABLE)
|
||||
138 2 Timer1_InterruptEnable(); // 允许中断
|
||||
139 2 else
|
||||
140 2 Timer1_InterruptDisable(); // 禁止中断
|
||||
141 2 if (TIMx->TIM_Priority > Priority_3)
|
||||
142 2 return 2; // 错误
|
||||
143 2 Timer1_Priority(TIMx->TIM_Priority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Pr
|
||||
-iority_3
|
||||
144 2 if (TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask)
|
||||
145 2 return 2; // 错误
|
||||
146 2 TMOD = (TMOD & ~0x30) | (TIMx->TIM_Mode << 4); // 工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8
|
||||
-位自动重装, 3: 停止工作
|
||||
147 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T)
|
||||
148 2 Timer1_12T(); // 12T
|
||||
149 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T)
|
||||
150 2 Timer1_1T(); // 1T
|
||||
151 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext)
|
||||
152 2 Timer1_AsCounter(); // 对外计数或分频
|
||||
153 2 else
|
||||
154 2 Timer1_AsTimer(); // 定时
|
||||
155 2 if (TIMx->TIM_ClkOut == ENABLE)
|
||||
156 2 Timer1_CLKO_Enable(); // 输出时钟
|
||||
157 2 else
|
||||
158 2 Timer1_CLKO_Disable(); // 不输出时钟
|
||||
159 2
|
||||
160 2 T1_Load(TIMx->TIM_Value);
|
||||
161 2 if (TIMx->TIM_Run == ENABLE)
|
||||
162 2 Timer1_Run(); // 开始运行
|
||||
163 2 return 0; // 成功
|
||||
164 2 }
|
||||
165 1
|
||||
166 1 if (TIM == Timer2) // Timer2,固定为16位自动重装, 中断无优先级
|
||||
167 1 {
|
||||
168 2 Timer2_Stop(); // 停止计数
|
||||
169 2 if (TIMx->TIM_Interrupt == ENABLE)
|
||||
170 2 Timer2_InterruptEnable(); // 允许中断
|
||||
171 2 else
|
||||
172 2 Timer2_InterruptDisable(); // 禁止中断
|
||||
173 2 if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext)
|
||||
174 2 return 2;
|
||||
C51 COMPILER V9.60.0.0 TIMER 03/23/2023 16:31:25 PAGE 4
|
||||
|
||||
175 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T)
|
||||
176 2 Timer2_12T(); // 12T
|
||||
177 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T)
|
||||
178 2 Timer2_1T(); // 1T
|
||||
179 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext)
|
||||
180 2 Timer2_AsCounter(); // 对外计数或分频
|
||||
181 2 else
|
||||
182 2 Timer2_AsTimer(); // 定时
|
||||
183 2 if (TIMx->TIM_ClkOut == ENABLE)
|
||||
184 2 Timer2_CLKO_Enable(); // 输出时钟
|
||||
185 2 else
|
||||
186 2 Timer2_CLKO_Disable(); // 不输出时钟
|
||||
187 2
|
||||
188 2 T2_Load(TIMx->TIM_Value);
|
||||
189 2 if (TIMx->TIM_Run == ENABLE)
|
||||
190 2 Timer2_Run(); // 开始运行
|
||||
191 2 return 0; // 成功
|
||||
192 2 }
|
||||
193 1
|
||||
194 1 if (TIM == Timer3) // Timer3,固定为16位自动重装, 中断无优先级
|
||||
195 1 {
|
||||
196 2 Timer3_Stop(); // 停止计数
|
||||
197 2 if (TIMx->TIM_Interrupt == ENABLE)
|
||||
198 2 Timer3_InterruptEnable(); // 允许中断
|
||||
199 2 else
|
||||
200 2 Timer3_InterruptDisable(); // 禁止中断
|
||||
201 2 if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext)
|
||||
202 2 return 2;
|
||||
203 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T)
|
||||
204 2 Timer3_12T(); // 12T
|
||||
205 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T)
|
||||
206 2 Timer3_1T(); // 1T
|
||||
207 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext)
|
||||
208 2 Timer3_AsCounter(); // 对外计数或分频
|
||||
209 2 else
|
||||
210 2 Timer3_AsTimer(); // 定时
|
||||
211 2 if (TIMx->TIM_ClkOut == ENABLE)
|
||||
212 2 Timer3_CLKO_Enable(); // 输出时钟
|
||||
213 2 else
|
||||
214 2 Timer3_CLKO_Disable(); // 不输出时钟
|
||||
215 2
|
||||
216 2 T3_Load(TIMx->TIM_Value);
|
||||
217 2 if (TIMx->TIM_Run == ENABLE)
|
||||
218 2 Timer3_Run(); // 开始运行
|
||||
219 2 return 0; // 成功
|
||||
220 2 }
|
||||
221 1
|
||||
222 1 if (TIM == Timer4) // Timer3,固定为16位自动重装, 中断无优先级
|
||||
223 1 {
|
||||
224 2 Timer4_Stop(); // 停止计数
|
||||
225 2 if (TIMx->TIM_Interrupt == ENABLE)
|
||||
226 2 Timer4_InterruptEnable(); // 允许中断
|
||||
227 2 else
|
||||
228 2 Timer4_InterruptDisable(); // 禁止中断
|
||||
229 2 if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext)
|
||||
230 2 return 2;
|
||||
231 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T)
|
||||
232 2 Timer4_12T(); // 12T
|
||||
233 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T)
|
||||
234 2 Timer4_1T(); // 1T
|
||||
235 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext)
|
||||
236 2 Timer4_AsCounter(); // 对外计数或分频
|
||||
C51 COMPILER V9.60.0.0 TIMER 03/23/2023 16:31:25 PAGE 5
|
||||
|
||||
237 2 else
|
||||
238 2 Timer4_AsTimer(); // 定时
|
||||
239 2 if (TIMx->TIM_ClkOut == ENABLE)
|
||||
240 2 Timer4_CLKO_Enable(); // 输出时钟
|
||||
241 2 else
|
||||
242 2 Timer4_CLKO_Disable(); // 不输出时钟
|
||||
243 2
|
||||
244 2 T4_Load(TIMx->TIM_Value);
|
||||
245 2 if (TIMx->TIM_Run == ENABLE)
|
||||
246 2 Timer4_Run(); // 开始运行
|
||||
247 2 return 0; // 成功
|
||||
248 2 }
|
||||
249 1 return 2; // 错误
|
||||
250 1 }
|
||||
251 /************************ ?¨?±?÷???? ****************************/
|
||||
252 void Timer_config(void)
|
||||
253 {
|
||||
254 1 TIM_InitTypeDef TIM_InitStructure; //?á???¨??
|
||||
255 1 TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //???¨?¤×÷????, TIM_16BitAutoRel
|
||||
-oad,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
|
||||
256 1 TIM_InitStructure.TIM_Priority = Priority_0; //???¨??????????(??????) Priority_0,P
|
||||
-riority_1,Priority_2,Priority_3
|
||||
257 1 TIM_InitStructure.TIM_Interrupt = ENABLE; //??????·????í, ENABLE?òDISABLE
|
||||
258 1 TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //???¨?±????, TIM_CLOCK_1T,TIM_C
|
||||
-LOCK_12T,TIM_CLOCK_Ext
|
||||
259 1 TIM_InitStructure.TIM_ClkOut = DISABLE; //??·?????????????, ENABLE?òDISABLE
|
||||
260 1 TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 100000UL); //????,
|
||||
261 1 TIM_InitStructure.TIM_Run = ENABLE; //??·????????ó?????¨?±?÷, ENABLE?
|
||||
-òDISABLE
|
||||
262 1 Timer_Inilize(Timer0, &TIM_InitStructure); //??????Timer0 Timer0,Timer1,Timer2,
|
||||
-Timer3,Timer4
|
||||
263 1
|
||||
264 1 TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //???¨?±????, TIM_CLOCK_1T,TIM_CLO
|
||||
-CK_12T,TIM_CLOCK_Ext
|
||||
265 1 TIM_InitStructure.TIM_ClkOut = DISABLE; //??·?????????????, ENABLE?òDISABLE
|
||||
266 1 TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 1000UL); //????,
|
||||
267 1 TIM_InitStructure.TIM_Run = ENABLE; //??·????????ó?????¨?±?÷, ENABLE?ò
|
||||
-DISABLE
|
||||
268 1 Timer_Inilize(Timer2, &TIM_InitStructure);
|
||||
269 1 }
|
||||
|
||||
|
||||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||||
CODE SIZE = 1127 ----
|
||||
CONSTANT SIZE = ---- ----
|
||||
XDATA SIZE = ---- ----
|
||||
PDATA SIZE = ---- ----
|
||||
DATA SIZE = 7 8
|
||||
IDATA SIZE = ---- ----
|
||||
BIT SIZE = ---- ----
|
||||
END OF MODULE INFORMATION.
|
||||
|
||||
|
||||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
225
Listings/tm1650.lst
Normal file
225
Listings/tm1650.lst
Normal file
@ -0,0 +1,225 @@
|
||||
C51 COMPILER V9.60.0.0 TM1650 03/23/2023 15:55:27 PAGE 1
|
||||
|
||||
|
||||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE TM1650
|
||||
OBJECT MODULE PLACED IN .\Objects\tm1650.obj
|
||||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\tm1650.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXT
|
||||
-END PRINT(.\Listings\tm1650.lst) TABS(2) OBJECT(.\Objects\tm1650.obj)
|
||||
|
||||
line level source
|
||||
|
||||
1 #include "tm1650.h"
|
||||
2 #include "delay.h"
|
||||
3 #include "timer.h"
|
||||
4 // 往一个指定的数码管位写入指定的显示数据
|
||||
5 // 共阴数码管段码表:
|
||||
6 // const unsigned char TUBE_TABLE_0[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
|
||||
- //共阴,0~9的数字
|
||||
7 const unsigned char TUBE_TABLE_0[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77,
|
||||
-0x7c, 0x39, 0x5e, 0x79, 0x71}; // 共阴,0~9~A~F
|
||||
8 const unsigned char TUBE_TABLE_1[16]={0x01,0x21,0x30,0x18,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x0
|
||||
-c,0x06,0x03};
|
||||
9 // 产生IIC总线起始信号
|
||||
10 static void TM1650_IIC_start(void)
|
||||
11 {
|
||||
12 1 scl = 1; // SCL=1
|
||||
13 1 sda = 1; // SDA=1
|
||||
14 1 Delay4us();
|
||||
15 1 sda = 0; // SDA=0
|
||||
16 1 Delay4us();
|
||||
17 1 scl = 0; // SCL=0
|
||||
18 1 }
|
||||
19 // 产生IIC总线结束信号
|
||||
20 static void TM1650_IIC_stop(void)
|
||||
21 {
|
||||
22 1 scl = 0; // SCL=0
|
||||
23 1 sda = 0; // SDA=0
|
||||
24 1 Delay4us();
|
||||
25 1 scl = 1; // SCL=1
|
||||
26 1 Delay4us();
|
||||
27 1 sda = 1; // SDA=1
|
||||
28 1 }
|
||||
29 // 通过IIC总线发送一个字节
|
||||
30 static void TM1650_IIC_write_byte(unsigned char dat)
|
||||
31 {
|
||||
32 1 unsigned char i;
|
||||
33 1 scl = 0;
|
||||
34 1 for (i = 0; i < 8; i++)
|
||||
35 1 {
|
||||
36 2 do
|
||||
37 2 {
|
||||
38 3 if (dat & 0x80)
|
||||
39 3 sda = 1; // SDA=1
|
||||
40 3 else
|
||||
41 3 sda = 0;
|
||||
42 3 } while (0);
|
||||
43 2 dat <<= 1;
|
||||
44 2 Delay2us();
|
||||
45 2 scl = 1;
|
||||
46 2 Delay2us();
|
||||
47 2 scl = 0;
|
||||
48 2 Delay2us();
|
||||
49 2 }
|
||||
50 1 }
|
||||
51 // 通过IIC总线接收从机响应的ACK信号
|
||||
C51 COMPILER V9.60.0.0 TM1650 03/23/2023 15:55:27 PAGE 2
|
||||
|
||||
52 static unsigned char TM1650_IIC_wait_ack(void)
|
||||
53 {
|
||||
54 1 unsigned char ack_signal = 0;
|
||||
55 1 sda = 1; // SDA=1
|
||||
56 1 Delay2us();
|
||||
57 1 ack_signal = sda;
|
||||
58 1 scl = 1;
|
||||
59 1 Delay2us();
|
||||
60 1 // if(sda == 0)
|
||||
61 1 // ack_signal = 1; //如果读取到的是NACK信号
|
||||
62 1 scl = 0;
|
||||
63 1 Delay2us();
|
||||
64 1 return ack_signal;
|
||||
65 1 }
|
||||
66
|
||||
67 // 作用:设置显示参数
|
||||
68 // 备注:这个操作不影响显存中的数据
|
||||
69 // 用例:
|
||||
70 // 设置亮度并打开显示:TM1650_cfg_display(TM1650_BRIGHTx)
|
||||
71 // 关闭显示:TM1650_cfg_display(TM1650_DSP_OFF)
|
||||
72 static void TM1650_cfg_display(unsigned char x)
|
||||
73 {
|
||||
74 1 TM1650_IIC_start();
|
||||
75 1 TM1650_IIC_write_byte(0x48);
|
||||
76 1 TM1650_IIC_wait_ack(); // 固定命令
|
||||
77 1 TM1650_IIC_write_byte(x);
|
||||
78 1 TM1650_IIC_wait_ack(); // 参数值
|
||||
79 1 TM1650_IIC_stop();
|
||||
80 1 }
|
||||
81 // 在DIG1位上显示数字3: TM1650_print(TM1650_DIG1,TUBE_TABLE_0[3]);
|
||||
82 void TM1650_print(unsigned char dig, unsigned char seg_data)
|
||||
83 {
|
||||
84 1
|
||||
85 1 TM1650_IIC_start();
|
||||
86 1 TM1650_IIC_write_byte(dig * 2 + 0x68);
|
||||
87 1 TM1650_IIC_wait_ack(); // 显存起始地址为0x68
|
||||
88 1 TM1650_IIC_write_byte(seg_data);
|
||||
89 1 TM1650_IIC_wait_ack(); // 发送段码
|
||||
90 1 TM1650_IIC_stop();
|
||||
91 1 }
|
||||
92 // 将显存数据全部刷为0,清空显示
|
||||
93 static void TM1650_clear(void)
|
||||
94 {
|
||||
95 1 unsigned char a;
|
||||
96 1 for (a = TM1650_DIG1; a <= TM1650_DIG4; a++)
|
||||
97 1 {
|
||||
98 2 TM1650_print(a, 0); // 将显存数据刷为0
|
||||
99 2 }
|
||||
100 1 }
|
||||
101 // TM1650初始化
|
||||
102 void TM1650_init(void)
|
||||
103 {
|
||||
104 1 sda = 1; // 释放SDA线
|
||||
105 1 scl = 1; // 释放SCL线
|
||||
106 1 TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||||
107 1 TM1650_clear(); // 将显存内容清0
|
||||
108 1 }
|
||||
109
|
||||
110 void TM1650_printpogrun(u8 set,u8 mode) // 显示run
|
||||
111 {
|
||||
112 1 sda = 1; // 释放SDA线
|
||||
113 1 scl = 1; // 释放SCL线
|
||||
C51 COMPILER V9.60.0.0 TM1650 03/23/2023 15:55:27 PAGE 3
|
||||
|
||||
114 1 TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||||
115 1 TM1650_print(TM1650_DIG1, TUBE_TABLE_1[mode]);
|
||||
116 1 Delay4us();
|
||||
117 1 TM1650_print(TM1650_DIG2, 0x73);
|
||||
118 1 Delay4us();
|
||||
119 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set]);
|
||||
120 1 Delay4us();
|
||||
121 1 TM1650_print(TM1650_DIG4, TUBE_TABLE_1[mode+8]);
|
||||
122 1 }
|
||||
123 void TM1650_printpogstop(u8 set) // 显示run
|
||||
124 {
|
||||
125 1 sda = 1; // 释放SDA线
|
||||
126 1 scl = 1; // 释放SCL线
|
||||
127 1 TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||||
128 1 TM1650_print(TM1650_DIG1, 0x40);
|
||||
129 1 Delay4us();
|
||||
130 1 TM1650_print(TM1650_DIG2, 0x73);
|
||||
131 1 Delay4us();
|
||||
132 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set]);
|
||||
133 1 Delay4us();
|
||||
134 1 TM1650_print(TM1650_DIG4, 0x40);
|
||||
135 1 }
|
||||
136 void TM1650_print_SMG1(u8 set) // 显示----页面0显示
|
||||
137 {
|
||||
138 1 sda = 1; // 释放SDA线
|
||||
139 1 scl = 1; // 释放SCL线
|
||||
140 1 TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||||
141 1 TM1650_print(TM1650_DIG1, 0x40);
|
||||
142 1 Delay4us();
|
||||
143 1 if (set > 99)
|
||||
144 1 TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]);
|
||||
145 1 else
|
||||
146 1 TM1650_print(TM1650_DIG2, 0x00);
|
||||
147 1 Delay4us();
|
||||
148 1 if (set > 9)
|
||||
149 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]);
|
||||
150 1 else
|
||||
151 1 TM1650_print(TM1650_DIG3, 0x00);
|
||||
152 1 Delay4us();
|
||||
153 1 TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]);
|
||||
154 1 }
|
||||
155 void TM1650_print_SMG2(u16 set) // 显示----页面0显示
|
||||
156 {
|
||||
157 1 sda = 1; // 释放SDA线
|
||||
158 1 scl = 1; // 释放SCL线
|
||||
159 1 TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||||
160 1 TM1650_print(TM1650_DIG1, 0x48);
|
||||
161 1 Delay4us();
|
||||
162 1 if (set > 99)
|
||||
163 1 TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]);
|
||||
164 1 else
|
||||
165 1 TM1650_print(TM1650_DIG2, 0x00);
|
||||
166 1 Delay4us();
|
||||
167 1 if (set > 9)
|
||||
168 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]);
|
||||
169 1 else
|
||||
170 1 TM1650_print(TM1650_DIG3, 0x00);
|
||||
171 1 Delay4us();
|
||||
172 1 TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]);
|
||||
173 1 }
|
||||
174 void TM1650_print_SMG3(u8 set) // 显示----页面0显示
|
||||
175 {
|
||||
C51 COMPILER V9.60.0.0 TM1650 03/23/2023 15:55:27 PAGE 4
|
||||
|
||||
176 1 sda = 1; // 释放SDA线
|
||||
177 1 scl = 1; // 释放SCL线
|
||||
178 1 TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||||
179 1 TM1650_print(TM1650_DIG1, 0x49);
|
||||
180 1 Delay4us();
|
||||
181 1 if (set > 99)
|
||||
182 1 TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]);
|
||||
183 1 else
|
||||
184 1 TM1650_print(TM1650_DIG2, 0x00);
|
||||
185 1 Delay4us();
|
||||
186 1 if (set > 9)
|
||||
187 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]);
|
||||
188 1 else
|
||||
189 1 TM1650_print(TM1650_DIG3, 0x00);
|
||||
190 1 Delay4us();
|
||||
191 1 TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]);
|
||||
192 1 }
|
||||
|
||||
|
||||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||||
CODE SIZE = 657 ----
|
||||
CONSTANT SIZE = ---- ----
|
||||
XDATA SIZE = ---- ----
|
||||
PDATA SIZE = ---- ----
|
||||
DATA SIZE = 32 14
|
||||
IDATA SIZE = ---- ----
|
||||
BIT SIZE = ---- ----
|
||||
END OF MODULE INFORMATION.
|
||||
|
||||
|
||||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
1941
Motorcontroller.uvgui.User
Normal file
1941
Motorcontroller.uvgui.User
Normal file
File diff suppressed because one or more lines are too long
289
Motorcontroller.uvopt
Normal file
289
Motorcontroller.uvopt
Normal file
@ -0,0 +1,289 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd">
|
||||
|
||||
<SchemaVersion>1.0</SchemaVersion>
|
||||
|
||||
<Header>### uVision Project, (C) Keil Software</Header>
|
||||
|
||||
<Extensions>
|
||||
<cExt>*.c</cExt>
|
||||
<aExt>*.s*; *.src; *.a*</aExt>
|
||||
<oExt>*.obj; *.o</oExt>
|
||||
<lExt>*.lib</lExt>
|
||||
<tExt>*.txt; *.h; *.inc</tExt>
|
||||
<pExt>*.plm</pExt>
|
||||
<CppX>*.cpp</CppX>
|
||||
<nMigrate>0</nMigrate>
|
||||
</Extensions>
|
||||
|
||||
<DaveTm>
|
||||
<dwLowDateTime>0</dwLowDateTime>
|
||||
<dwHighDateTime>0</dwHighDateTime>
|
||||
</DaveTm>
|
||||
|
||||
<Target>
|
||||
<TargetName>Target 1</TargetName>
|
||||
<ToolsetNumber>0x0</ToolsetNumber>
|
||||
<ToolsetName>MCS-51</ToolsetName>
|
||||
<TargetOption>
|
||||
<CLK51>35000000</CLK51>
|
||||
<OPTTT>
|
||||
<gFlags>1</gFlags>
|
||||
<BeepAtEnd>1</BeepAtEnd>
|
||||
<RunSim>1</RunSim>
|
||||
<RunTarget>0</RunTarget>
|
||||
<RunAbUc>0</RunAbUc>
|
||||
</OPTTT>
|
||||
<OPTHX>
|
||||
<HexSelection>0</HexSelection>
|
||||
<FlashByte>65535</FlashByte>
|
||||
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||
<HexOffset>0</HexOffset>
|
||||
</OPTHX>
|
||||
<OPTLEX>
|
||||
<PageWidth>120</PageWidth>
|
||||
<PageLength>65</PageLength>
|
||||
<TabStop>8</TabStop>
|
||||
<ListingPath>.\Listings\</ListingPath>
|
||||
</OPTLEX>
|
||||
<ListingPage>
|
||||
<CreateCListing>1</CreateCListing>
|
||||
<CreateAListing>1</CreateAListing>
|
||||
<CreateLListing>1</CreateLListing>
|
||||
<CreateIListing>0</CreateIListing>
|
||||
<AsmCond>1</AsmCond>
|
||||
<AsmSymb>1</AsmSymb>
|
||||
<AsmXref>0</AsmXref>
|
||||
<CCond>1</CCond>
|
||||
<CCode>0</CCode>
|
||||
<CListInc>0</CListInc>
|
||||
<CSymb>0</CSymb>
|
||||
<LinkerCodeListing>0</LinkerCodeListing>
|
||||
</ListingPage>
|
||||
<OPTXL>
|
||||
<LMap>1</LMap>
|
||||
<LComments>1</LComments>
|
||||
<LGenerateSymbols>1</LGenerateSymbols>
|
||||
<LLibSym>1</LLibSym>
|
||||
<LLines>1</LLines>
|
||||
<LLocSym>1</LLocSym>
|
||||
<LPubSym>1</LPubSym>
|
||||
<LXref>0</LXref>
|
||||
<LExpSel>0</LExpSel>
|
||||
</OPTXL>
|
||||
<OPTFL>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<IsCurrentTarget>1</IsCurrentTarget>
|
||||
</OPTFL>
|
||||
<CpuCode>255</CpuCode>
|
||||
<DebugOpt>
|
||||
<uSim>1</uSim>
|
||||
<uTrg>0</uTrg>
|
||||
<sLdApp>1</sLdApp>
|
||||
<sGomain>1</sGomain>
|
||||
<sRbreak>1</sRbreak>
|
||||
<sRwatch>1</sRwatch>
|
||||
<sRmem>1</sRmem>
|
||||
<sRfunc>1</sRfunc>
|
||||
<sRbox>1</sRbox>
|
||||
<tLdApp>1</tLdApp>
|
||||
<tGomain>0</tGomain>
|
||||
<tRbreak>1</tRbreak>
|
||||
<tRwatch>1</tRwatch>
|
||||
<tRmem>1</tRmem>
|
||||
<tRfunc>0</tRfunc>
|
||||
<tRbox>1</tRbox>
|
||||
<tRtrace>1</tRtrace>
|
||||
<sRSysVw>1</sRSysVw>
|
||||
<tRSysVw>1</tRSysVw>
|
||||
<sRunDeb>0</sRunDeb>
|
||||
<sLrtime>0</sLrtime>
|
||||
<bEvRecOn>1</bEvRecOn>
|
||||
<bSchkAxf>0</bSchkAxf>
|
||||
<bTchkAxf>0</bTchkAxf>
|
||||
<nTsel>-1</nTsel>
|
||||
<sDll></sDll>
|
||||
<sDllPa></sDllPa>
|
||||
<sDlgDll></sDlgDll>
|
||||
<sDlgPa></sDlgPa>
|
||||
<sIfile></sIfile>
|
||||
<tDll></tDll>
|
||||
<tDllPa></tDllPa>
|
||||
<tDlgDll></tDlgDll>
|
||||
<tDlgPa></tDlgPa>
|
||||
<tIfile></tIfile>
|
||||
<pMon></pMon>
|
||||
</DebugOpt>
|
||||
<Breakpoint/>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
</Tracepoint>
|
||||
<DebugFlag>
|
||||
<trace>0</trace>
|
||||
<periodic>1</periodic>
|
||||
<aLwin>0</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
<aSer2>0</aSer2>
|
||||
<aPa>0</aPa>
|
||||
<viewmode>0</viewmode>
|
||||
<vrSel>0</vrSel>
|
||||
<aSym>0</aSym>
|
||||
<aTbox>0</aTbox>
|
||||
<AscS1>0</AscS1>
|
||||
<AscS2>0</AscS2>
|
||||
<AscS3>0</AscS3>
|
||||
<aSer3>0</aSer3>
|
||||
<eProf>0</eProf>
|
||||
<aLa>0</aLa>
|
||||
<aPa1>0</aPa1>
|
||||
<AscS4>0</AscS4>
|
||||
<aSer4>0</aSer4>
|
||||
<StkLoc>0</StkLoc>
|
||||
<TrcWin>0</TrcWin>
|
||||
<newCpu>0</newCpu>
|
||||
<uProt>0</uProt>
|
||||
</DebugFlag>
|
||||
<LintExecutable></LintExecutable>
|
||||
<LintConfigFile></LintConfigFile>
|
||||
<bLintAuto>0</bLintAuto>
|
||||
<bAutoGenD>0</bAutoGenD>
|
||||
<LntExFlags>0</LntExFlags>
|
||||
<pMisraName></pMisraName>
|
||||
<pszMrule></pszMrule>
|
||||
<pSingCmds></pSingCmds>
|
||||
<pMultCmds></pMultCmds>
|
||||
<pMisraNamep></pMisraNamep>
|
||||
<pszMrulep></pszMrulep>
|
||||
<pSingCmdsp></pSingCmdsp>
|
||||
<pMultCmdsp></pMultCmdsp>
|
||||
</TargetOption>
|
||||
</Target>
|
||||
|
||||
<Group>
|
||||
<GroupName>Source Group 1</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>1</FileNumber>
|
||||
<FileType>2</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\STARTUP.A51</PathWithFileName>
|
||||
<FilenameWithoutPath>STARTUP.A51</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>mycode</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>2</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\mycode\delay.c</PathWithFileName>
|
||||
<FilenameWithoutPath>delay.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>3</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\mycode\GPIO.c</PathWithFileName>
|
||||
<FilenameWithoutPath>GPIO.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\mycode\main.c</PathWithFileName>
|
||||
<FilenameWithoutPath>main.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>5</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\mycode\UART.C</PathWithFileName>
|
||||
<FilenameWithoutPath>UART.C</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\mycode\timer.c</PathWithFileName>
|
||||
<FilenameWithoutPath>timer.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>7</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\mycode\tm1650.c</PathWithFileName>
|
||||
<FilenameWithoutPath>tm1650.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\mycode\common.c</PathWithFileName>
|
||||
<FilenameWithoutPath>common.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\mycode\EEPROM.c</PathWithFileName>
|
||||
<FilenameWithoutPath>EEPROM.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
</ProjectOpt>
|
435
Motorcontroller.uvproj
Normal file
435
Motorcontroller.uvproj
Normal file
@ -0,0 +1,435 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
|
||||
|
||||
<SchemaVersion>1.1</SchemaVersion>
|
||||
|
||||
<Header>### uVision Project, (C) Keil Software</Header>
|
||||
|
||||
<Targets>
|
||||
<Target>
|
||||
<TargetName>Target 1</TargetName>
|
||||
<ToolsetNumber>0x0</ToolsetNumber>
|
||||
<ToolsetName>MCS-51</ToolsetName>
|
||||
<uAC6>0</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>STC8G1K08 Series</Device>
|
||||
<Vendor>STC</Vendor>
|
||||
<Cpu>IRAM(0-0xFF) XRAM(0-0x03FF) IROM(0-0x1FF8) CLOCK(35000000) MODP2</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
|
||||
<FlashDriverDll></FlashDriverDll>
|
||||
<DeviceId>63316</DeviceId>
|
||||
<RegisterFile>STC8.H</RegisterFile>
|
||||
<MemoryEnv></MemoryEnv>
|
||||
<Cmp></Cmp>
|
||||
<Asm></Asm>
|
||||
<Linker></Linker>
|
||||
<OHString></OHString>
|
||||
<InfinionOptionDll></InfinionOptionDll>
|
||||
<SLE66CMisc></SLE66CMisc>
|
||||
<SLE66AMisc></SLE66AMisc>
|
||||
<SLE66LinkerMisc></SLE66LinkerMisc>
|
||||
<SFDFile></SFDFile>
|
||||
<bCustSvd>0</bCustSvd>
|
||||
<UseEnv>0</UseEnv>
|
||||
<BinPath></BinPath>
|
||||
<IncludePath></IncludePath>
|
||||
<LibPath></LibPath>
|
||||
<RegisterFilePath>STC\</RegisterFilePath>
|
||||
<DBRegisterFilePath>STC\</DBRegisterFilePath>
|
||||
<TargetStatus>
|
||||
<Error>0</Error>
|
||||
<ExitCodeStop>0</ExitCodeStop>
|
||||
<ButtonStop>0</ButtonStop>
|
||||
<NotGenerated>0</NotGenerated>
|
||||
<InvalidFlash>1</InvalidFlash>
|
||||
</TargetStatus>
|
||||
<OutputDirectory>.\Objects\</OutputDirectory>
|
||||
<OutputName>Motorcontroller</OutputName>
|
||||
<CreateExecutable>1</CreateExecutable>
|
||||
<CreateLib>0</CreateLib>
|
||||
<CreateHexFile>1</CreateHexFile>
|
||||
<DebugInformation>1</DebugInformation>
|
||||
<BrowseInformation>1</BrowseInformation>
|
||||
<ListingPath>.\Listings\</ListingPath>
|
||||
<HexFormatSelection>0</HexFormatSelection>
|
||||
<Merge32K>0</Merge32K>
|
||||
<CreateBatchFile>0</CreateBatchFile>
|
||||
<BeforeCompile>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||
<nStopU1X>0</nStopU1X>
|
||||
<nStopU2X>0</nStopU2X>
|
||||
</BeforeCompile>
|
||||
<BeforeMake>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||
<nStopB1X>0</nStopB1X>
|
||||
<nStopB2X>0</nStopB2X>
|
||||
</BeforeMake>
|
||||
<AfterMake>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||
<nStopA1X>0</nStopA1X>
|
||||
<nStopA2X>0</nStopA2X>
|
||||
</AfterMake>
|
||||
<SelectedForBatchBuild>0</SelectedForBatchBuild>
|
||||
<SVCSIdString></SVCSIdString>
|
||||
</TargetCommonOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>0</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>0</AlwaysBuild>
|
||||
<GenerateAssemblyFile>0</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>0</AssembleAssemblyFile>
|
||||
<PublicsOnly>0</PublicsOnly>
|
||||
<StopOnExitCode>3</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
<BankNo>65535</BankNo>
|
||||
</CommonProperty>
|
||||
<DllOption>
|
||||
<SimDllName>S8051.DLL</SimDllName>
|
||||
<SimDllArguments></SimDllArguments>
|
||||
<SimDlgDll>DP51.DLL</SimDlgDll>
|
||||
<SimDlgDllArguments>-pDP8051</SimDlgDllArguments>
|
||||
<TargetDllName>S8051.DLL</TargetDllName>
|
||||
<TargetDllArguments></TargetDllArguments>
|
||||
<TargetDlgDll>TP51.DLL</TargetDlgDll>
|
||||
<TargetDlgDllArguments>-p51</TargetDlgDllArguments>
|
||||
</DllOption>
|
||||
<DebugOption>
|
||||
<OPTHX>
|
||||
<HexSelection>0</HexSelection>
|
||||
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||
<HexOffset>0</HexOffset>
|
||||
<Oh166RecLen>16</Oh166RecLen>
|
||||
</OPTHX>
|
||||
<Simulator>
|
||||
<UseSimulator>1</UseSimulator>
|
||||
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
|
||||
<RunToMain>1</RunToMain>
|
||||
<RestoreBreakpoints>1</RestoreBreakpoints>
|
||||
<RestoreWatchpoints>1</RestoreWatchpoints>
|
||||
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
|
||||
<RestoreFunctions>1</RestoreFunctions>
|
||||
<RestoreToolbox>1</RestoreToolbox>
|
||||
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
|
||||
<RestoreSysVw>1</RestoreSysVw>
|
||||
</Simulator>
|
||||
<Target>
|
||||
<UseTarget>0</UseTarget>
|
||||
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
|
||||
<RunToMain>0</RunToMain>
|
||||
<RestoreBreakpoints>1</RestoreBreakpoints>
|
||||
<RestoreWatchpoints>1</RestoreWatchpoints>
|
||||
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
|
||||
<RestoreFunctions>0</RestoreFunctions>
|
||||
<RestoreToolbox>1</RestoreToolbox>
|
||||
<RestoreTracepoints>1</RestoreTracepoints>
|
||||
<RestoreSysVw>1</RestoreSysVw>
|
||||
</Target>
|
||||
<RunDebugAfterBuild>0</RunDebugAfterBuild>
|
||||
<TargetSelection>-1</TargetSelection>
|
||||
<SimDlls>
|
||||
<CpuDll></CpuDll>
|
||||
<CpuDllArguments></CpuDllArguments>
|
||||
<PeripheralDll></PeripheralDll>
|
||||
<PeripheralDllArguments></PeripheralDllArguments>
|
||||
<InitializationFile></InitializationFile>
|
||||
</SimDlls>
|
||||
<TargetDlls>
|
||||
<CpuDll></CpuDll>
|
||||
<CpuDllArguments></CpuDllArguments>
|
||||
<PeripheralDll></PeripheralDll>
|
||||
<PeripheralDllArguments></PeripheralDllArguments>
|
||||
<InitializationFile></InitializationFile>
|
||||
<Driver></Driver>
|
||||
</TargetDlls>
|
||||
</DebugOption>
|
||||
<Utilities>
|
||||
<Flash1>
|
||||
<UseTargetDll>0</UseTargetDll>
|
||||
<UseExternalTool>0</UseExternalTool>
|
||||
<RunIndependent>0</RunIndependent>
|
||||
<UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
|
||||
<Capability>0</Capability>
|
||||
<DriverSelection>-1</DriverSelection>
|
||||
</Flash1>
|
||||
<bUseTDR>0</bUseTDR>
|
||||
<Flash2></Flash2>
|
||||
<Flash3></Flash3>
|
||||
<Flash4></Flash4>
|
||||
<pFcarmOut></pFcarmOut>
|
||||
<pFcarmGrp></pFcarmGrp>
|
||||
<pFcArmRoot></pFcArmRoot>
|
||||
<FcArmLst>0</FcArmLst>
|
||||
</Utilities>
|
||||
<Target51>
|
||||
<Target51Misc>
|
||||
<MemoryModel>0</MemoryModel>
|
||||
<RTOS>0</RTOS>
|
||||
<RomSize>2</RomSize>
|
||||
<DataHold>0</DataHold>
|
||||
<XDataHold>0</XDataHold>
|
||||
<UseOnchipRom>0</UseOnchipRom>
|
||||
<UseOnchipArithmetic>0</UseOnchipArithmetic>
|
||||
<UseMultipleDPTR>0</UseMultipleDPTR>
|
||||
<UseOnchipXram>0</UseOnchipXram>
|
||||
<HadIRAM>1</HadIRAM>
|
||||
<HadXRAM>1</HadXRAM>
|
||||
<HadIROM>1</HadIROM>
|
||||
<Moda2>0</Moda2>
|
||||
<Moddp2>0</Moddp2>
|
||||
<Modp2>1</Modp2>
|
||||
<Mod517dp>0</Mod517dp>
|
||||
<Mod517au>0</Mod517au>
|
||||
<Mode2>0</Mode2>
|
||||
<useCB>0</useCB>
|
||||
<useXB>0</useXB>
|
||||
<useL251>0</useL251>
|
||||
<useA251>0</useA251>
|
||||
<Mx51>0</Mx51>
|
||||
<ModC812>0</ModC812>
|
||||
<ModCont>0</ModCont>
|
||||
<Lp51>0</Lp51>
|
||||
<useXBS>0</useXBS>
|
||||
<ModDA>0</ModDA>
|
||||
<ModAB2>0</ModAB2>
|
||||
<Mx51P>0</Mx51P>
|
||||
<hadXRAM2>0</hadXRAM2>
|
||||
<uocXram2>0</uocXram2>
|
||||
<hadXRAM3>0</hadXRAM3>
|
||||
<ModC2>0</ModC2>
|
||||
<ModH2>0</ModH2>
|
||||
<Mdu_R515>0</Mdu_R515>
|
||||
<Mdu_F120>0</Mdu_F120>
|
||||
<Psoc>0</Psoc>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<hadIROM3>0</hadIROM3>
|
||||
<ModSmx2>0</ModSmx2>
|
||||
<cBanks>0</cBanks>
|
||||
<xBanks>0</xBanks>
|
||||
<OnChipMemories>
|
||||
<RCB>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0xffff</Size>
|
||||
</RCB>
|
||||
<RXB>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</RXB>
|
||||
<Ocm1>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm1>
|
||||
<Ocm2>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm2>
|
||||
<Ocm3>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm3>
|
||||
<Ocr1>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocr1>
|
||||
<Ocr2>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocr2>
|
||||
<Ocr3>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocr3>
|
||||
<IRO>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x1ff9</Size>
|
||||
</IRO>
|
||||
<IRA>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x100</Size>
|
||||
</IRA>
|
||||
<XRA>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x400</Size>
|
||||
</XRA>
|
||||
<XRA512>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</XRA512>
|
||||
<IROM512>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</IROM512>
|
||||
<XRA513>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</XRA513>
|
||||
<IROM513>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</IROM513>
|
||||
</OnChipMemories>
|
||||
</Target51Misc>
|
||||
<C51>
|
||||
<RegisterColoring>0</RegisterColoring>
|
||||
<VariablesInOrder>0</VariablesInOrder>
|
||||
<IntegerPromotion>1</IntegerPromotion>
|
||||
<uAregs>0</uAregs>
|
||||
<UseInterruptVector>1</UseInterruptVector>
|
||||
<Fuzzy>3</Fuzzy>
|
||||
<Optimize>8</Optimize>
|
||||
<WarningLevel>2</WarningLevel>
|
||||
<SizeSpeed>1</SizeSpeed>
|
||||
<ObjectExtend>1</ObjectExtend>
|
||||
<ACallAJmp>0</ACallAJmp>
|
||||
<InterruptVectorAddress>0</InterruptVectorAddress>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath>.\myinc</IncludePath>
|
||||
</VariousControls>
|
||||
</C51>
|
||||
<Ax51>
|
||||
<UseMpl>0</UseMpl>
|
||||
<UseStandard>1</UseStandard>
|
||||
<UseCase>0</UseCase>
|
||||
<UseMod51>0</UseMod51>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Ax51>
|
||||
<Lx51>
|
||||
<useFile>0</useFile>
|
||||
<linkonly>0</linkonly>
|
||||
<UseMemoryFromTarget>1</UseMemoryFromTarget>
|
||||
<CaseSensitiveSymbols>0</CaseSensitiveSymbols>
|
||||
<WarningLevel>2</WarningLevel>
|
||||
<DataOverlaying>1</DataOverlaying>
|
||||
<OverlayString></OverlayString>
|
||||
<MiscControls></MiscControls>
|
||||
<DisableWarningNumbers></DisableWarningNumbers>
|
||||
<LinkerCmdFile></LinkerCmdFile>
|
||||
<Assign></Assign>
|
||||
<ReserveString></ReserveString>
|
||||
<CClasses></CClasses>
|
||||
<UserClasses></UserClasses>
|
||||
<CSection></CSection>
|
||||
<UserSection></UserSection>
|
||||
<CodeBaseAddress></CodeBaseAddress>
|
||||
<XDataBaseAddress></XDataBaseAddress>
|
||||
<PDataBaseAddress></PDataBaseAddress>
|
||||
<BitBaseAddress></BitBaseAddress>
|
||||
<DataBaseAddress></DataBaseAddress>
|
||||
<IDataBaseAddress></IDataBaseAddress>
|
||||
<Precede></Precede>
|
||||
<Stack></Stack>
|
||||
<CodeSegmentName></CodeSegmentName>
|
||||
<XDataSegmentName></XDataSegmentName>
|
||||
<BitSegmentName></BitSegmentName>
|
||||
<DataSegmentName></DataSegmentName>
|
||||
<IDataSegmentName></IDataSegmentName>
|
||||
</Lx51>
|
||||
</Target51>
|
||||
</TargetOption>
|
||||
<Groups>
|
||||
<Group>
|
||||
<GroupName>Source Group 1</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>STARTUP.A51</FileName>
|
||||
<FileType>2</FileType>
|
||||
<FilePath>.\STARTUP.A51</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>mycode</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>delay.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\mycode\delay.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>GPIO.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\mycode\GPIO.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>main.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\mycode\main.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>UART.C</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\mycode\UART.C</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>timer.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\mycode\timer.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tm1650.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\mycode\tm1650.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>common.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\mycode\common.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>EEPROM.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\mycode\EEPROM.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
</Groups>
|
||||
</Target>
|
||||
</Targets>
|
||||
|
||||
</Project>
|
1
Objects/EEPROM.__i
Normal file
1
Objects/EEPROM.__i
Normal file
@ -0,0 +1 @@
|
||||
"mycode\EEPROM.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\EEPROM.lst) TABS (2) OBJECT(.\Objects\EEPROM.obj)
|
BIN
Objects/EEPROM.obj
Normal file
BIN
Objects/EEPROM.obj
Normal file
Binary file not shown.
1
Objects/GPIO.__i
Normal file
1
Objects/GPIO.__i
Normal file
@ -0,0 +1 @@
|
||||
"mycode\GPIO.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\GPIO.lst) TABS (2) OBJECT(.\Objects\GPIO.obj)
|
BIN
Objects/GPIO.obj
Normal file
BIN
Objects/GPIO.obj
Normal file
Binary file not shown.
BIN
Objects/I2C.obj
Normal file
BIN
Objects/I2C.obj
Normal file
Binary file not shown.
BIN
Objects/Motorcontroller
Normal file
BIN
Objects/Motorcontroller
Normal file
Binary file not shown.
39
Objects/Motorcontroller.build_log.htm
Normal file
39
Objects/Motorcontroller.build_log.htm
Normal file
@ -0,0 +1,39 @@
|
||||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>µVision Build Log</h1>
|
||||
<h2>Tool Versions:</h2>
|
||||
IDE-Version: ¦ÌVision V5.27.1.0
|
||||
Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
|
||||
License Information: xx xx, xx, LIC=WH7DL-0DZI4-3A0DP-MA9EC-R17VA-4MPD4
|
||||
|
||||
Tool Versions:
|
||||
Toolchain: PK51 Prof. Developers Kit Version: 9.60.0.0
|
||||
Toolchain Path: d:\Keil_v5\C51\BIN
|
||||
C Compiler: C51.exe V9.60.0.0
|
||||
Assembler: A51.exe V8.2.7.0
|
||||
Linker/Locator: BL51.exe V6.22.2.0
|
||||
Library Manager: LIB51.exe V4.30.1.0
|
||||
Hex Converter: OH51.exe V2.7.0.0
|
||||
CPU DLL: S8051.DLL V3.122.0.0
|
||||
Dialog DLL: DP51.DLL V2.67.0.0
|
||||
<h2>Project:</h2>
|
||||
e:\my code all\stc\Motorcontroller\Motorcontroller.uvproj
|
||||
Project File Date: 03/17/2023
|
||||
|
||||
<h2>Output:</h2>
|
||||
Build target 'Target 1'
|
||||
compiling timer.c...
|
||||
compiling common.c...
|
||||
linking...
|
||||
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
|
||||
SEGMENT: ?PR?_PRINTSTRING1?UART
|
||||
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
|
||||
SEGMENT: ?PR?_TM1650_PRINT_SMG3?TM1650
|
||||
Program Size: data=100.1 xdata=64 code=8087
|
||||
creating hex file from ".\Objects\Motorcontroller"...
|
||||
".\Objects\Motorcontroller" - 0 Error(s), 2 Warning(s).
|
||||
Build Time Elapsed: 00:00:00
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
563
Objects/Motorcontroller.hex
Normal file
563
Objects/Motorcontroller.hex
Normal file
@ -0,0 +1,563 @@
|
||||
:030000000218DC07
|
||||
:0C18DC00787FE4F6D8FD758163021923C3
|
||||
:0F1F5E007D607C09ED1D70011C144C70F7DFF1E4
|
||||
:011F6D002251
|
||||
:0600030000007F0CDFFE8F
|
||||
:0100090022D4
|
||||
:05000E00007F05DFFE8C
|
||||
:0100130022CA
|
||||
:10102300EFD394077480948040037F0122120999BF
|
||||
:10103300FED394037480948040037F0222EF7044B4
|
||||
:10104300EE700B9000011209B2F4529352941209FC
|
||||
:10105300996401700B9000011209B24293F4529407
|
||||
:10106300120999FE6402700A9000011209B24293B8
|
||||
:101073004294EE6403700D9000011209B2FEF45223
|
||||
:1010830093EE4294EF64017046120999FE700B903F
|
||||
:1010930000011209B2F452915292EE6401700B9066
|
||||
:1010A30000011209B24291F452921209996402703A
|
||||
:1010B3000A9000011209B242914292120999640303
|
||||
:1010C300700D9000011209B2FEF45291EE4292EFBC
|
||||
:1010D30064027046120999FE700B9000011209B266
|
||||
:1010E300F452955296EE6401700B9000011209B20E
|
||||
:1010F3004295F452961209996402700A9000011203
|
||||
:1011030009B2429542961209996403700D90000149
|
||||
:101113001209B2FEF45295EE4296EF640370461242
|
||||
:101123000999FE700B9000011209B2F452B152B248
|
||||
:10113300EE6401700B9000011209B242B1F452B295
|
||||
:101143001209996402700A9000011209B242B14275
|
||||
:10115300B21209996403700D9000011209B2FEF4F2
|
||||
:1011630052B1EE42B2EF64047046120999FE700B5D
|
||||
:101173009000011209B2F452B352B4EE6401700B41
|
||||
:101183009000011209B242B3F452B41209996402F5
|
||||
:10119300700A9000011209B242B342B41209996471
|
||||
:1011A30003700D9000011209B2FEF452B3EE42B483
|
||||
:1011B300EF64057046120999FE700B900001120945
|
||||
:1011C300B2F452C952CAEE6401700B9000011209C5
|
||||
:1011D300B242C9F452CA1209996402700A9000011A
|
||||
:1011E3001209B242C942CA1209996403700D9000F0
|
||||
:1011F300011209B2FEF452C9EE42CAEF6406704608
|
||||
:10120300120999FE700B9000011209B2F452CB52ED
|
||||
:10121300CCEE6401700B9000011209B242CBF45280
|
||||
:10122300CC1209996402700A9000011209B242CBF0
|
||||
:1012330042CC1209996403700D9000011209B2FEA9
|
||||
:10124300F452CBEE42CCEF64077049120999FF7E4A
|
||||
:1012530000700B9000011209B2F452E152E2EF6404
|
||||
:10126300014E700B9000011209B242E1F452E212F6
|
||||
:1012730009996402700A9000011209B242E142E244
|
||||
:101283001209996403700D9000011209B2FFF45220
|
||||
:07129300E1EF42E27F0022BF
|
||||
:101D08007543ECE4F542FB7A0079427F0312102315
|
||||
:101D180075431C7542037F011210237543E1E4F5F6
|
||||
:101D2800427F01121023754310E4F5427F0512101B
|
||||
:031D380023D2941F
|
||||
:011D3B002285
|
||||
:05001E0025640D0A003D
|
||||
:10002600120014121D70121D08121E58121D3CD209
|
||||
:10003600AF7F0A121F5E1200A612129A121B3A1204
|
||||
:100046001E017BFF7A00791E856148856047855FC2
|
||||
:0900560046855E4512069F80DD1F
|
||||
:0614DF008B4E8A4F89507C
|
||||
:1014E500EF640160030216D9755601F557F558F5F5
|
||||
:1014F50059F55AF55BF55CFFEFC394207480948031
|
||||
:10150500500F74202FF582E43400F583E4F00F804A
|
||||
:10151500E7E4FFEFC3942074809480500F74002F8C
|
||||
:10152500F582E43400F583E4F00F80E7AB4EAA4F73
|
||||
:10153500A95090000A1209B2FD7C00D3940374806F
|
||||
:10154500948040037F0222ED4C700553B7EFC2BC77
|
||||
:10155500AB4EAA4FA95090000A1209B2640170055A
|
||||
:1015650053B7EFD2BC90000A1209B2FF7E006402A5
|
||||
:10157500700543B710C2BCEF64034E700543B71046
|
||||
:10158500D2BC120999FD7C00D394C074809480402C
|
||||
:10159500037F0222120999FFE598543F4FF598ED14
|
||||
:1015A50064C04C6008EF6440600302166690000258
|
||||
:1015B500120C297F807E8D7D5B7C00120B738F540E
|
||||
:1015C5008E538D528C51E4FFFE7D01FCAB54AA5322
|
||||
:1015D500A952A851C3120C0540037F0222C3E4950A
|
||||
:1015E50054F554E49553F55374019552F552E49529
|
||||
:1015F50051F551AB4EAA4FA9509000011209B2FB0B
|
||||
:101605007A006401702CC28E538EFE5389BF5389B4
|
||||
:10161500CF438E40AF54AE53AD52AC517808120C47
|
||||
:10162500168F8D85548BC2AB5389BF538FFDD28ED8
|
||||
:101635008069EB64024A7026538EEF438E01538E08
|
||||
:10164500F7438E04AF54AE53AD52AC517808120C2B
|
||||
:10165500168FD68554D753AFFB438E10803D7F023E
|
||||
:1016650022AB4EAA4FA950120999FF7E0070149023
|
||||
:1016750000081209B264017005438E20801D538E47
|
||||
:10168500DF8018EF64804E70129000081209B26472
|
||||
:10169500017005438780800353877FAB4EAA4FA90E
|
||||
:1016A500509000091209B264017004D2AC8002C2E4
|
||||
:1016B500AC9000071209B264017004D29C8002C28A
|
||||
:1016C5009C90000B1209B254C0FFE5A2543F4FF5A0
|
||||
:0616D500A27F00227F024B
|
||||
:0116DB0022EC
|
||||
:101E810074202558F582E43400F583EFF00558C33A
|
||||
:101E9100E5589420748094804003E4F558E5597026
|
||||
:071EA10005755901D29922D9
|
||||
:101F3800120999FF600C121E81740129F9E43AFA1A
|
||||
:031F480080EE2206
|
||||
:030023000219EBD4
|
||||
:1019EB00C0E0C083C082C0D075D000C0073098283B
|
||||
:1019FB00C298E55C7022C3E55A94207480948040B1
|
||||
:101A0B0003755A00AF5A055A74002FF582E434005F
|
||||
:101A1B00F583E599F0755B0530992BC299E5576510
|
||||
:101A2B0058602074202557F582E43400F583E0F5E7
|
||||
:101A3B00990557C3E55794207480948040087557D7
|
||||
:101A4B00008003755900D007D0D0D082D083D0E06E
|
||||
:011A5B003258
|
||||
:101E58007542407543017547007546C27545017561
|
||||
:101E68004400754901E4F54A754B01F54CF54DFB05
|
||||
:091E78007A0079427F010214DFB7
|
||||
:05009E00AE07021E8107
|
||||
:071BA80002620000015D0074
|
||||
:03000B00021836A2
|
||||
:10183600C0E0C0F0C083C082C0D075D000C000C078
|
||||
:1018460001C002C003C004C005C006C007E50964A4
|
||||
:101856000370277E017490A817088005C333CE3322
|
||||
:10186600CED8F9FFEE3395E0FDFCAB61AA60A95F27
|
||||
:10187600A85ED3120C055002C292E4FFFEFDFCAB3B
|
||||
:1018860061AA60A95FA85ED3120C05500E756100AF
|
||||
:10189600756000755F00755E008020E50A64017062
|
||||
:1018A6001AE56124FFF561E56034FFF560E55F3414
|
||||
:1018B600FFF55FE55E34FFF55EB293D007D006D044
|
||||
:1018C60005D004D003D002D001D000D0D0D082D031
|
||||
:0618D60083D0F0D0E032E7
|
||||
:03001B0002000AD6
|
||||
:01000A0032C3
|
||||
:03006300021C0775
|
||||
:101C0700C0E0C0D00563E56370020562C394C8E510
|
||||
:101C1700629400402E309213E55D9407748094809F
|
||||
:101C27004005755D008016055D8012D3E55D940063
|
||||
:101C3700748094805005755D078002155D7562009C
|
||||
:101C4700756300E514600A051EE51E700A051D8010
|
||||
:0C1C570006751D00751E00D0D0D0E032D4
|
||||
:03009B0002001A46
|
||||
:01001A0032B3
|
||||
:0300A30002005FF9
|
||||
:01005F00326E
|
||||
:100CF200AD07EDD394047480948040037F0122ED0C
|
||||
:100D02006003020DC7C28C9000021209B264017026
|
||||
:100D120004D2A98002C2A99000011209B2FED394A2
|
||||
:100D2200037480948040037F0222EEFF7E007005F0
|
||||
:100D320053B7FDC2B9EF64014E700553B7FDD2B986
|
||||
:100D4200EF64024E700543B702C2B9EF64034E70FE
|
||||
:100D52000543B702D2B9120999FEC3940374809471
|
||||
:100D62008040037F0222E58954FC4EF589900003FE
|
||||
:100D72001209B2FF7E0064017003538E7FEF4E7042
|
||||
:100D820003438E80EF64024E70054389048003534F
|
||||
:100D920089FB9000041209B264017005438F01803F
|
||||
:100DA20003538FFE900005120AB0E5F0F58C900017
|
||||
:100DB20005120AB0F58A9000071209B264017002A6
|
||||
:100DC200D28C7F0022ED64016003020E94C28E90E9
|
||||
:100DD20000021209B264017004D2AB8002C2AB906D
|
||||
:100DE20000011209B2FED394037480948040037F01
|
||||
:100DF2000222EEFF7E00700553B7F7C2BBEF64011B
|
||||
:100E02004E700553B7F7D2BBEF64024E700543B77D
|
||||
:100E120008C2BBEF64034E700543B708D2BB120988
|
||||
:100E220099FEC394037480948040037F0222EEC42F
|
||||
:100E320054F0FFE58954CF4FF5899000031209B2AF
|
||||
:100E4200FF7E0064017003538EBFEF4E7003438E2A
|
||||
:100E520040EF64024E700543894080035389BF907E
|
||||
:100E620000041209B264017005438F028003538F9C
|
||||
:100E7200FD900005120AB0E5F0F58D900005120A0A
|
||||
:100E8200B0F58B9000071209B264017002D28E7F16
|
||||
:100E92000022ED6402707C538EEF9000021209B2C0
|
||||
:100EA2006401700543AF04800353AFFB900003124B
|
||||
:100EB20009B2FED394027480948040037F0222EE32
|
||||
:100EC200FF7E0064017003538EFBEF4E7003438E6E
|
||||
:100ED20004EF64024E7005438E088003538EF79030
|
||||
:100EE20000041209B264017005438F048003538F1A
|
||||
:100EF200FB900005120AB0E5F0F5D6900005120A43
|
||||
:100F0200B0F5D79000071209B264017003438E1046
|
||||
:100F12007F0022ED6403707C53D1F7900002120926
|
||||
:100F2200B26401700543AF20800353AFDF9000032A
|
||||
:100F32001209B2FED394027480948040037F02228D
|
||||
:100F4200EEFF7E006401700353D1FDEF4E70034348
|
||||
:100F5200D102EF64024E700543D104800353D1FBEA
|
||||
:100F62009000041209B26401700543D10180035359
|
||||
:100F7200D1FE900005120AB0E5F0F5D490000512FA
|
||||
:100F82000AB0F5D59000071209B26401700343D18B
|
||||
:100F9200087F0022ED6404600302102053D17F9089
|
||||
:100FA20000021209B26401700543AF40800353AFDF
|
||||
:100FB200BF9000031209B2FD7C00D39402748094A6
|
||||
:100FC2008040037F0222ED64014C700353D1DF9015
|
||||
:100FD20000031209B2700343D1209000031209B238
|
||||
:100FE2006402700543D140800353D1BF90000412C4
|
||||
:100FF20009B26401700543D110800353D1EF900010
|
||||
:1010020005120AB0FDACF0ECF5D2AF058FD390001B
|
||||
:10101200071209B26401700343D1807F00227F026C
|
||||
:0110220022AB
|
||||
:101D7000E4F542F543754401F545F5467547FF75B1
|
||||
:101D80004810754901FB7A007942FF120CF2E4F524
|
||||
:101D900045F5467547A27548407549017F02020C1A
|
||||
:011DA000F250
|
||||
:101BAF0010223F065B4F666D7D077F6F777C395E36
|
||||
:101BBF007971103201213018080000000100000077
|
||||
:041BCF00080C0603F5
|
||||
:0F1F6E00D2B2D2B3120003C2B3120003C2B22226
|
||||
:0F1F7D00C2B2C2B3120003D2B2120003D2B32217
|
||||
:020066008F49C0
|
||||
:10006800C2B2E4F54AC3E54A9408748094805022E9
|
||||
:10007800E54930E704D2B38002C2B3E54925E0F58B
|
||||
:100088004912000ED2B212000EC2B212000E054A78
|
||||
:0200980080D313
|
||||
:01009A002243
|
||||
:101EEA00E4F549D2B312000EA2B3E433F549D2B2F3
|
||||
:0A1EFA0012000EC2B212000EAF4932
|
||||
:011F040022BA
|
||||
:061ECC00D2B3D2B27F5137
|
||||
:101ED2008F47121F6E7F48120066121EEAAF47122A
|
||||
:081EE2000066121EEA021F7DDA
|
||||
:051EA800F8E6FD7F02D9
|
||||
:101EAD008F478D48121F6EE54725E02468FF12000D
|
||||
:0F1EBD0066121EEAAF48120066121EEA021F7D6F
|
||||
:101F0500E4F542D3E542940374809480500BE4FDDC
|
||||
:091F1500AF42121EAD054280EA44
|
||||
:011F1E0022A0
|
||||
:06001400121ECC021F05C4
|
||||
:101CD2008F458D46121ECC74322546F8E6FDE4FF90
|
||||
:101CE200121EAD1200037D737F01121EAD1200039E
|
||||
:101CF20074222545121EA8120003743A2546F8E6FE
|
||||
:061D0200FD7F03021EAD8F
|
||||
:101E2E008F45121ECC7D40E4FF121EAD1200037DC5
|
||||
:101E3E00737F01121EAD12000374222545121EA8D7
|
||||
:0A1E4E001200037D407F03021EAD69
|
||||
:101A5C008F45121ECC7D40E4FF121EAD120003D345
|
||||
:101A6C00E5459463748094804012E54575F0648478
|
||||
:101A7C0075F00A84742225F0F8E68001E4FD7F01FC
|
||||
:101A8C00121EAD120003D3E5459409748094804076
|
||||
:101A9C0012E54575F00A8475F00A84742225F0F875
|
||||
:101AAC00E68001E4FD7F02121EAD120003E54575D0
|
||||
:0F1ABC00F00A84742225F0F8E6FD7F03021EADC8
|
||||
:101968008E458F46121ECC7D48E4FF121EAD120034
|
||||
:1019780003D3E5469463E54594004019AE45AF4668
|
||||
:101988007C007D64120A257C007D0A120A257422D7
|
||||
:101998002DF8E68001E4FD7F01121EAD120003D38D
|
||||
:1019A800E5469409E54594004019AE45AF467C00EC
|
||||
:1019B8007D0A120A257C007D0A120A2574222DF858
|
||||
:1019C800E68001E4FD7F02121EAD120003AE45AFB2
|
||||
:1019D800467C007D0A120A2574222DF8E6FD7F0355
|
||||
:0319E800021EAD2F
|
||||
:101ACB008F1F121ECC7D49E4FF121EAD120003D3F3
|
||||
:101ADB00E51F9463748094804012E51F75F0648455
|
||||
:101AEB0075F00A84742225F0F8E68001E4FD7F018D
|
||||
:101AFB00121EAD120003D3E51F940974809480402D
|
||||
:101B0B0012E51F75F00A8475F00A84742225F0F82B
|
||||
:101B1B00E68001E4FD7F02121EAD120003E51F7586
|
||||
:0F1B2B00F00A84742225F0F8E6FD7F03021EAD58
|
||||
:101BD300011400010901010A04021D0000010800AB
|
||||
:101BE30001193C011A3C011B3C011C3C0115040179
|
||||
:101BF3001604011704011804090B0000000000007B
|
||||
:031C0300000000DE
|
||||
:10178A00E50860047F6480027FF4E50A24FD604B6B
|
||||
:10179A00046003021835E5147018041209DF1209EF
|
||||
:1017AA0099C394647480948040057464120A017524
|
||||
:1017BA001401EFFDD3E51E9DE51D9400406D7401F3
|
||||
:1017CA001209DFE4F51DF51E750801120999C39483
|
||||
:1017DA00647480948040547464804DE514701EAB28
|
||||
:1017EA0045AA46A947041209DF120999C394087445
|
||||
:1017FA0080948040057408120A01751401D3E51E0D
|
||||
:10180A009FE51D94004024AB45AA46A947740112DE
|
||||
:10181A0009DFE4F51DF51E750801120999C394083C
|
||||
:0B182A007480948040057408120A01CD
|
||||
:011835002290
|
||||
:1016DC00E50860047F6480027FF4E50A24FD604C19
|
||||
:1016EC00046003021789E514701974FF1209DF12E4
|
||||
:1016FC000999D3940A748094805005740A120A01D3
|
||||
:10170C00751401EFFDD3E51E9DE51D9400406E742C
|
||||
:10171C00FF1209DFE4F51DF51E750801120999D3B6
|
||||
:10172C00940A748094805055740A8049E514702092
|
||||
:10173C00AB45AA46A947120999D3940074809480AA
|
||||
:10174C005006E4120A01800574FF1209DF751401BA
|
||||
:10175C00D3E51E9FE51D94004023E4F51DF51E7591
|
||||
:10176C000801AB45AA46A947120999D39400748085
|
||||
:0D177C0094805004E4020A0174FF1209DF9A
|
||||
:01178900223D
|
||||
:10129A0020951FE514701BAF15FE7C017D90120A84
|
||||
:1012AA0013E48F618E60F55FF55ED29275090112C3
|
||||
:1012BA001C6320961FE514701BAF16FE7C017D90FF
|
||||
:1012CA00120A13E48F618E60F55FF55EC2927509AA
|
||||
:1012DA0002121C6320972CE51470287E037420A840
|
||||
:1012EA0017088005C333CE33CED8F9FFEE3395E025
|
||||
:1012FA008F618E60F55FF55ED292750903751401F0
|
||||
:10130A00121C6620CC15E5147011F561F560F55FC5
|
||||
:10131A00F55E750904751401121C66209029E514FE
|
||||
:10132A007025E50A24FE600C14600E146004240380
|
||||
:10133A007012800D750A03800B750A04121C6680F0
|
||||
:10134A0003750A0275140120B755E50924FE601BCE
|
||||
:10135A0014602914603724037045754500754600EA
|
||||
:10136A007547157B007A00791980317545007546F5
|
||||
:10137A00007547167B007A00791A8020754500753A
|
||||
:10138A0046007547177B007A00791B800F75450068
|
||||
:10139A007546007547187B007A00791C12178A2057
|
||||
:1013AA00B655E50924FE601B14602914603724032E
|
||||
:1013BA0070457545007546007547157B007A0079BA
|
||||
:1013CA001980317545007546007547167B007A000D
|
||||
:1013DA00791A80207545007546007547177B007A93
|
||||
:1013EA0000791B800F7545007546007547187B000C
|
||||
:1013FA007A00791C1216DC20B577E5147073E50AB9
|
||||
:10140A0064016005750A018003750A04121C667579
|
||||
:10141A001401E50924FE6019146037240270527E13
|
||||
:10142A00017490A815088005C333CE33CED8F9804D
|
||||
:10143A00317E017490A816088005C333CE33CED806
|
||||
:10144A00F9FFEE3395E08F618E60F55FF55EC2922B
|
||||
:10145A00801F7E037420A817088005C333CE33CEBD
|
||||
:10146A00D8F9FFEE3395E08F618E60F55FF55ED2B5
|
||||
:10147A00923096047F0180027F003095047E0180BD
|
||||
:10148A00027E00EE5FFF3097047E0180027E00EE4E
|
||||
:10149A005FFF30CC047E0180027E00EE5FFF309059
|
||||
:1014AA00047E0180027E00EE5FFF30B7047E018079
|
||||
:1014BA00027E00EE5FFF30B6047E0180027E00EEFF
|
||||
:1014CA005FFF30B5047E0180027E00EE5F6005E4B6
|
||||
:0514DA00F514F50822E5
|
||||
:101DD2008F428C438D44E50A24FE60111460131473
|
||||
:101DE200601724037018AD5DAF09021CD2AF420226
|
||||
:0F1DF2001A5CAF44AE43021968AF09121E2E22CD
|
||||
:101B3A00E50924FE60211460351460492403705DB0
|
||||
:101B4A007E007401A815088005C333CE33CED8F9B8
|
||||
:101B5A00FDAC06AF1980437E007401A81608800503
|
||||
:101B6A00C333CE33CED8F9FDAC06AF1A802C7E0033
|
||||
:101B7A007401A817088005C333CE33CED8F9FDAC5B
|
||||
:101B8A0006AF1B80157E007401A818088005C333B0
|
||||
:0E1B9A00CE33CED8F9FDAC06AF1C121DD22200
|
||||
:1000A600E50924FE700302024A1470030203961443
|
||||
:1000B60070030204E22403600302063CE51975F0AE
|
||||
:1000C60014A4FBAAF07E007401A815088005C333AA
|
||||
:1000D600CE33CED8F9FDAC06AF03AE02120A137CBE
|
||||
:1000E600007D03120A7AC3EF9490EE940140030256
|
||||
:1000F6000194538E7FAF197E007C007D50120C59FF
|
||||
:10010600C004C005C006C0077E007401A81508809B
|
||||
:1001160005C333CE33CED8F9FFEE3395E0FDFCD0E0
|
||||
:1001260003D002D001D000120AE8A804A905AA0645
|
||||
:10013600AB077F007E367D6E7C01120B73C3E49F96
|
||||
:10014600FFE49EFE74019DFDE49CFCE4FB7A01F94C
|
||||
:10015600F8120B738F8CAF197E007C007D50120C49
|
||||
:1001660059C004C005C006C0077E007401A8150862
|
||||
:100176008005C333CE33CED8F9FFEE3395E0FDFCD0
|
||||
:10018600D003D002D001D000120AE802023F438E0B
|
||||
:1001960080AF197E007C007D14120C59C004C00586
|
||||
:1001A600C006C0077E007401A815088005C333CEBB
|
||||
:1001B60033CED8F9FFEE3395E0FDFCD003D002D064
|
||||
:1001C60001D000120AE8E47B03FAF9F8120B73A8CF
|
||||
:1001D60004A905AA06AB077F007E367D6E7C011258
|
||||
:1001E6000B73C3E49FFFE49EFE74019DFDE49CFC3B
|
||||
:1001F600E4FB7A01F9F8120B738F8CAF197E007C41
|
||||
:10020600007D14120C59C004C005C006C0077E004C
|
||||
:100216007401A815088005C333CE33CED8F9FFEE96
|
||||
:100226003395E0FDFCD003D002D001D000120AE8DD
|
||||
:10023600E47B03FAF9F8120B73A804A905AA06AB26
|
||||
:100246000702062BE51A75F014A4FBAAF07E0074CB
|
||||
:1002560001A816088005C333CE33CED8F9FDAC0607
|
||||
:10026600AF03AE02120A137C007D03120A7AC3EFB3
|
||||
:100276009490EE94014003020304538E7FE51A75B1
|
||||
:10028600F050A4FBAAF07E007401A816088005C3EE
|
||||
:1002960033CE33CED8F9FDAC06AF03AE02120A1345
|
||||
:1002A600AB07AA06EA3395E0F9F87F007E367D6E45
|
||||
:1002B6007C01120B73C3E49FFFE49EFE74019DFD57
|
||||
:1002C600E49CFCE4FB7A01F9F8120B738F8CE51AB7
|
||||
:1002D60075F050A4FBAAF07E007401A816088005EC
|
||||
:1002E600C333CE33CED8F9FDAC06AF03AE02120A45
|
||||
:1002F60013AB07AA06EA3395E0F9F802062B438EFC
|
||||
:1003060080E51A75F014A4FBAAF07E007401A81605
|
||||
:10031600088005C333CE33CED8F9FDAC06AF03AEA5
|
||||
:1003260002120A137C007D03120A7AAB07AA06EAB8
|
||||
:100336003395E0F9F87F007E367D6E7C01120B73F3
|
||||
:10034600C3E49FFFE49EFE74019DFDE49CFCE4FB78
|
||||
:100356007A01F9F8120B738F8CE51A75F014A4FB69
|
||||
:10036600AAF07E007401A816088005C333CE33CEEA
|
||||
:10037600D8F9FDAC06AF03AE02120A137C007D036A
|
||||
:10038600120A7AAB07AA06EA3395E0F9F802062BB9
|
||||
:10039600E51B75F014A4FBAAF07E007401A81708EB
|
||||
:1003A6008005C333CE33CED8F9FDAC06AF03AE021B
|
||||
:1003B600120A137C007D03120A7AC3EF9490EE941E
|
||||
:1003C600014003020450538E7FE51B75F050A4FBD9
|
||||
:1003D600AAF07E007401A817088005C333CE33CE79
|
||||
:1003E600D8F9FDAC06AF03AE02120A13AB07AA0694
|
||||
:1003F600EA3395E0F9F87F007E367D6E7C01120BBC
|
||||
:1004060073C3E49FFFE49EFE74019DFDE49CFCE43F
|
||||
:10041600FB7A01F9F8120B738F8CE51B75F050A46B
|
||||
:10042600FBAAF07E007401A817088005C333CE33FB
|
||||
:10043600CED8F9FDAC06AF03AE02120A13AB07AA7B
|
||||
:1004460006EA3395E0F9F802062B438E80E51B7524
|
||||
:10045600F014A4FBAAF07E007401A817088005C357
|
||||
:1004660033CE33CED8F9FDAC06AF03AE02120A1373
|
||||
:100476007C007D03120A7AAB07AA06EA3395E0F9F7
|
||||
:10048600F87F007E367D6E7C01120B73C3E49FFFFE
|
||||
:10049600E49EFE74019DFDE49CFCE4FB7A01F9F800
|
||||
:1004A600120B738F8CE51B75F014A4FBAAF07E006B
|
||||
:1004B6007401A817088005C333CE33CED8F9FDAC36
|
||||
:1004C60006AF03AE02120A137C007D03120A7AAB52
|
||||
:1004D60007AA06EA3395E0F9F802062BE51C75F043
|
||||
:1004E60014A4FBAAF07E007401A818088005C33383
|
||||
:1004F600CE33CED8F9FDAC06AF03AE02120A137C9A
|
||||
:10050600007D03120A7AC3EF9490EE940140030231
|
||||
:10051600059C538E7FE51C75F050A4FBAAF07E0067
|
||||
:100526007401A818088005C333CE33CED8F9FDACC4
|
||||
:1005360006AF03AE02120A13AB07AA06EA3395E02A
|
||||
:10054600F9F87F007E367D6E7C01120B73C3E49F43
|
||||
:10055600FFE49EFE74019DFDE49CFCE4FB7A01F938
|
||||
:10056600F8120B738F8CE51C75F050A4FBAAF07E75
|
||||
:10057600007401A818088005C333CE33CED8F9FD20
|
||||
:10058600AC06AF03AE02120A13AB07AA06EA33950E
|
||||
:10059600E0F9F802062B438E80E51C75F014A4FBE7
|
||||
:1005A600AAF07E007401A818088005C333CE33CEA6
|
||||
:1005B600D8F9FDAC06AF03AE02120A137C007D0328
|
||||
:1005C600120A7AAB07AA06EA3395E0F9F87F007EAD
|
||||
:1005D600367D6E7C01120B73C3E49FFFE49EFE74AE
|
||||
:1005E600019DFDE49CFCE4FB7A01F9F8120B738F84
|
||||
:1005F6008CE51C75F014A4FBAAF07E007401A81803
|
||||
:10060600088005C333CE33CED8F9FDAC06AF03AEB2
|
||||
:1006160002120A137C007D03120A7AAB07AA06EAC5
|
||||
:100626003395E0F9F87F007E367D6E7C01120B7300
|
||||
:07063600C3E49FFF8F8A223D
|
||||
:101E0100E50A24FE602314602014601D2403701C65
|
||||
:101E1100E4FFFEFDFCAB61AA60A95FA85EC3120CE2
|
||||
:0D1E2100057003750A04C29422D294222297
|
||||
:101D3C007B007A00790B7547007548097F047E009B
|
||||
:101D4C00121DA1E50BF4601B850B19850C1A850D72
|
||||
:101D5C001B850E1C850F15851016851117851218FD
|
||||
:041D6C0085130922B0
|
||||
:031C6300751401F4
|
||||
:101C66007F047E00121F4B85190B851A0C851B0DF0
|
||||
:101C7600851C0E85150F851610851711851812857A
|
||||
:101C860009137B007A00790B7547007548097F04B4
|
||||
:051C96007E00021C9B12
|
||||
:0E1F8C00E4F5C7F5C5F5C675C3FF75C4FF22A1
|
||||
:061F1F008CC3AF058FC466
|
||||
:101F2500A2AF92D5C2AF75C65A75C6A50000A2D597
|
||||
:031F350092AF2246
|
||||
:101DA100AD07AC0675C78075F51875C501121F1F03
|
||||
:101DB100E5C2120A010DBD00010C740129F9E43AD2
|
||||
:101DC100FAE54815487002154714454770DF021FB0
|
||||
:011DD1008C85
|
||||
:101F4B00AD07AC0675C78075F51875C503121F1F55
|
||||
:031F5B00021F8CD6
|
||||
:101C9B00AD07AC0675C78075F51875C5028CC3AF5B
|
||||
:101CAB00058FC4120999F5C2121F250DBD00010C39
|
||||
:101CBB00740129F9E43AFAE54815487002154714FE
|
||||
:071CCB00454770D9021F8C90
|
||||
:1018E800020026E493A3F8E493A34003F68001F2F0
|
||||
:1018F80008DFF48029E493A3F85407240CC8C33301
|
||||
:10190800C4540F4420C8834004F456800146F6DFCF
|
||||
:10191800E4800B0102040810204080901BA8E47E9C
|
||||
:10192800019360BCA3FF543F30E509541FFEE493C4
|
||||
:10193800A360010ECF54C025E060A840B8E493A38B
|
||||
:10194800FAE493A3F8E493A3C8C582C8CAC583CAB6
|
||||
:10195800F0A3C8C582C8CAC583CADFE9DEE780BE6E
|
||||
:011C060000DD
|
||||
:10099900BB010689828A83E0225002E722BBFE025C
|
||||
:0909A900E32289828A83E493228F
|
||||
:1009B200BB010CE58229F582E5833AF583E02250FA
|
||||
:1009C20006E92582F8E622BBFE06E92582F8E22244
|
||||
:0D09D200E58229F582E5833AF583E493225E
|
||||
:1009DF00BB010989828A83F8E028F022500327F7A8
|
||||
:1009EF0022BBFE05F8E328F3228A838982F8E49379
|
||||
:0209FF002822AC
|
||||
:100A0100BB010689828A83F0225002F722BBFE01D4
|
||||
:020A1100F322CE
|
||||
:100A1300EF8DF0A4A8F0CF8CF0A428CE8DF0A42EF7
|
||||
:020A2300FE22B1
|
||||
:100A2500BC000BBE0029EF8DF084FFADF022E4CCB5
|
||||
:100A3500F875F008EF2FFFEE33FEEC33FCEE9DEC7E
|
||||
:100A4500984005FCEE9DFE0FD5F0E9E4CEFD22EDC4
|
||||
:100A5500F8F5F0EE8420D21CFEADF075F008EF2F0E
|
||||
:100A6500FFED33FD4007985006D5F0F222C398FDFF
|
||||
:050A75000FD5F0EA229C
|
||||
:100A7A00C2D5EC30E709B2D5E4C39DFDE49CFCEE97
|
||||
:100A8A0030E715B2D5E4C39FFFE49EFE120A25C3E0
|
||||
:100A9A00E49DFDE49CFC8003120A2530D507C3E4DB
|
||||
:060AAA009FFFE49EFE2206
|
||||
:100AB000BB0110E58229F582E5833AF583E0F5F084
|
||||
:100AC000A3E0225009E92582F886F008E622BBFE61
|
||||
:100AD0000AE92582F8E2F5F008E222E5832AF583A7
|
||||
:080AE000E993F5F0A3E993226C
|
||||
:100AE800E88FF0A4CC8BF0A42CFCE98EF0A42CFCAD
|
||||
:100AF8008AF0EDA42CFCEA8EF0A4CDA8F08BF0A42B
|
||||
:100B08002DCC3825F0FDE98FF0A42CCD35F0FCEB89
|
||||
:100B18008EF0A4FEA9F0EB8FF0A4CFC5F02ECD394E
|
||||
:0F0B2800FEE43CFCEAA42DCE35F0FDE43CFC22BB
|
||||
:100B370075F008758200EF2FFFEE33FECD33CDCC75
|
||||
:100B470033CCC58233C5829BED9AEC99E5829840F8
|
||||
:100B57000CF582EE9BFEED9AFDEC99FC0FD5F0D6D5
|
||||
:100B6700E4CEFBE4CDFAE4CCF9A88222B800C1B9FF
|
||||
:100B77000059BA002DEC8BF084CFCECDFCE5F0CB3D
|
||||
:100B8700F97818EF2FFFEE33FEED33FDEC33FCEB76
|
||||
:100B970033FB10D703994004EB99FB0FD8E5E4F931
|
||||
:100BA700FA227818EF2FFFEE33FEED33FDEC33FC1E
|
||||
:100BB700C933C910D7059BE99A4007EC9BFCE99A12
|
||||
:100BC700F90FD8E0E4C9FAE4CCFB2275F010EF2F57
|
||||
:100BD700FFEE33FEED33FDCC33CCC833C810D70757
|
||||
:100BE7009BEC9AE899400AED9BFDEC9AFCE899F892
|
||||
:0E0BF7000FD5F0DAE4CDFBE4CCFAE4C8F92225
|
||||
:100C0500EB9FF5F0EA9E42F0E99D42F0E89C45F045
|
||||
:010C150022BC
|
||||
:100C1600E8600FECC313FCED13FDEE13FEEF13FFBC
|
||||
:030C2600D8F122E0
|
||||
:100C2900BB010DE58229F582E5833AF583020C9330
|
||||
:100C39005007E92582F8020C86BBFE07E92582F8F0
|
||||
:100C4900020C9FE58229F582E5833AF583020CAC13
|
||||
:100C5900EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02D28
|
||||
:100C6900FDE43CFCE8A42EC8C5F03DFDE43CFCEFE6
|
||||
:0D0C7900A4FFE5F028FEE43DFDE43CFC2274
|
||||
:10063D00E5512445F8E60551227842300702784508
|
||||
:10064D00E475F001120CBC0209992000EB7F2ED24B
|
||||
:10065D00008018EF540F2490D43440D4FF30040B95
|
||||
:10066D00EF24BFB41A0050032461FFE55260021558
|
||||
:10067D00520555E5557002055430070D7842E47565
|
||||
:10068D00F001120CBCEF020A0102009E7403D207A6
|
||||
:10069D008003E4C207F5518B428A438944E4F55245
|
||||
:1006AD00F554F555E55260077F2012067880F575F3
|
||||
:1006BD0053FFC201C200C202C203C205C206C20874
|
||||
:1006CD00120646FF700D3007057F00120689AF55E3
|
||||
:1006DD00AE5422B4255FC2D5C204120646FF24D003
|
||||
:1006ED00B40A00501A75F00A785230D50508B6FFD5
|
||||
:1006FD000106C6A426F620D5047002D20380D924A3
|
||||
:10070D00CFB41A00EF5004C2E5D204020889D20119
|
||||
:10071D0080C6D20080C0D20280BCD2D580BAD205AC
|
||||
:10072D0080B47F201206782002077401B552004074
|
||||
:10073D00F112063DFF1206780206B1D208D20680EC
|
||||
:10074D009512063DFB12063DFA12063DF94A4B7015
|
||||
:10075D0006795A7A097BFF20022EE552602A7E0027
|
||||
:10076D008E827583001209B260060EEE655370F02D
|
||||
:10077D00C2D5EBC0E0EAC0E0E9C0E0EE1208D0D08F
|
||||
:10078D00E0F9D0E0FAD0E0FB120999FF60AAEBC0C6
|
||||
:10079D00E0EAC0E0E9C0E0120678D0E02401F9D02B
|
||||
:1007AD00E03400FAD0E0FBE5530460DCD553D9808A
|
||||
:1007BD00877BFF7A0879CCD202809C7910800279F0
|
||||
:1007CD0008C206C2088008D2D5790A8004790AC207
|
||||
:1007DD00D5E553047002F553E4FAFDFEFF12063D14
|
||||
:1007ED00FC7B0820011312063DFD7B1030000A1220
|
||||
:1007FD00063DFE12063DFF7B20EC3382D592D5508F
|
||||
:10080D0013C3E43000069FFFE49EFEE42001039D28
|
||||
:10081D00FDE49CFCE4CBF8C201EC700CCFCECDCC4A
|
||||
:10082D00E824F8F870F38017C3EF33FFEE33FEEDD5
|
||||
:10083D0033FDEC33FCEB33FB994002FB0FD8E9EBB6
|
||||
:10084D00300105F8D0E0C448B201C0E00AEC4D4ECD
|
||||
:10085D004F78207B0070C2EAB5530040BCC0E01257
|
||||
:10086D0008D2D0F0D0E0200104C4C0E0C4B201C071
|
||||
:10087D00F0120661D0F0D5F0EB0206B1120CCC07E8
|
||||
:10088D004E5307C858071F4C071B4207CC4F07D4C0
|
||||
:0F089D004407D44907344307DA5507BE4607BE60
|
||||
:1008AC004507BE47097A5007232D07272E074A2BE9
|
||||
:1008BC00072B2307482009632A06E3480000074258
|
||||
:1008CC003F3F3F00790AA2D5200314300509B91027
|
||||
:1008DC00020404B9080104A2D52006025001042028
|
||||
:1008EC0002689202B552005034C0E07F20300319E8
|
||||
:1008FC007F30A20272067205500F120929C202C281
|
||||
:10090C0006C205C2087F30800F300503E9C0E01233
|
||||
:10091C000678300503D0E0F9D0E0B552CC3005179D
|
||||
:10092C007F30B9100C1206787F583004077F78801E
|
||||
:10093C0003B908031206783002057F2D0206787F72
|
||||
:10094C00202008F87F2B2006F322920280CF286EFD
|
||||
:10095C00756C6C2900D20112063D3001F8C2017889
|
||||
:10096C005230D50108F60206E32D504349581206C1
|
||||
:10097C003D2403B405004001E49009759312066907
|
||||
:0D098C00743A120669D2037552040207C8BE
|
||||
:0D0C8600E6FB08E6F908E6FA08E6CBF822DE
|
||||
:0C0C9300E0F8A3E0F9A3E0FAA3E0FB22E4
|
||||
:0D0C9F00E2FB08E2F908E2FA08E2CBF822D5
|
||||
:100CAC00E493F8740193F9740293FA740393FB229E
|
||||
:100CBC00FAE6FB0808E6F925F0F618E6CA3AF62239
|
||||
:100CCC00D083D082F8E4937012740193700DA3A3B7
|
||||
:100CDC0093F8740193F5828883E4737402936860CB
|
||||
:060CEC00EFA3A3A380DFCB
|
||||
:00000001FF
|
11
Objects/Motorcontroller.lnp
Normal file
11
Objects/Motorcontroller.lnp
Normal file
@ -0,0 +1,11 @@
|
||||
".\Objects\STARTUP.obj",
|
||||
".\Objects\delay.obj",
|
||||
".\Objects\GPIO.obj",
|
||||
".\Objects\main.obj",
|
||||
".\Objects\UART.obj",
|
||||
".\Objects\timer.obj",
|
||||
".\Objects\tm1650.obj",
|
||||
".\Objects\common.obj",
|
||||
".\Objects\EEPROM.obj"
|
||||
TO ".\Objects\Motorcontroller"
|
||||
PRINT(".\Listings\Motorcontroller.m51") RAMSIZE(256)
|
BIN
Objects/PWM.obj
Normal file
BIN
Objects/PWM.obj
Normal file
Binary file not shown.
BIN
Objects/STARTUP.obj
Normal file
BIN
Objects/STARTUP.obj
Normal file
Binary file not shown.
1
Objects/TM5160.__i
Normal file
1
Objects/TM5160.__i
Normal file
@ -0,0 +1 @@
|
||||
"mycode\TM5160.C" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\TM5160.lst) TABS (2) OBJECT(.\Objects\TM5160.obj)
|
BIN
Objects/TM5160.obj
Normal file
BIN
Objects/TM5160.obj
Normal file
Binary file not shown.
1
Objects/UART.__i
Normal file
1
Objects/UART.__i
Normal file
@ -0,0 +1 @@
|
||||
"mycode\UART.C" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\UART.lst) TABS (2) OBJECT(.\Objects\UART.obj)
|
BIN
Objects/UART.obj
Normal file
BIN
Objects/UART.obj
Normal file
Binary file not shown.
1
Objects/common.__i
Normal file
1
Objects/common.__i
Normal file
@ -0,0 +1 @@
|
||||
"mycode\common.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\common.lst) TABS (2) OBJECT(.\Objects\common.obj)
|
BIN
Objects/common.obj
Normal file
BIN
Objects/common.obj
Normal file
Binary file not shown.
1
Objects/delay.__i
Normal file
1
Objects/delay.__i
Normal file
@ -0,0 +1 @@
|
||||
"mycode\delay.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\delay.lst) TABS (2) OBJECT(.\Objects\delay.obj)
|
BIN
Objects/delay.obj
Normal file
BIN
Objects/delay.obj
Normal file
Binary file not shown.
1
Objects/main.__i
Normal file
1
Objects/main.__i
Normal file
@ -0,0 +1 @@
|
||||
"mycode\main.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\main.lst) TABS (2) OBJECT(.\Objects\main.obj)
|
BIN
Objects/main.obj
Normal file
BIN
Objects/main.obj
Normal file
Binary file not shown.
1
Objects/timer.__i
Normal file
1
Objects/timer.__i
Normal file
@ -0,0 +1 @@
|
||||
"mycode\timer.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\timer.lst) TABS (2) OBJECT(.\Objects\timer.obj)
|
BIN
Objects/timer.obj
Normal file
BIN
Objects/timer.obj
Normal file
Binary file not shown.
1
Objects/tm1650.__i
Normal file
1
Objects/tm1650.__i
Normal file
@ -0,0 +1 @@
|
||||
"mycode\tm1650.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\tm1650.lst) TABS (2) OBJECT(.\Objects\tm1650.obj)
|
BIN
Objects/tm1650.obj
Normal file
BIN
Objects/tm1650.obj
Normal file
Binary file not shown.
198
STARTUP.A51
Normal file
198
STARTUP.A51
Normal file
@ -0,0 +1,198 @@
|
||||
$NOMOD51
|
||||
;------------------------------------------------------------------------------
|
||||
; This file is part of the C51 Compiler package
|
||||
; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
|
||||
; Version 8.01
|
||||
;
|
||||
; *** <<< Use Configuration Wizard in Context Menu >>> ***
|
||||
;------------------------------------------------------------------------------
|
||||
; STARTUP.A51: This code is executed after processor reset.
|
||||
;
|
||||
; To translate this file use A51 with the following invocation:
|
||||
;
|
||||
; A51 STARTUP.A51
|
||||
;
|
||||
; To link the modified STARTUP.OBJ file to your application use the following
|
||||
; Lx51 invocation:
|
||||
;
|
||||
; Lx51 your object file list, STARTUP.OBJ controls
|
||||
;
|
||||
;------------------------------------------------------------------------------
|
||||
;
|
||||
; User-defined <h> Power-On Initialization of Memory
|
||||
;
|
||||
; With the following EQU statements the initialization of memory
|
||||
; at processor reset can be defined:
|
||||
;
|
||||
; <o> IDATALEN: IDATA memory size <0x0-0x100>
|
||||
; <i> Note: The absolute start-address of IDATA memory is always 0
|
||||
; <i> The IDATA space overlaps physically the DATA and BIT areas.
|
||||
IDATALEN EQU 80H
|
||||
;
|
||||
; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF>
|
||||
; <i> The absolute start address of XDATA memory
|
||||
XDATASTART EQU 0
|
||||
;
|
||||
; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
|
||||
; <i> The length of XDATA memory in bytes.
|
||||
XDATALEN EQU 0
|
||||
;
|
||||
; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
|
||||
; <i> The absolute start address of PDATA memory
|
||||
PDATASTART EQU 0H
|
||||
;
|
||||
; <o> PDATALEN: PDATA memory size <0x0-0xFF>
|
||||
; <i> The length of PDATA memory in bytes.
|
||||
PDATALEN EQU 0H
|
||||
;
|
||||
;</h>
|
||||
;------------------------------------------------------------------------------
|
||||
;
|
||||
;<h> Reentrant Stack Initialization
|
||||
;
|
||||
; The following EQU statements define the stack pointer for reentrant
|
||||
; functions and initialized it:
|
||||
;
|
||||
; <h> Stack Space for reentrant functions in the SMALL model.
|
||||
; <q> IBPSTACK: Enable SMALL model reentrant stack
|
||||
; <i> Stack space for reentrant functions in the SMALL model.
|
||||
IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
|
||||
; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
|
||||
; <i> Set the top of the stack to the highest location.
|
||||
IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
|
||||
; </h>
|
||||
;
|
||||
; <h> Stack Space for reentrant functions in the LARGE model.
|
||||
; <q> XBPSTACK: Enable LARGE model reentrant stack
|
||||
; <i> Stack space for reentrant functions in the LARGE model.
|
||||
XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
|
||||
; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
|
||||
; <i> Set the top of the stack to the highest location.
|
||||
XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
|
||||
; </h>
|
||||
;
|
||||
; <h> Stack Space for reentrant functions in the COMPACT model.
|
||||
; <q> PBPSTACK: Enable COMPACT model reentrant stack
|
||||
; <i> Stack space for reentrant functions in the COMPACT model.
|
||||
PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
|
||||
;
|
||||
; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
|
||||
; <i> Set the top of the stack to the highest location.
|
||||
PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
|
||||
; </h>
|
||||
;</h>
|
||||
;------------------------------------------------------------------------------
|
||||
;
|
||||
; Memory Page for Using the Compact Model with 64 KByte xdata RAM
|
||||
; <e>Compact Model Page Definition
|
||||
;
|
||||
; <i>Define the XDATA page used for PDATA variables.
|
||||
; <i>PPAGE must conform with the PPAGE set in the linker invocation.
|
||||
;
|
||||
; Enable pdata memory page initalization
|
||||
PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
|
||||
;
|
||||
; <o> PPAGE number <0x0-0xFF>
|
||||
; <i> uppermost 256-byte address of the page used for PDATA variables.
|
||||
PPAGE EQU 0
|
||||
;
|
||||
; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
|
||||
; <i> most 8051 variants use P2 as uppermost address byte
|
||||
PPAGE_SFR DATA 0A0H
|
||||
;
|
||||
; </e>
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
; Standard SFR Symbols
|
||||
ACC DATA 0E0H
|
||||
B DATA 0F0H
|
||||
SP DATA 81H
|
||||
DPL DATA 82H
|
||||
DPH DATA 83H
|
||||
|
||||
NAME ?C_STARTUP
|
||||
|
||||
|
||||
?C_C51STARTUP SEGMENT CODE
|
||||
?STACK SEGMENT IDATA
|
||||
|
||||
RSEG ?STACK
|
||||
DS 1
|
||||
|
||||
EXTRN CODE (?C_START)
|
||||
PUBLIC ?C_STARTUP
|
||||
|
||||
CSEG AT 0
|
||||
?C_STARTUP: LJMP STARTUP1
|
||||
|
||||
RSEG ?C_C51STARTUP
|
||||
|
||||
STARTUP1:
|
||||
|
||||
IF IDATALEN <> 0
|
||||
MOV R0,#IDATALEN - 1
|
||||
CLR A
|
||||
IDATALOOP: MOV @R0,A
|
||||
DJNZ R0,IDATALOOP
|
||||
ENDIF
|
||||
|
||||
IF XDATALEN <> 0
|
||||
MOV DPTR,#XDATASTART
|
||||
MOV R7,#LOW (XDATALEN)
|
||||
IF (LOW (XDATALEN)) <> 0
|
||||
MOV R6,#(HIGH (XDATALEN)) +1
|
||||
ELSE
|
||||
MOV R6,#HIGH (XDATALEN)
|
||||
ENDIF
|
||||
CLR A
|
||||
XDATALOOP: MOVX @DPTR,A
|
||||
INC DPTR
|
||||
DJNZ R7,XDATALOOP
|
||||
DJNZ R6,XDATALOOP
|
||||
ENDIF
|
||||
|
||||
IF PPAGEENABLE <> 0
|
||||
MOV PPAGE_SFR,#PPAGE
|
||||
ENDIF
|
||||
|
||||
IF PDATALEN <> 0
|
||||
MOV R0,#LOW (PDATASTART)
|
||||
MOV R7,#LOW (PDATALEN)
|
||||
CLR A
|
||||
PDATALOOP: MOVX @R0,A
|
||||
INC R0
|
||||
DJNZ R7,PDATALOOP
|
||||
ENDIF
|
||||
|
||||
IF IBPSTACK <> 0
|
||||
EXTRN DATA (?C_IBP)
|
||||
|
||||
MOV ?C_IBP,#LOW IBPSTACKTOP
|
||||
ENDIF
|
||||
|
||||
IF XBPSTACK <> 0
|
||||
EXTRN DATA (?C_XBP)
|
||||
|
||||
MOV ?C_XBP,#HIGH XBPSTACKTOP
|
||||
MOV ?C_XBP+1,#LOW XBPSTACKTOP
|
||||
ENDIF
|
||||
|
||||
IF PBPSTACK <> 0
|
||||
EXTRN DATA (?C_PBP)
|
||||
MOV ?C_PBP,#LOW PBPSTACKTOP
|
||||
ENDIF
|
||||
|
||||
MOV SP,#?STACK-1
|
||||
|
||||
; This code is required if you use L51_BANK.A51 with Banking Mode 4
|
||||
;<h> Code Banking
|
||||
; <q> Select Bank 0 for L51_BANK.A51 Mode 4
|
||||
#if 0
|
||||
; <i> Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4.
|
||||
EXTRN CODE (?B_SWITCH0)
|
||||
CALL ?B_SWITCH0 ; init bank mechanism to code bank 0
|
||||
#endif
|
||||
;</h>
|
||||
LJMP ?C_START
|
||||
|
||||
END
|
127
mycode/EEPROM.c
Normal file
127
mycode/EEPROM.c
Normal file
@ -0,0 +1,127 @@
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* --- STC MCU Limited ------------------------------------------------*/
|
||||
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
/* --- QQ: 800003751 -------------------------------------------------*/
|
||||
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
/*************** 功能说明 ****************
|
||||
|
||||
本文件为STC8系列的内置EEPROM读写程序,用户几乎可以不修改这个程序.
|
||||
|
||||
******************************************/
|
||||
|
||||
#include "config.h"
|
||||
#include "eeprom.h"
|
||||
|
||||
//========================================================================
|
||||
// 函数: void ISP_Disable(void)
|
||||
// 描述: 禁止访问ISP/IAP.
|
||||
// 参数: non.
|
||||
// 返回: non.
|
||||
// 版本: V1.0, 2012-10-22
|
||||
//========================================================================
|
||||
void DisableEEPROM(void)
|
||||
{
|
||||
IAP_CONTR = 0; //禁止IAP操作
|
||||
IAP_CMD = 0; //去除IAP命令
|
||||
IAP_TRIG = 0; //防止IAP命令误触发
|
||||
IAP_ADDRH = 0xff; //清0地址高字节
|
||||
IAP_ADDRL = 0xff; //清0地址低字节,指向非EEPROM区,防止误操作
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// 函数: void EEPROM_Trig(void)
|
||||
// 描述: 触发EEPROM操作.
|
||||
// 参数: none.
|
||||
// 返回: none.
|
||||
// 版本: V1.0, 2014-6-30
|
||||
//========================================================================
|
||||
void EEPROM_Trig(void)
|
||||
{
|
||||
F0 = EA; //保存全局中断
|
||||
EA = 0; //禁止中断, 避免触发命令无效
|
||||
IAP_TRIG = 0x5A;
|
||||
IAP_TRIG = 0xA5; //先送5AH,再送A5H到IAP触发寄存器,每次都需要如此
|
||||
//送完A5H后,IAP命令立即被触发启动
|
||||
//CPU等待IAP完成后,才会继续执行程序。
|
||||
_nop_();
|
||||
_nop_();
|
||||
EA = F0; //恢复全局中断
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// 函数: void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number)
|
||||
// 描述: 从指定EEPROM首地址读出n个字节放指定的缓冲.
|
||||
// 参数: EE_address: 读出EEPROM的首地址.
|
||||
// DataAddress: 读出数据放缓冲的首地址.
|
||||
// number: 读出的字节长度.
|
||||
// 返回: non.
|
||||
// 版本: V1.0, 2012-10-22
|
||||
//========================================================================
|
||||
void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number)
|
||||
{
|
||||
IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够
|
||||
IAP_READ(); //送字节读命令,命令不需改变时,不需重新送命令
|
||||
do
|
||||
{
|
||||
IAP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址)
|
||||
IAP_ADDRL = EE_address % 256; //送地址低字节
|
||||
EEPROM_Trig(); //触发EEPROM操作
|
||||
*DataAddress = IAP_DATA; //读出的数据送往
|
||||
EE_address++;
|
||||
DataAddress++;
|
||||
}while(--number);
|
||||
|
||||
DisableEEPROM();
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// 函数: void EEPROM_SectorErase(u16 EE_address)
|
||||
// 描述: 把指定地址的EEPROM扇区擦除.
|
||||
// 参数: EE_address: 要擦除的扇区EEPROM的地址.
|
||||
// 返回: non.
|
||||
// 版本: V1.0, 2013-5-10
|
||||
//========================================================================
|
||||
void EEPROM_SectorErase(u16 EE_address)
|
||||
{
|
||||
IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够
|
||||
IAP_ERASE(); //宏调用, 送扇区擦除命令,命令不需改变时,不需重新送命令
|
||||
//只有扇区擦除,没有字节擦除,512字节/扇区。
|
||||
//扇区中任意一个字节地址都是扇区地址。
|
||||
IAP_ADDRH = EE_address / 256; //送扇区地址高字节(地址需要改变时才需重新送地址)
|
||||
IAP_ADDRL = EE_address % 256; //送扇区地址低字节
|
||||
EEPROM_Trig(); //触发EEPROM操作
|
||||
DisableEEPROM(); //禁止EEPROM操作
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// 函数: void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number)
|
||||
// 描述: 把缓冲的n个字节写入指定首地址的EEPROM.
|
||||
// 参数: EE_address: 写入EEPROM的首地址.
|
||||
// DataAddress: 写入源数据的缓冲的首地址.
|
||||
// number: 写入的字节长度.
|
||||
// 返回: non.
|
||||
// 版本: V1.0, 2012-10-22
|
||||
//========================================================================
|
||||
void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number)
|
||||
{
|
||||
IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够
|
||||
IAP_WRITE(); //宏调用, 送字节写命令
|
||||
do
|
||||
{
|
||||
IAP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址)
|
||||
IAP_ADDRL = EE_address % 256; //送地址低字节
|
||||
IAP_DATA = *DataAddress; //送数据到IAP_DATA,只有数据改变时才需重新送
|
||||
EEPROM_Trig(); //触发EEPROM操作
|
||||
EE_address++; //下一个地址
|
||||
DataAddress++; //下一个数据
|
||||
}while(--number); //直到结束
|
||||
DisableEEPROM();
|
||||
}
|
||||
|
145
mycode/GPIO.c
Normal file
145
mycode/GPIO.c
Normal file
@ -0,0 +1,145 @@
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* --- STC MCU Limited ------------------------------------------------*/
|
||||
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
/* --- QQ: 800003751 -------------------------------------------------*/
|
||||
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
/*************** 功能说明 ****************
|
||||
|
||||
本文件为STC8系列的端口初始化程序,用户几乎可以不修改这个程序.
|
||||
|
||||
******************************************/
|
||||
|
||||
#include "GPIO.h"
|
||||
//========================================================================
|
||||
// 函数: u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
|
||||
// 描述: 初始化IO口.
|
||||
// 参数: GPIOx: 结构参数,请参考timer.h里的定义.
|
||||
// 返回: 成功返回0, 空操作返回1,错误返回2.
|
||||
// 版本: V1.0, 2012-10-22
|
||||
//========================================================================
|
||||
u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
|
||||
{
|
||||
if (GPIO > GPIO_P7)
|
||||
return 1; // 空操作
|
||||
if (GPIOx->Mode > GPIO_OUT_PP)
|
||||
return 2; // 错误
|
||||
if (GPIO == GPIO_P0)
|
||||
{
|
||||
if (GPIOx->Mode == GPIO_PullUp)
|
||||
P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
if (GPIOx->Mode == GPIO_HighZ)
|
||||
P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; // 开漏输出
|
||||
if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; // 推挽输出
|
||||
}
|
||||
if (GPIO == GPIO_P1)
|
||||
{
|
||||
if (GPIOx->Mode == GPIO_PullUp)
|
||||
P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
if (GPIOx->Mode == GPIO_HighZ)
|
||||
P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; // 开漏输出
|
||||
if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
P1M1 &= ~GPIOx->Pin, P1M0 |= GPIOx->Pin; // 推挽输出
|
||||
}
|
||||
if (GPIO == GPIO_P2)
|
||||
{
|
||||
if (GPIOx->Mode == GPIO_PullUp)
|
||||
P2M1 &= ~GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
if (GPIOx->Mode == GPIO_HighZ)
|
||||
P2M1 |= GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
P2M1 |= GPIOx->Pin, P2M0 |= GPIOx->Pin; // 开漏输出
|
||||
if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
P2M1 &= ~GPIOx->Pin, P2M0 |= GPIOx->Pin; // 推挽输出
|
||||
}
|
||||
if (GPIO == GPIO_P3)
|
||||
{
|
||||
if (GPIOx->Mode == GPIO_PullUp)
|
||||
P3M1 &= ~GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
if (GPIOx->Mode == GPIO_HighZ)
|
||||
P3M1 |= GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
P3M1 |= GPIOx->Pin, P3M0 |= GPIOx->Pin; // 开漏输出
|
||||
if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
P3M1 &= ~GPIOx->Pin, P3M0 |= GPIOx->Pin; // 推挽输出
|
||||
}
|
||||
if (GPIO == GPIO_P4)
|
||||
{
|
||||
if (GPIOx->Mode == GPIO_PullUp)
|
||||
P4M1 &= ~GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
if (GPIOx->Mode == GPIO_HighZ)
|
||||
P4M1 |= GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
P4M1 |= GPIOx->Pin, P4M0 |= GPIOx->Pin; // 开漏输出
|
||||
if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
P4M1 &= ~GPIOx->Pin, P4M0 |= GPIOx->Pin; // 推挽输出
|
||||
}
|
||||
if (GPIO == GPIO_P5)
|
||||
{
|
||||
if (GPIOx->Mode == GPIO_PullUp)
|
||||
P5M1 &= ~GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
if (GPIOx->Mode == GPIO_HighZ)
|
||||
P5M1 |= GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
P5M1 |= GPIOx->Pin, P5M0 |= GPIOx->Pin; // 开漏输出
|
||||
if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
P5M1 &= ~GPIOx->Pin, P5M0 |= GPIOx->Pin; // 推挽输出
|
||||
}
|
||||
if (GPIO == GPIO_P6)
|
||||
{
|
||||
if (GPIOx->Mode == GPIO_PullUp)
|
||||
P6M1 &= ~GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
if (GPIOx->Mode == GPIO_HighZ)
|
||||
P6M1 |= GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
P6M1 |= GPIOx->Pin, P6M0 |= GPIOx->Pin; // 开漏输出
|
||||
if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
P6M1 &= ~GPIOx->Pin, P6M0 |= GPIOx->Pin; // 推挽输出
|
||||
}
|
||||
if (GPIO == GPIO_P7)
|
||||
{
|
||||
if (GPIOx->Mode == GPIO_PullUp)
|
||||
P7M1 &= ~GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // 上拉准双向口
|
||||
if (GPIOx->Mode == GPIO_HighZ)
|
||||
P7M1 |= GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // 浮空输入
|
||||
if (GPIOx->Mode == GPIO_OUT_OD)
|
||||
P7M1 |= GPIOx->Pin, P7M0 |= GPIOx->Pin; // 开漏输出
|
||||
if (GPIOx->Mode == GPIO_OUT_PP)
|
||||
P7M1 &= ~GPIOx->Pin, P7M0 |= GPIOx->Pin; // 推挽输出
|
||||
}
|
||||
return 0; // 成功
|
||||
}
|
||||
/******************** IO口配置 ********************/
|
||||
void GPIO_config(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure; // 结构定义
|
||||
|
||||
GPIO_InitStructure.Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; // 指定要初始化 或操作p32
|
||||
GPIO_InitStructure.Mode = GPIO_PullUp; // 指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
|
||||
GPIO_Inilize(GPIO_P3, &GPIO_InitStructure); // 初始化
|
||||
|
||||
GPIO_InitStructure.Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4; // 指定要初始化 或操作输出使能
|
||||
GPIO_InitStructure.Mode = GPIO_OUT_PP; // 指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
|
||||
GPIO_Inilize(GPIO_P1, &GPIO_InitStructure); // 初始化
|
||||
|
||||
GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; // 指定要初始化 或操作输出使能
|
||||
GPIO_InitStructure.Mode = GPIO_PullUp; // 指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
|
||||
GPIO_Inilize(GPIO_P1, &GPIO_InitStructure); // 初始化
|
||||
|
||||
GPIO_InitStructure.Pin = GPIO_Pin_4; // 指定要初始化 或操作输出使能
|
||||
GPIO_InitStructure.Mode = GPIO_PullUp; // 指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
|
||||
GPIO_Inilize(GPIO_P5, &GPIO_InitStructure); // 初始化
|
||||
EN=1;
|
||||
}
|
||||
|
453
mycode/UART.C
Normal file
453
mycode/UART.C
Normal file
@ -0,0 +1,453 @@
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* --- STC MCU Limited ------------------------------------------------*/
|
||||
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
/* --- QQ: 800003751 -------------------------------------------------*/
|
||||
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
#include "UART.h"
|
||||
#include "STDIO.H"
|
||||
|
||||
#ifdef UART1
|
||||
COMx_Define COM1;
|
||||
u8 xdata TX1_Buffer[COM_TX1_Lenth]; //发送缓冲
|
||||
u8 xdata RX1_Buffer[COM_RX1_Lenth]; //接收缓冲
|
||||
#endif
|
||||
#ifdef UART2
|
||||
COMx_Define COM2;
|
||||
u8 xdata TX2_Buffer[COM_TX2_Lenth]; //发送缓冲
|
||||
u8 xdata RX2_Buffer[COM_RX2_Lenth]; //接收缓冲
|
||||
#endif
|
||||
#ifdef UART3
|
||||
COMx_Define COM3;
|
||||
u8 xdata TX3_Buffer[COM_TX3_Lenth]; //发送缓冲
|
||||
u8 xdata RX3_Buffer[COM_RX3_Lenth]; //接收缓冲
|
||||
#endif
|
||||
#ifdef UART4
|
||||
COMx_Define COM4;
|
||||
u8 xdata TX4_Buffer[COM_TX4_Lenth]; //发送缓冲
|
||||
u8 xdata RX4_Buffer[COM_RX4_Lenth]; //接收缓冲
|
||||
#endif
|
||||
|
||||
u8 UART_Configuration(u8 UARTx, COMx_InitDefine *COMx)
|
||||
{
|
||||
u8 i;
|
||||
u32 j;
|
||||
|
||||
#ifdef UART1
|
||||
if(UARTx == UART1)
|
||||
{
|
||||
COM1.id = 1;
|
||||
COM1.TX_read = 0;
|
||||
COM1.TX_write = 0;
|
||||
COM1.B_TX_busy = 0;
|
||||
COM1.RX_Cnt = 0;
|
||||
COM1.RX_TimeOut = 0;
|
||||
COM1.B_RX_OK = 0;
|
||||
for(i=0; i<COM_TX1_Lenth; i++) TX1_Buffer[i] = 0;
|
||||
for(i=0; i<COM_RX1_Lenth; i++) RX1_Buffer[i] = 0;
|
||||
|
||||
if(COMx->UART_Priority > Priority_3) return 2; //错误
|
||||
UART1_Priority(COMx->UART_Priority); //指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
|
||||
if(COMx->UART_Mode > UART_9bit_BRTx) return 2; //模式错误
|
||||
SCON = (SCON & 0x3f) | COMx->UART_Mode;
|
||||
if((COMx->UART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //可变波特率
|
||||
{
|
||||
j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //按1T计算
|
||||
if(j >= 65536UL) return 2; //错误
|
||||
j = 65536UL - j;
|
||||
if(COMx->UART_BRT_Use == BRT_Timer1)
|
||||
{
|
||||
TR1 = 0;
|
||||
AUXR &= ~0x01; //S1 BRT Use Timer1;
|
||||
TMOD &= ~(1<<6); //Timer1 set As Timer
|
||||
TMOD &= ~0x30; //Timer1_16bitAutoReload;
|
||||
AUXR |= (1<<6); //Timer1 set as 1T mode
|
||||
TH1 = (u8)(j>>8);
|
||||
TL1 = (u8)j;
|
||||
ET1 = 0; //禁止中断
|
||||
TMOD &= ~0x40; //定时
|
||||
INT_CLKO &= ~0x02; //不输出时钟
|
||||
TR1 = 1;
|
||||
}
|
||||
else if(COMx->UART_BRT_Use == BRT_Timer2)
|
||||
{
|
||||
AUXR &= ~(1<<4); //Timer stop
|
||||
AUXR |= 0x01; //S1 BRT Use Timer2;
|
||||
AUXR &= ~(1<<3); //Timer2 set As Timer
|
||||
AUXR |= (1<<2); //Timer2 set as 1T mode
|
||||
TH2 = (u8)(j>>8);
|
||||
TL2 = (u8)j;
|
||||
IE2 &= ~(1<<2); //禁止中断
|
||||
AUXR |= (1<<4); //Timer run enable
|
||||
}
|
||||
else return 2; //错误
|
||||
}
|
||||
else if(COMx->UART_Mode == UART_ShiftRight)
|
||||
{
|
||||
if(COMx->BaudRateDouble == ENABLE) AUXR |= (1<<5); //固定波特率SysClk/2
|
||||
else AUXR &= ~(1<<5); //固定波特率SysClk/12
|
||||
}
|
||||
else if(COMx->UART_Mode == UART_9bit) //固定波特率SysClk*2^SMOD/64
|
||||
{
|
||||
if(COMx->BaudRateDouble == ENABLE) PCON |= (1<<7); //固定波特率SysClk/32
|
||||
else PCON &= ~(1<<7); //固定波特率SysClk/64
|
||||
}
|
||||
if(COMx->UART_Interrupt == ENABLE) ES = 1; //允许中断
|
||||
else ES = 0; //禁止中断
|
||||
if(COMx->UART_RxEnable == ENABLE) REN = 1; //允许接收
|
||||
else REN = 0; //禁止接收
|
||||
P_SW1 = (P_SW1 & 0x3f) | (COMx->UART_P_SW & 0xc0); //切换IO
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef UART2
|
||||
if(UARTx == UART2)
|
||||
{
|
||||
COM2.id = 2;
|
||||
COM2.TX_read = 0;
|
||||
COM2.TX_write = 0;
|
||||
COM2.B_TX_busy = 0;
|
||||
COM2.RX_Cnt = 0;
|
||||
COM2.RX_TimeOut = 0;
|
||||
COM2.B_RX_OK = 0;
|
||||
for(i=0; i<COM_TX2_Lenth; i++) TX2_Buffer[i] = 0;
|
||||
for(i=0; i<COM_RX2_Lenth; i++) RX2_Buffer[i] = 0;
|
||||
|
||||
if((COMx->UART_Mode == UART_9bit_BRTx) ||(COMx->UART_Mode == UART_8bit_BRTx)) //可变波特率
|
||||
{
|
||||
if(COMx->UART_Priority > Priority_3) return 2; //错误
|
||||
UART2_Priority(COMx->UART_Priority); //指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
|
||||
if(COMx->UART_Mode == UART_9bit_BRTx) S2CON |= (1<<7); //9bit
|
||||
else S2CON &= ~(1<<7); //8bit
|
||||
j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //按1T计算
|
||||
if(j >= 65536UL) return 2; //错误
|
||||
j = 65536UL - j;
|
||||
AUXR &= ~(1<<4); //Timer stop
|
||||
AUXR &= ~(1<<3); //Timer2 set As Timer
|
||||
AUXR |= (1<<2); //Timer2 set as 1T mode
|
||||
TH2 = (u8)(j>>8);
|
||||
TL2 = (u8)j;
|
||||
IE2 &= ~(1<<2); //禁止中断
|
||||
AUXR |= (1<<4); //Timer run enable
|
||||
}
|
||||
else return 2; //模式错误
|
||||
if(COMx->UART_Interrupt == ENABLE) IE2 |= 1; //允许中断
|
||||
else IE2 &= ~1; //禁止中断
|
||||
if(COMx->UART_RxEnable == ENABLE) S2CON |= (1<<4); //允许接收
|
||||
else S2CON &= ~(1<<4); //禁止接收
|
||||
P_SW2 = (P_SW2 & ~1) | (COMx->UART_P_SW & 0x01); //切换IO
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef UART3
|
||||
if(UARTx == UART3)
|
||||
{
|
||||
COM3.id = 3;
|
||||
COM3.TX_read = 0;
|
||||
COM3.TX_write = 0;
|
||||
COM3.B_TX_busy = 0;
|
||||
COM3.RX_Cnt = 0;
|
||||
COM3.RX_TimeOut = 0;
|
||||
COM3.B_RX_OK = 0;
|
||||
for(i=0; i<COM_TX3_Lenth; i++) TX3_Buffer[i] = 0;
|
||||
for(i=0; i<COM_RX3_Lenth; i++) RX3_Buffer[i] = 0;
|
||||
|
||||
if((COMx->UART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //可变波特率
|
||||
{
|
||||
if(COMx->UART_Priority > Priority_3) return 2; //错误
|
||||
UART3_Priority(COMx->UART_Priority); //指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
|
||||
if(COMx->UART_Mode == UART_9bit_BRTx) S3_9bit(); //9bit
|
||||
else S3_8bit(); //8bit
|
||||
j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //按1T计算
|
||||
if(j >= 65536UL) return 2; //错误
|
||||
j = 65536UL - j;
|
||||
if(COMx->UART_BRT_Use == BRT_Timer3)
|
||||
{
|
||||
S3_BRT_UseTimer3(); //S3 BRT Use Timer3;
|
||||
TH3 = (u8)(j>>8);
|
||||
TL3 = (u8)j;
|
||||
T4T3M &= 0xf0;
|
||||
T4T3M |= 0x0a; //Timer3 set As Timer, 1T mode, Start timer3
|
||||
}
|
||||
else if(COMx->UART_BRT_Use == BRT_Timer2)
|
||||
{
|
||||
AUXR &= ~(1<<4); //Timer stop
|
||||
S3_BRT_UseTimer2(); //S3 BRT Use Timer2;
|
||||
AUXR &= ~(1<<3); //Timer2 set As Timer
|
||||
AUXR |= (1<<2); //Timer2 set as 1T mode
|
||||
TH2 = (u8)(j>>8);
|
||||
TL2 = (u8)j;
|
||||
IE2 &= ~(1<<2); //禁止中断
|
||||
AUXR |= (1<<4); //Timer run enable
|
||||
}
|
||||
else return 2; //错误
|
||||
}
|
||||
else return 2; //模式错误
|
||||
if(COMx->UART_Interrupt == ENABLE) S3_Int_Enable(); //允许中断
|
||||
else S3_Int_Disable(); //禁止中断
|
||||
if(COMx->UART_RxEnable == ENABLE) S3_RX_Enable(); //允许接收
|
||||
else S3_RX_Disable(); //禁止接收
|
||||
P_SW2 = (P_SW2 & ~2) | (COMx->UART_P_SW & 0x02); //切换IO
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef UART4
|
||||
if(UARTx == UART4)
|
||||
{
|
||||
COM4.id = 3;
|
||||
COM4.TX_read = 0;
|
||||
COM4.TX_write = 0;
|
||||
COM4.B_TX_busy = 0;
|
||||
COM4.RX_Cnt = 0;
|
||||
COM4.RX_TimeOut = 0;
|
||||
COM4.B_RX_OK = 0;
|
||||
for(i=0; i<COM_TX4_Lenth; i++) TX4_Buffer[i] = 0;
|
||||
for(i=0; i<COM_RX4_Lenth; i++) RX4_Buffer[i] = 0;
|
||||
|
||||
if((COMx->UART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //可变波特率
|
||||
{
|
||||
if(COMx->UART_Priority > Priority_3) return 2; //错误
|
||||
UART4_Priority(COMx->UART_Priority); //指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
|
||||
if(COMx->UART_Mode == UART_9bit_BRTx) S4_9bit(); //9bit
|
||||
else S4_8bit(); //8bit
|
||||
j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //按1T计算
|
||||
if(j >= 65536UL) return 2; //错误
|
||||
j = 65536UL - j;
|
||||
if(COMx->UART_BRT_Use == BRT_Timer4)
|
||||
{
|
||||
S4_BRT_UseTimer4(); //S4 BRT Use Timer4;
|
||||
TH4 = (u8)(j>>8);
|
||||
TL4 = (u8)j;
|
||||
T4T3M &= 0x0f;
|
||||
T4T3M |= 0xa0; //Timer4 set As Timer, 1T mode, Start timer4
|
||||
}
|
||||
else if(COMx->UART_BRT_Use == BRT_Timer2)
|
||||
{
|
||||
AUXR &= ~(1<<4); //Timer stop
|
||||
S4_BRT_UseTimer2(); //S4 BRT Use Timer2;
|
||||
AUXR &= ~(1<<3); //Timer2 set As Timer
|
||||
AUXR |= (1<<2); //Timer2 set as 1T mode
|
||||
TH2 = (u8)(j>>8);
|
||||
TL2 = (u8)j;
|
||||
IE2 &= ~(1<<2); //禁止中断
|
||||
AUXR |= (1<<4); //Timer run enable
|
||||
}
|
||||
else return 2; //错误
|
||||
}
|
||||
else return 2; //模式错误
|
||||
if(COMx->UART_Interrupt == ENABLE) S4_Int_Enable(); //允许中断
|
||||
else S4_Int_Disable(); //禁止中断
|
||||
if(COMx->UART_RxEnable == ENABLE) S4_RX_Enable(); //允许接收
|
||||
else S4_RX_Disable(); //禁止接收
|
||||
P_SW2 = (P_SW2 & ~4) | (COMx->UART_P_SW & 0x04); //切换IO
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
return 2; //错误
|
||||
}
|
||||
|
||||
/*********************************************************/
|
||||
|
||||
/********************* UART1 函数 ************************/
|
||||
#ifdef UART1
|
||||
void TX1_write2buff(u8 dat) //写入发送缓冲,指针+1
|
||||
{
|
||||
TX1_Buffer[COM1.TX_write] = dat; //装发送缓冲
|
||||
if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0;
|
||||
|
||||
if(COM1.B_TX_busy == 0) //空闲
|
||||
{
|
||||
COM1.B_TX_busy = 1; //标志忙
|
||||
TI = 1; //触发发送中断
|
||||
}
|
||||
}
|
||||
|
||||
void PrintString1(u8 *puts)
|
||||
{
|
||||
for (; *puts != 0; puts++) TX1_write2buff(*puts); //遇到停止符0结束
|
||||
}
|
||||
|
||||
void UART1_int (void) interrupt UART1_VECTOR
|
||||
{
|
||||
if(RI)
|
||||
{
|
||||
RI = 0;
|
||||
if(COM1.B_RX_OK == 0)
|
||||
{
|
||||
if(COM1.RX_Cnt >= COM_RX1_Lenth) COM1.RX_Cnt = 0;
|
||||
RX1_Buffer[COM1.RX_Cnt++] = SBUF;
|
||||
COM1.RX_TimeOut = TimeOutSet1;
|
||||
}
|
||||
}
|
||||
|
||||
if(TI)
|
||||
{
|
||||
TI = 0;
|
||||
if(COM1.TX_read != COM1.TX_write)
|
||||
{
|
||||
SBUF = TX1_Buffer[COM1.TX_read];
|
||||
if(++COM1.TX_read >= COM_TX1_Lenth) COM1.TX_read = 0;
|
||||
}
|
||||
else COM1.B_TX_busy = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/********************* UART2 函数 ************************/
|
||||
#ifdef UART2
|
||||
void TX2_write2buff(u8 dat) //写入发送缓冲,指针+1
|
||||
{
|
||||
TX2_Buffer[COM2.TX_write] = dat; //装发送缓冲
|
||||
if(++COM2.TX_write >= COM_TX2_Lenth) COM2.TX_write = 0;
|
||||
|
||||
if(COM2.B_TX_busy == 0) //空闲
|
||||
{
|
||||
COM2.B_TX_busy = 1; //标志忙
|
||||
SET_TI2(); //触发发送中断
|
||||
}
|
||||
}
|
||||
|
||||
void PrintString2(u8 *puts)
|
||||
{
|
||||
for (; *puts != 0; puts++) TX2_write2buff(*puts); //遇到停止符0结束
|
||||
}
|
||||
|
||||
void UART2_int (void) interrupt UART2_VECTOR
|
||||
{
|
||||
if(RI2)
|
||||
{
|
||||
CLR_RI2();
|
||||
if(COM2.B_RX_OK == 0)
|
||||
{
|
||||
if(COM2.RX_Cnt >= COM_RX2_Lenth) COM2.RX_Cnt = 0;
|
||||
RX2_Buffer[COM2.RX_Cnt++] = S2BUF;
|
||||
COM2.RX_TimeOut = TimeOutSet2;
|
||||
}
|
||||
}
|
||||
|
||||
if(TI2)
|
||||
{
|
||||
CLR_TI2();
|
||||
if(COM2.TX_read != COM2.TX_write)
|
||||
{
|
||||
S2BUF = TX2_Buffer[COM2.TX_read];
|
||||
if(++COM2.TX_read >= COM_TX2_Lenth) COM2.TX_read = 0;
|
||||
}
|
||||
else COM2.B_TX_busy = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/********************* UART3 函数 ************************/
|
||||
#ifdef UART3
|
||||
void TX3_write2buff(u8 dat) //写入发送缓冲,指针+1
|
||||
{
|
||||
TX3_Buffer[COM3.TX_write] = dat; //装发送缓冲
|
||||
if(++COM3.TX_write >= COM_TX3_Lenth) COM3.TX_write = 0;
|
||||
|
||||
if(COM3.B_TX_busy == 0) //空闲
|
||||
{
|
||||
COM3.B_TX_busy = 1; //标志忙
|
||||
SET_TI3(); //触发发送中断
|
||||
}
|
||||
}
|
||||
|
||||
void PrintString3(u8 *puts)
|
||||
{
|
||||
for (; *puts != 0; puts++) TX3_write2buff(*puts); //遇到停止符0结束
|
||||
}
|
||||
|
||||
void UART3_int (void) interrupt UART3_VECTOR
|
||||
{
|
||||
if(RI3)
|
||||
{
|
||||
CLR_RI3();
|
||||
if(COM3.B_RX_OK == 0)
|
||||
{
|
||||
if(COM3.RX_Cnt >= COM_RX3_Lenth) COM3.RX_Cnt = 0;
|
||||
RX3_Buffer[COM3.RX_Cnt++] = S3BUF;
|
||||
COM3.RX_TimeOut = TimeOutSet3;
|
||||
}
|
||||
}
|
||||
|
||||
if(TI3)
|
||||
{
|
||||
CLR_TI3();
|
||||
if(COM3.TX_read != COM3.TX_write)
|
||||
{
|
||||
S3BUF = TX3_Buffer[COM3.TX_read];
|
||||
if(++COM3.TX_read >= COM_TX3_Lenth) COM3.TX_read = 0;
|
||||
}
|
||||
else COM3.B_TX_busy = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/********************* UART4 函数 ************************/
|
||||
#ifdef UART4
|
||||
void TX4_write2buff(u8 dat) //写入发送缓冲,指针+1
|
||||
{
|
||||
TX4_Buffer[COM4.TX_write] = dat; //装发送缓冲
|
||||
if(++COM4.TX_write >= COM_TX4_Lenth) COM4.TX_write = 0;
|
||||
|
||||
if(COM4.B_TX_busy == 0) //空闲
|
||||
{
|
||||
COM4.B_TX_busy = 1; //标志忙
|
||||
SET_TI4(); //触发发送中断
|
||||
}
|
||||
}
|
||||
|
||||
void PrintString4(u8 *puts)
|
||||
{
|
||||
for (; *puts != 0; puts++) TX4_write2buff(*puts); //遇到停止符0结束
|
||||
}
|
||||
|
||||
void UART4_int (void) interrupt UART4_VECTOR
|
||||
{
|
||||
if(RI4)
|
||||
{
|
||||
CLR_RI4();
|
||||
if(COM4.B_RX_OK == 0)
|
||||
{
|
||||
if(COM4.RX_Cnt >= COM_RX4_Lenth) COM4.RX_Cnt = 0;
|
||||
RX4_Buffer[COM4.RX_Cnt++] = S4BUF;
|
||||
COM4.RX_TimeOut = TimeOutSet4;
|
||||
}
|
||||
}
|
||||
|
||||
if(TI4)
|
||||
{
|
||||
CLR_TI4();
|
||||
if(COM4.TX_read != COM4.TX_write)
|
||||
{
|
||||
S4BUF = TX4_Buffer[COM4.TX_read];
|
||||
if(++COM4.TX_read >= COM_TX4_Lenth) COM4.TX_read = 0;
|
||||
}
|
||||
else COM4.B_TX_busy = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
void UART_config(void)
|
||||
{
|
||||
COMx_InitDefine COMx_InitStructure;
|
||||
COMx_InitStructure.UART_Mode = UART_8bit_BRTx;
|
||||
COMx_InitStructure.UART_BRT_Use = BRT_Timer1;
|
||||
COMx_InitStructure.UART_BaudRate = 115200ul;
|
||||
COMx_InitStructure.UART_RxEnable = ENABLE;
|
||||
COMx_InitStructure.BaudRateDouble = DISABLE;
|
||||
COMx_InitStructure.UART_Interrupt = ENABLE;
|
||||
COMx_InitStructure.UART_Priority = Priority_0;
|
||||
COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31;
|
||||
UART_Configuration(UART1, &COMx_InitStructure);
|
||||
}
|
||||
char putchar(char c)
|
||||
{
|
||||
TX1_write2buff(c);
|
||||
return c;
|
||||
}
|
382
mycode/common.c
Normal file
382
mycode/common.c
Normal file
@ -0,0 +1,382 @@
|
||||
#include "common.h"
|
||||
#include "GPIO.h"
|
||||
#include "tm1650.h"
|
||||
#include "STDIO.H"
|
||||
#include "EEPROM.h"
|
||||
#include "timer.h"
|
||||
u8 keyflag = 0;
|
||||
u8 sunmode = 1;
|
||||
u8 pog = 4;
|
||||
u16 keytime = 0;
|
||||
u8 keyloog = 0;
|
||||
u8 speedmode1 = speedstart, speedmode2 = speedstart, speedmode3 = speedstart, speedmode4 = speedstart, subdivision1 = substart, subdivision2 = substart, subdivision3 = substart, subdivision4 = substart;
|
||||
u8 num[9] = 0;
|
||||
static void key_add(u8 *speedmode, u8 *subdivision)
|
||||
{
|
||||
u8 key__time = 0;
|
||||
if (keyloog)
|
||||
key__time = 100;
|
||||
else
|
||||
key__time = 500;
|
||||
switch (pog)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
if (keyflag == 0)
|
||||
{
|
||||
*speedmode += 1;
|
||||
if (*speedmode >= speedmax)
|
||||
*speedmode = speedmax;
|
||||
keyflag = 1;
|
||||
}
|
||||
if (keytime > key__time)
|
||||
{
|
||||
*speedmode += 1;
|
||||
keytime = 0;
|
||||
keyloog = 1;
|
||||
if (*speedmode >= speedmax)
|
||||
*speedmode = speedmax;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (keyflag == 0)
|
||||
{
|
||||
*subdivision += 1;
|
||||
if (*subdivision >= subdivisionmax)
|
||||
*subdivision = subdivisionmax;
|
||||
keyflag = 1;
|
||||
}
|
||||
if (keytime > key__time)
|
||||
{
|
||||
*subdivision += 1;
|
||||
keytime = 0;
|
||||
keyloog = 1;
|
||||
if (*subdivision >= subdivisionmax)
|
||||
*subdivision = subdivisionmax;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void key_Redu(u8 *speedmode, u8 *subdivision)
|
||||
{
|
||||
u8 key__time = 0;
|
||||
if (keyloog)
|
||||
key__time = 100;
|
||||
else
|
||||
key__time = 500;
|
||||
switch (pog)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
if (keyflag == 0)
|
||||
{
|
||||
*speedmode -= 1;
|
||||
if (*speedmode <= speedmin)
|
||||
*speedmode = speedmin;
|
||||
keyflag = 1;
|
||||
}
|
||||
if (keytime > key__time)
|
||||
{
|
||||
*speedmode -= 1;
|
||||
keytime = 0;
|
||||
keyloog = 1;
|
||||
if (*speedmode <= speedmin)
|
||||
*speedmode = speedmin;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (keyflag == 0)
|
||||
{
|
||||
if (*subdivision <= subdivisionmin)
|
||||
*subdivision = subdivisionmin;
|
||||
else
|
||||
*subdivision -= 1;
|
||||
keyflag = 1;
|
||||
}
|
||||
if (keytime > key__time)
|
||||
{
|
||||
keytime = 0;
|
||||
keyloog = 1;
|
||||
if (*subdivision <= subdivisionmin)
|
||||
*subdivision = subdivisionmin;
|
||||
else
|
||||
*subdivision -= 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
void keyscan()
|
||||
{
|
||||
if (k1 == 0)
|
||||
if (keyflag == 0)
|
||||
{
|
||||
timex = 400 * subdivision1;
|
||||
DIR = 1;
|
||||
sunmode = 1;
|
||||
keyflag = 1;
|
||||
setconfig();
|
||||
}
|
||||
if (k2 == 0)
|
||||
if (keyflag == 0)
|
||||
{
|
||||
timex = 400 * subdivision2;
|
||||
DIR = 0;
|
||||
sunmode = 2;
|
||||
keyflag = 1;
|
||||
setconfig();
|
||||
}
|
||||
if (k3 == 0)
|
||||
if (keyflag == 0)
|
||||
{
|
||||
timex = 800 <<subdivision3;
|
||||
DIR = 1;
|
||||
sunmode = 3;
|
||||
keyflag = 1;
|
||||
setconfig();
|
||||
}
|
||||
if (k4 == 0)
|
||||
if (keyflag == 0)
|
||||
{
|
||||
timex = 0;
|
||||
sunmode = 4;
|
||||
keyflag = 1;
|
||||
setconfig();
|
||||
}
|
||||
if (k5 == 0)
|
||||
{
|
||||
if (keyflag == 0)
|
||||
{
|
||||
switch (pog)
|
||||
{
|
||||
case 1:
|
||||
pog = 2;
|
||||
break;
|
||||
case 2:
|
||||
pog = 3;
|
||||
break;
|
||||
case 3:
|
||||
pog = 4;
|
||||
setconfig();
|
||||
break;
|
||||
case 4:
|
||||
pog = 2;
|
||||
break;
|
||||
}
|
||||
keyflag = 1;
|
||||
}
|
||||
}
|
||||
if (k6 == 0)
|
||||
{
|
||||
switch (sunmode)
|
||||
{
|
||||
case 1:
|
||||
key_add(&speedmode1, &subdivision1);
|
||||
break;
|
||||
case 2:
|
||||
key_add(&speedmode2, &subdivision2);
|
||||
break;
|
||||
case 3:
|
||||
key_add(&speedmode3, &subdivision3);
|
||||
break;
|
||||
case 4:
|
||||
key_add(&speedmode4, &subdivision4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (k7 == 0)
|
||||
{
|
||||
switch (sunmode)
|
||||
{
|
||||
case 1:
|
||||
key_Redu(&speedmode1, &subdivision1);
|
||||
break;
|
||||
case 2:
|
||||
key_Redu(&speedmode2, &subdivision2);
|
||||
break;
|
||||
case 3:
|
||||
key_Redu(&speedmode3, &subdivision3);
|
||||
break;
|
||||
case 4:
|
||||
key_Redu(&speedmode4, &subdivision4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (k8 == 0)
|
||||
{
|
||||
if (keyflag == 0)
|
||||
{
|
||||
if (pog != 1)
|
||||
pog = 1;
|
||||
else
|
||||
pog = 4;
|
||||
setconfig();
|
||||
keyflag = 1;
|
||||
switch (sunmode)
|
||||
{
|
||||
case 1:
|
||||
timex = 400 << subdivision1;
|
||||
DIR = 1;
|
||||
break;
|
||||
case 2:
|
||||
timex = 400 << subdivision2;
|
||||
DIR = 0;
|
||||
break;
|
||||
case 3:
|
||||
timex = 800 << subdivision3;
|
||||
DIR = 1;
|
||||
break;
|
||||
case 4:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (k1 != 0 & k2 != 0 & k3 != 0 & k4 != 0 & k5 != 0 & k6 != 0 & k7 != 0 & k8 != 0)
|
||||
{
|
||||
keyflag = 0;
|
||||
keyloog = 0;
|
||||
}
|
||||
}
|
||||
static void dislittleplay(u8 speedmode, u16 subdivision)
|
||||
{
|
||||
switch (pog)
|
||||
{
|
||||
case 1:
|
||||
TM1650_printpogrun(sunmode, displaydata);
|
||||
break;
|
||||
case 2:
|
||||
TM1650_print_SMG1(speedmode);
|
||||
break;
|
||||
case 3:
|
||||
TM1650_print_SMG2(subdivision);
|
||||
break;
|
||||
case 4:
|
||||
TM1650_printpogstop(sunmode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
void display()
|
||||
{
|
||||
switch (sunmode)
|
||||
{
|
||||
case 1:
|
||||
dislittleplay(speedmode1, (u16)(1 << subdivision1));
|
||||
break;
|
||||
case 2:
|
||||
dislittleplay(speedmode2, (u16)(1 << subdivision2));
|
||||
break;
|
||||
case 3:
|
||||
dislittleplay(speedmode3, (u16)(1 << subdivision3));
|
||||
break;
|
||||
case 4:
|
||||
dislittleplay(speedmode4, (u16)(1 << subdivision4));
|
||||
break;
|
||||
}
|
||||
}
|
||||
void shuju()
|
||||
{
|
||||
|
||||
switch (sunmode)
|
||||
{
|
||||
case 1:
|
||||
if (((u16)(speedmode1 * 20 * (1 << subdivision1) / 3)) < 400)
|
||||
{
|
||||
Timer0_12T();
|
||||
T0_Load(65536UL - (MAIN_Fosc / ((u32)speedmode1 * 80 * (1 << subdivision1))));
|
||||
}
|
||||
else
|
||||
{
|
||||
Timer0_1T();
|
||||
T0_Load(65536UL - (MAIN_Fosc / ((u32)speedmode1 * 20 * (1 << subdivision1) / 3)));
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if ((u16)(speedmode2 * 20 * (1 << subdivision2) / 3) < 400)
|
||||
{
|
||||
Timer0_12T();
|
||||
T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode2 * 80 * (1 << subdivision2))));
|
||||
}
|
||||
else
|
||||
{
|
||||
Timer0_1T();
|
||||
T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode2 * 20 * (1 << subdivision2) / 3)));
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if ((u16)(speedmode3 * 20 * (1 << subdivision3) / 3) < 400)
|
||||
{
|
||||
Timer0_12T();
|
||||
T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode3 * 80 * (1 << subdivision3))));
|
||||
}
|
||||
else
|
||||
{
|
||||
Timer0_1T();
|
||||
T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode3 * 20 * (1 << subdivision3) / 3)));
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if ((u16)(speedmode4 * 20 * (1 << subdivision4) / 3) < 400)
|
||||
{
|
||||
Timer0_12T();
|
||||
T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode4 * 80 * (1 << subdivision4))));
|
||||
}
|
||||
else
|
||||
{
|
||||
Timer0_1T();
|
||||
T0_Load(65536UL - (MAIN_Fosc / (u32)(speedmode4 * 20 * (1 << subdivision4) / 3)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
void run()
|
||||
{
|
||||
switch (pog)
|
||||
{
|
||||
case 1:
|
||||
if (timex == 0)
|
||||
pog = 4;
|
||||
EN = 0;
|
||||
break;
|
||||
case 2:
|
||||
EN = 1;
|
||||
break;
|
||||
case 3:
|
||||
EN = 1;
|
||||
break;
|
||||
case 4:
|
||||
EN = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
void getconfig()
|
||||
{
|
||||
EEPROM_read_n(MYaddress, num, 9);
|
||||
if (num[0] != 255)
|
||||
{
|
||||
speedmode1 = num[0];
|
||||
speedmode2 = num[1];
|
||||
speedmode3 = num[2];
|
||||
speedmode4 = num[3];
|
||||
subdivision1 = num[4];
|
||||
subdivision2 = num[5];
|
||||
subdivision3 = num[6];
|
||||
subdivision4 = num[7];
|
||||
sunmode = num[8];
|
||||
}
|
||||
}
|
||||
void setconfig()
|
||||
{
|
||||
EEPROM_SectorErase(MYaddress);
|
||||
num[0] = speedmode1;
|
||||
num[1] = speedmode2;
|
||||
num[2] = speedmode3;
|
||||
num[3] = speedmode4;
|
||||
num[4] = subdivision1;
|
||||
num[5] = subdivision2;
|
||||
num[6] = subdivision3;
|
||||
num[7] = subdivision4;
|
||||
num[8] = sunmode;
|
||||
EEPROM_write_n(MYaddress, num, 9);
|
||||
}
|
56
mycode/delay.c
Normal file
56
mycode/delay.c
Normal file
@ -0,0 +1,56 @@
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* --- STC MCU Limited ------------------------------------------------*/
|
||||
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
/* --- QQ: 800003751 -------------------------------------------------*/
|
||||
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
/*************** 功能说明 ****************
|
||||
|
||||
本文件为STC8系列的延时程序,用户几乎可以不修改这个程序.
|
||||
|
||||
******************************************/
|
||||
|
||||
#include "delay.h"
|
||||
|
||||
//========================================================================
|
||||
// 函数: void delay_ms(unsigned char ms)
|
||||
// 描述: 延时函数。
|
||||
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
|
||||
// 返回: none.
|
||||
// 版本: VER1.0
|
||||
// 日期: 2021-3-9
|
||||
// 备注:
|
||||
//========================================================================
|
||||
void delay_ms(unsigned char ms)
|
||||
{
|
||||
unsigned int i;
|
||||
do{
|
||||
i = MAIN_Fosc / 10000;
|
||||
while(--i);
|
||||
}while(--ms);
|
||||
}
|
||||
void Delay4us() //@11.0592MHz
|
||||
{
|
||||
unsigned char i;
|
||||
|
||||
_nop_();
|
||||
_nop_();
|
||||
i = 12;
|
||||
while (--i)
|
||||
;
|
||||
}
|
||||
void Delay2us() //@11.0592MHz
|
||||
{
|
||||
unsigned char i;
|
||||
|
||||
_nop_();
|
||||
i = 5;
|
||||
while (--i)
|
||||
;
|
||||
}
|
28
mycode/main.c
Normal file
28
mycode/main.c
Normal file
@ -0,0 +1,28 @@
|
||||
#include "config.h"
|
||||
#include "GPIO.h"
|
||||
#include "tm1650.h"
|
||||
#include "timer.h"
|
||||
#include "UART.h"
|
||||
#include "STDIO.H"
|
||||
#include "delay.h"
|
||||
#include "common.h"
|
||||
#include "EEPROM.h"
|
||||
|
||||
void main()
|
||||
{
|
||||
TM1650_init();
|
||||
Timer_config();
|
||||
GPIO_config();
|
||||
UART_config();
|
||||
getconfig();
|
||||
EA = 1;
|
||||
delay_ms(10);
|
||||
while (1)
|
||||
{
|
||||
shuju();
|
||||
keyscan();
|
||||
display();
|
||||
run();
|
||||
printf("%d\r\n", timex);
|
||||
}
|
||||
}
|
269
mycode/timer.c
Normal file
269
mycode/timer.c
Normal file
@ -0,0 +1,269 @@
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* --- STC MCU Limited ------------------------------------------------*/
|
||||
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
/* --- QQ: 800003751 -------------------------------------------------*/
|
||||
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
/************* 功能说明 **************
|
||||
|
||||
本文件为STC8系列的定时器初始化和中断程序,用户可以在这个文件中修改自己需要的中断程序.
|
||||
|
||||
******************************************/
|
||||
|
||||
#include "timer.h"
|
||||
#include "GPIO.h"
|
||||
#include "common.h"
|
||||
u32 timex;
|
||||
static u16 displaytime = 0;
|
||||
u8 displaydata = 0;
|
||||
/********************* Timer0中断函数************************/
|
||||
void timer0_int(void) interrupt TIMER0_VECTOR
|
||||
{
|
||||
if (sunmode == 3)
|
||||
{
|
||||
if (timex <= 4000 << subdivision3)
|
||||
DIR = 0;
|
||||
}
|
||||
if (timex <= 0)
|
||||
timex = 0;
|
||||
else
|
||||
{
|
||||
|
||||
if (pog == 1)
|
||||
{
|
||||
timex--;
|
||||
PUL = ~PUL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/********************* Timer1中断函数************************/
|
||||
void timer1_int(void) interrupt TIMER1_VECTOR
|
||||
{
|
||||
}
|
||||
|
||||
/********************* Timer2中断函数************************/
|
||||
void timer2_int(void) interrupt TIMER2_VECTOR
|
||||
{
|
||||
displaytime++;
|
||||
if (displaytime >= 200)
|
||||
{
|
||||
if (DIR)
|
||||
{
|
||||
if (displaydata >= 7)
|
||||
displaydata = 0;
|
||||
else
|
||||
displaydata++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (displaydata <= 0)
|
||||
displaydata = 7;
|
||||
else
|
||||
displaydata--;
|
||||
}
|
||||
displaytime = 0;
|
||||
}
|
||||
if (keyflag)
|
||||
keytime++;
|
||||
else
|
||||
keytime = 0;
|
||||
}
|
||||
|
||||
/********************* Timer3中断函数************************/
|
||||
void timer3_int(void) interrupt TIMER3_VECTOR
|
||||
{
|
||||
}
|
||||
|
||||
/********************* Timer4中断函数************************/
|
||||
void timer4_int(void) interrupt TIMER4_VECTOR
|
||||
{
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
// 函数: u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)
|
||||
// 描述: 定时器初始化程序.
|
||||
// 参数: TIMx: 结构参数,请参考timer.h里的定义.
|
||||
// 返回: 成功返回0, 空操作返回1,错误返回2.
|
||||
// 版本: V1.0, 2012-10-22
|
||||
//========================================================================
|
||||
u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)
|
||||
{
|
||||
if (TIM > Timer4)
|
||||
return 1; // 空操作
|
||||
|
||||
if (TIM == Timer0)
|
||||
{
|
||||
Timer0_Stop(); // 停止计数
|
||||
if (TIMx->TIM_Interrupt == ENABLE)
|
||||
Timer0_InterruptEnable(); // 允许中断
|
||||
else
|
||||
Timer0_InterruptDisable(); // 禁止中断
|
||||
if (TIMx->TIM_Priority > Priority_3)
|
||||
return 2; // 错误
|
||||
Timer0_Priority(TIMx->TIM_Priority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
|
||||
|
||||
if (TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask)
|
||||
return 2; // 错误
|
||||
TMOD = (TMOD & ~0x03) | TIMx->TIM_Mode; // 工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 不可屏蔽16位自动重装
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_12T)
|
||||
Timer0_12T(); // 12T
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_1T)
|
||||
Timer0_1T(); // 1T
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext)
|
||||
Timer0_AsCounter(); // 对外计数或分频
|
||||
else
|
||||
Timer0_AsTimer(); // 定时
|
||||
if (TIMx->TIM_ClkOut == ENABLE)
|
||||
Timer0_CLKO_Enable(); // 输出时钟
|
||||
else
|
||||
Timer0_CLKO_Disable(); // 不输出时钟
|
||||
|
||||
T0_Load(TIMx->TIM_Value);
|
||||
if (TIMx->TIM_Run == ENABLE)
|
||||
Timer0_Run(); // 开始运行
|
||||
return 0; // 成功
|
||||
}
|
||||
|
||||
if (TIM == Timer1)
|
||||
{
|
||||
Timer1_Stop(); // 停止计数
|
||||
if (TIMx->TIM_Interrupt == ENABLE)
|
||||
Timer1_InterruptEnable(); // 允许中断
|
||||
else
|
||||
Timer1_InterruptDisable(); // 禁止中断
|
||||
if (TIMx->TIM_Priority > Priority_3)
|
||||
return 2; // 错误
|
||||
Timer1_Priority(TIMx->TIM_Priority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
|
||||
if (TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask)
|
||||
return 2; // 错误
|
||||
TMOD = (TMOD & ~0x30) | (TIMx->TIM_Mode << 4); // 工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 停止工作
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_12T)
|
||||
Timer1_12T(); // 12T
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_1T)
|
||||
Timer1_1T(); // 1T
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext)
|
||||
Timer1_AsCounter(); // 对外计数或分频
|
||||
else
|
||||
Timer1_AsTimer(); // 定时
|
||||
if (TIMx->TIM_ClkOut == ENABLE)
|
||||
Timer1_CLKO_Enable(); // 输出时钟
|
||||
else
|
||||
Timer1_CLKO_Disable(); // 不输出时钟
|
||||
|
||||
T1_Load(TIMx->TIM_Value);
|
||||
if (TIMx->TIM_Run == ENABLE)
|
||||
Timer1_Run(); // 开始运行
|
||||
return 0; // 成功
|
||||
}
|
||||
|
||||
if (TIM == Timer2) // Timer2,固定为16位自动重装, 中断无优先级
|
||||
{
|
||||
Timer2_Stop(); // 停止计数
|
||||
if (TIMx->TIM_Interrupt == ENABLE)
|
||||
Timer2_InterruptEnable(); // 允许中断
|
||||
else
|
||||
Timer2_InterruptDisable(); // 禁止中断
|
||||
if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext)
|
||||
return 2;
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_12T)
|
||||
Timer2_12T(); // 12T
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_1T)
|
||||
Timer2_1T(); // 1T
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext)
|
||||
Timer2_AsCounter(); // 对外计数或分频
|
||||
else
|
||||
Timer2_AsTimer(); // 定时
|
||||
if (TIMx->TIM_ClkOut == ENABLE)
|
||||
Timer2_CLKO_Enable(); // 输出时钟
|
||||
else
|
||||
Timer2_CLKO_Disable(); // 不输出时钟
|
||||
|
||||
T2_Load(TIMx->TIM_Value);
|
||||
if (TIMx->TIM_Run == ENABLE)
|
||||
Timer2_Run(); // 开始运行
|
||||
return 0; // 成功
|
||||
}
|
||||
|
||||
if (TIM == Timer3) // Timer3,固定为16位自动重装, 中断无优先级
|
||||
{
|
||||
Timer3_Stop(); // 停止计数
|
||||
if (TIMx->TIM_Interrupt == ENABLE)
|
||||
Timer3_InterruptEnable(); // 允许中断
|
||||
else
|
||||
Timer3_InterruptDisable(); // 禁止中断
|
||||
if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext)
|
||||
return 2;
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_12T)
|
||||
Timer3_12T(); // 12T
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_1T)
|
||||
Timer3_1T(); // 1T
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext)
|
||||
Timer3_AsCounter(); // 对外计数或分频
|
||||
else
|
||||
Timer3_AsTimer(); // 定时
|
||||
if (TIMx->TIM_ClkOut == ENABLE)
|
||||
Timer3_CLKO_Enable(); // 输出时钟
|
||||
else
|
||||
Timer3_CLKO_Disable(); // 不输出时钟
|
||||
|
||||
T3_Load(TIMx->TIM_Value);
|
||||
if (TIMx->TIM_Run == ENABLE)
|
||||
Timer3_Run(); // 开始运行
|
||||
return 0; // 成功
|
||||
}
|
||||
|
||||
if (TIM == Timer4) // Timer3,固定为16位自动重装, 中断无优先级
|
||||
{
|
||||
Timer4_Stop(); // 停止计数
|
||||
if (TIMx->TIM_Interrupt == ENABLE)
|
||||
Timer4_InterruptEnable(); // 允许中断
|
||||
else
|
||||
Timer4_InterruptDisable(); // 禁止中断
|
||||
if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext)
|
||||
return 2;
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_12T)
|
||||
Timer4_12T(); // 12T
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_1T)
|
||||
Timer4_1T(); // 1T
|
||||
if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext)
|
||||
Timer4_AsCounter(); // 对外计数或分频
|
||||
else
|
||||
Timer4_AsTimer(); // 定时
|
||||
if (TIMx->TIM_ClkOut == ENABLE)
|
||||
Timer4_CLKO_Enable(); // 输出时钟
|
||||
else
|
||||
Timer4_CLKO_Disable(); // 不输出时钟
|
||||
|
||||
T4_Load(TIMx->TIM_Value);
|
||||
if (TIMx->TIM_Run == ENABLE)
|
||||
Timer4_Run(); // 开始运行
|
||||
return 0; // 成功
|
||||
}
|
||||
return 2; // 错误
|
||||
}
|
||||
/************************ ?¨?±?÷???? ****************************/
|
||||
void Timer_config(void)
|
||||
{
|
||||
TIM_InitTypeDef TIM_InitStructure; //?á???¨??
|
||||
TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //???¨?¤×÷????, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
|
||||
TIM_InitStructure.TIM_Priority = Priority_0; //???¨??????????(??????) Priority_0,Priority_1,Priority_2,Priority_3
|
||||
TIM_InitStructure.TIM_Interrupt = ENABLE; //??????·????í, ENABLE?òDISABLE
|
||||
TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //???¨?±????, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
|
||||
TIM_InitStructure.TIM_ClkOut = DISABLE; //??·?????????????, ENABLE?òDISABLE
|
||||
TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 100000UL); //????,
|
||||
TIM_InitStructure.TIM_Run = ENABLE; //??·????????ó?????¨?±?÷, ENABLE?òDISABLE
|
||||
Timer_Inilize(Timer0, &TIM_InitStructure); //??????Timer0 Timer0,Timer1,Timer2,Timer3,Timer4
|
||||
|
||||
TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //???¨?±????, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
|
||||
TIM_InitStructure.TIM_ClkOut = DISABLE; //??·?????????????, ENABLE?òDISABLE
|
||||
TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 1000UL); //????,
|
||||
TIM_InitStructure.TIM_Run = ENABLE; //??·????????ó?????¨?±?÷, ENABLE?òDISABLE
|
||||
Timer_Inilize(Timer2, &TIM_InitStructure);
|
||||
}
|
192
mycode/tm1650.c
Normal file
192
mycode/tm1650.c
Normal file
@ -0,0 +1,192 @@
|
||||
#include "tm1650.h"
|
||||
#include "delay.h"
|
||||
#include "timer.h"
|
||||
// 往一个指定的数码管位写入指定的显示数据
|
||||
// 共阴数码管段码表:
|
||||
// const unsigned char TUBE_TABLE_0[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴,0~9的数字
|
||||
const unsigned char TUBE_TABLE_0[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; // 共阴,0~9~A~F
|
||||
const unsigned char TUBE_TABLE_1[16]={0x01,0x21,0x30,0x18,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x0c,0x06,0x03};
|
||||
// 产生IIC总线起始信号
|
||||
static void TM1650_IIC_start(void)
|
||||
{
|
||||
scl = 1; // SCL=1
|
||||
sda = 1; // SDA=1
|
||||
Delay4us();
|
||||
sda = 0; // SDA=0
|
||||
Delay4us();
|
||||
scl = 0; // SCL=0
|
||||
}
|
||||
// 产生IIC总线结束信号
|
||||
static void TM1650_IIC_stop(void)
|
||||
{
|
||||
scl = 0; // SCL=0
|
||||
sda = 0; // SDA=0
|
||||
Delay4us();
|
||||
scl = 1; // SCL=1
|
||||
Delay4us();
|
||||
sda = 1; // SDA=1
|
||||
}
|
||||
// 通过IIC总线发送一个字节
|
||||
static void TM1650_IIC_write_byte(unsigned char dat)
|
||||
{
|
||||
unsigned char i;
|
||||
scl = 0;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
do
|
||||
{
|
||||
if (dat & 0x80)
|
||||
sda = 1; // SDA=1
|
||||
else
|
||||
sda = 0;
|
||||
} while (0);
|
||||
dat <<= 1;
|
||||
Delay2us();
|
||||
scl = 1;
|
||||
Delay2us();
|
||||
scl = 0;
|
||||
Delay2us();
|
||||
}
|
||||
}
|
||||
// 通过IIC总线接收从机响应的ACK信号
|
||||
static unsigned char TM1650_IIC_wait_ack(void)
|
||||
{
|
||||
unsigned char ack_signal = 0;
|
||||
sda = 1; // SDA=1
|
||||
Delay2us();
|
||||
ack_signal = sda;
|
||||
scl = 1;
|
||||
Delay2us();
|
||||
// if(sda == 0)
|
||||
// ack_signal = 1; //如果读取到的是NACK信号
|
||||
scl = 0;
|
||||
Delay2us();
|
||||
return ack_signal;
|
||||
}
|
||||
|
||||
// 作用:设置显示参数
|
||||
// 备注:这个操作不影响显存中的数据
|
||||
// 用例:
|
||||
// 设置亮度并打开显示:TM1650_cfg_display(TM1650_BRIGHTx)
|
||||
// 关闭显示:TM1650_cfg_display(TM1650_DSP_OFF)
|
||||
static void TM1650_cfg_display(unsigned char x)
|
||||
{
|
||||
TM1650_IIC_start();
|
||||
TM1650_IIC_write_byte(0x48);
|
||||
TM1650_IIC_wait_ack(); // 固定命令
|
||||
TM1650_IIC_write_byte(x);
|
||||
TM1650_IIC_wait_ack(); // 参数值
|
||||
TM1650_IIC_stop();
|
||||
}
|
||||
// 在DIG1位上显示数字3: TM1650_print(TM1650_DIG1,TUBE_TABLE_0[3]);
|
||||
void TM1650_print(unsigned char dig, unsigned char seg_data)
|
||||
{
|
||||
|
||||
TM1650_IIC_start();
|
||||
TM1650_IIC_write_byte(dig * 2 + 0x68);
|
||||
TM1650_IIC_wait_ack(); // 显存起始地址为0x68
|
||||
TM1650_IIC_write_byte(seg_data);
|
||||
TM1650_IIC_wait_ack(); // 发送段码
|
||||
TM1650_IIC_stop();
|
||||
}
|
||||
// 将显存数据全部刷为0,清空显示
|
||||
static void TM1650_clear(void)
|
||||
{
|
||||
unsigned char a;
|
||||
for (a = TM1650_DIG1; a <= TM1650_DIG4; a++)
|
||||
{
|
||||
TM1650_print(a, 0); // 将显存数据刷为0
|
||||
}
|
||||
}
|
||||
// TM1650初始化
|
||||
void TM1650_init(void)
|
||||
{
|
||||
sda = 1; // 释放SDA线
|
||||
scl = 1; // 释放SCL线
|
||||
TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||||
TM1650_clear(); // 将显存内容清0
|
||||
}
|
||||
|
||||
void TM1650_printpogrun(u8 set,u8 mode) // 显示run
|
||||
{
|
||||
sda = 1; // 释放SDA线
|
||||
scl = 1; // 释放SCL线
|
||||
TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||||
TM1650_print(TM1650_DIG1, TUBE_TABLE_1[mode]);
|
||||
Delay4us();
|
||||
TM1650_print(TM1650_DIG2, 0x73);
|
||||
Delay4us();
|
||||
TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set]);
|
||||
Delay4us();
|
||||
TM1650_print(TM1650_DIG4, TUBE_TABLE_1[mode+8]);
|
||||
}
|
||||
void TM1650_printpogstop(u8 set) // 显示run
|
||||
{
|
||||
sda = 1; // 释放SDA线
|
||||
scl = 1; // 释放SCL线
|
||||
TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||||
TM1650_print(TM1650_DIG1, 0x40);
|
||||
Delay4us();
|
||||
TM1650_print(TM1650_DIG2, 0x73);
|
||||
Delay4us();
|
||||
TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set]);
|
||||
Delay4us();
|
||||
TM1650_print(TM1650_DIG4, 0x40);
|
||||
}
|
||||
void TM1650_print_SMG1(u8 set) // 显示----页面0显示
|
||||
{
|
||||
sda = 1; // 释放SDA线
|
||||
scl = 1; // 释放SCL线
|
||||
TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||||
TM1650_print(TM1650_DIG1, 0x40);
|
||||
Delay4us();
|
||||
if (set > 99)
|
||||
TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]);
|
||||
else
|
||||
TM1650_print(TM1650_DIG2, 0x00);
|
||||
Delay4us();
|
||||
if (set > 9)
|
||||
TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]);
|
||||
else
|
||||
TM1650_print(TM1650_DIG3, 0x00);
|
||||
Delay4us();
|
||||
TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]);
|
||||
}
|
||||
void TM1650_print_SMG2(u16 set) // 显示----页面0显示
|
||||
{
|
||||
sda = 1; // 释放SDA线
|
||||
scl = 1; // 释放SCL线
|
||||
TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||||
TM1650_print(TM1650_DIG1, 0x48);
|
||||
Delay4us();
|
||||
if (set > 99)
|
||||
TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]);
|
||||
else
|
||||
TM1650_print(TM1650_DIG2, 0x00);
|
||||
Delay4us();
|
||||
if (set > 9)
|
||||
TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]);
|
||||
else
|
||||
TM1650_print(TM1650_DIG3, 0x00);
|
||||
Delay4us();
|
||||
TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]);
|
||||
}
|
||||
void TM1650_print_SMG3(u8 set) // 显示----页面0显示
|
||||
{
|
||||
sda = 1; // 释放SDA线
|
||||
scl = 1; // 释放SCL线
|
||||
TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||||
TM1650_print(TM1650_DIG1, 0x49);
|
||||
Delay4us();
|
||||
if (set > 99)
|
||||
TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]);
|
||||
else
|
||||
TM1650_print(TM1650_DIG2, 0x00);
|
||||
Delay4us();
|
||||
if (set > 9)
|
||||
TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]);
|
||||
else
|
||||
TM1650_print(TM1650_DIG3, 0x00);
|
||||
Delay4us();
|
||||
TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]);
|
||||
}
|
55
myinc/EEPROM.h
Normal file
55
myinc/EEPROM.h
Normal file
@ -0,0 +1,55 @@
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* --- STC MCU Limited ------------------------------------------------*/
|
||||
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
/* --- QQ: 800003751 -------------------------------------------------*/
|
||||
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __EEPROM_H
|
||||
#define __EEPROM_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#define STC8X1K08 8
|
||||
#define STC8X1K16 16
|
||||
#define STC8XxK32 32
|
||||
#define STC8XxK60 60
|
||||
|
||||
// 选择MCU型号
|
||||
#define MCU_Type STC8X1K08 //STC8X1K08, STC8X1K16, STC8XxK32, STC8XxK32, STC8XxK60
|
||||
|
||||
/************************** ISP/IAP *****************************
|
||||
|
||||
型号 大小 扇区数 开始地址 结束地址 MOVC读偏移地址
|
||||
STC8X1K08 4K 8扇区 0x0000 ~ 0x0FFF 0x2000
|
||||
STC8X1K16 12K 24扇区 0x0000 ~ 0x2FFF 0x4000
|
||||
STC8XxK32 32K 64扇区 0x0000 ~ 0x7FFF 0x8000
|
||||
STC8XxK60 4K 8扇区 0x0000 ~ 0x0FFF 0xF000
|
||||
|
||||
*/
|
||||
|
||||
#if (MCU_Type == STC8X1K08)
|
||||
#define MOVC_ShiftAddress 0x2000
|
||||
#elif (MCU_Type == STC8X1K16)
|
||||
#define MOVC_ShiftAddress 0x4000
|
||||
#elif (MCU_Type == STC8XxK32)
|
||||
#define MOVC_ShiftAddress 0x8000
|
||||
#elif (MCU_Type == STC8XxK60)
|
||||
#define MOVC_ShiftAddress 0xF000
|
||||
#else
|
||||
#define MOVC_ShiftAddress 0xC000 //用户自定义
|
||||
#endif
|
||||
|
||||
|
||||
void DisableEEPROM(void);
|
||||
void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number);
|
||||
void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number);
|
||||
void EEPROM_SectorErase(u16 EE_address);
|
||||
|
||||
|
||||
#endif
|
63
myinc/GPIO.h
Normal file
63
myinc/GPIO.h
Normal file
@ -0,0 +1,63 @@
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* --- STC MCU Limited ------------------------------------------------*/
|
||||
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
/* --- QQ: 800003751 -------------------------------------------------*/
|
||||
/* <20><><EFBFBD>Ҫ<EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˴<C3B4><CBB4><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>STC<54><43><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD> */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __GPIO_H
|
||||
#define __GPIO_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#define GPIO_PullUp 0 //<2F><><EFBFBD><EFBFBD>˫<D7BC><CBAB><EFBFBD>
|
||||
#define GPIO_HighZ 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define GPIO_OUT_OD 2 //<2F><>©<EFBFBD><C2A9><EFBFBD>
|
||||
#define GPIO_OUT_PP 3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#define GPIO_Pin_0 0x01 //IO<49><4F><EFBFBD><EFBFBD> Px.0
|
||||
#define GPIO_Pin_1 0x02 //IO<49><4F><EFBFBD><EFBFBD> Px.1
|
||||
#define GPIO_Pin_2 0x04 //IO<49><4F><EFBFBD><EFBFBD> Px.2
|
||||
#define GPIO_Pin_3 0x08 //IO<49><4F><EFBFBD><EFBFBD> Px.3
|
||||
#define GPIO_Pin_4 0x10 //IO<49><4F><EFBFBD><EFBFBD> Px.4
|
||||
#define GPIO_Pin_5 0x20 //IO<49><4F><EFBFBD><EFBFBD> Px.5
|
||||
#define GPIO_Pin_6 0x40 //IO<49><4F><EFBFBD><EFBFBD> Px.6
|
||||
#define GPIO_Pin_7 0x80 //IO<49><4F><EFBFBD><EFBFBD> Px.7
|
||||
#define GPIO_Pin_All 0xFF //IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#define GPIO_P0 0 //
|
||||
#define GPIO_P1 1
|
||||
#define GPIO_P2 2
|
||||
#define GPIO_P3 3
|
||||
#define GPIO_P4 4
|
||||
#define GPIO_P5 5
|
||||
#define GPIO_P6 6
|
||||
#define GPIO_P7 7
|
||||
|
||||
#define k5 P10
|
||||
#define k6 P37
|
||||
#define k7 P36
|
||||
#define k8 P35
|
||||
#define k1 P15
|
||||
#define k2 P16
|
||||
#define k3 P17
|
||||
#define k4 P54
|
||||
#define DIR P12
|
||||
#define PUL P13
|
||||
#define EN P14
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 Mode; //IOģʽ, GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
|
||||
u8 Pin; //Ҫ<><D2AA><EFBFBD>õĶ˿<C4B6>
|
||||
} GPIO_InitTypeDef;
|
||||
|
||||
u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx);
|
||||
void GPIO_config(void);
|
||||
#endif
|
141
myinc/PWM.h
Normal file
141
myinc/PWM.h
Normal file
@ -0,0 +1,141 @@
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* --- STC MCU Limited ------------------------------------------------*/
|
||||
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
/* --- QQ: 800003751 -------------------------------------------------*/
|
||||
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __PWM_H
|
||||
#define __PWM_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#define ENO1P 0x01
|
||||
#define ENO1N 0x02
|
||||
#define ENO2P 0x04
|
||||
#define ENO2N 0x08
|
||||
#define ENO3P 0x10
|
||||
#define ENO3N 0x20
|
||||
#define ENO4P 0x40
|
||||
#define ENO4N 0x80
|
||||
|
||||
#define ENO5P 0x01
|
||||
#define ENO6P 0x04
|
||||
#define ENO7P 0x10
|
||||
#define ENO8P 0x40
|
||||
|
||||
#define PWMA 1
|
||||
#define PWMB 2
|
||||
|
||||
#define PWM1_SW_P10_P11 0
|
||||
#define PWM1_SW_P20_P21 1
|
||||
#define PWM1_SW_P60_P61 2
|
||||
|
||||
#define PWM2_SW_P12_P13 0
|
||||
#define PWM2_SW_P22_P23 (1<<2)
|
||||
#define PWM2_SW_P62_P63 (2<<2)
|
||||
|
||||
#define PWM3_SW_P14_P15 0
|
||||
#define PWM3_SW_P24_P25 (1<<4)
|
||||
#define PWM3_SW_P64_P65 (2<<4)
|
||||
|
||||
#define PWM4_SW_P16_P17 0
|
||||
#define PWM4_SW_P26_P27 (1<<6)
|
||||
#define PWM4_SW_P66_P67 (2<<6)
|
||||
#define PWM4_SW_P34_P33 (3<<6)
|
||||
|
||||
#define PWM5_SW_P20 0
|
||||
#define PWM5_SW_P17 1
|
||||
#define PWM5_SW_P00 2
|
||||
#define PWM5_SW_P74 3
|
||||
|
||||
#define PWM6_SW_P21 0
|
||||
#define PWM6_SW_P54 (1<<2)
|
||||
#define PWM6_SW_P01 (2<<2)
|
||||
#define PWM6_SW_P75 (3<<2)
|
||||
|
||||
#define PWM7_SW_P22 0
|
||||
#define PWM7_SW_P33 (1<<4)
|
||||
#define PWM7_SW_P02 (2<<4)
|
||||
#define PWM7_SW_P76 (3<<4)
|
||||
|
||||
#define PWM8_SW_P23 0
|
||||
#define PWM8_SW_P34 (1<<6)
|
||||
#define PWM8_SW_P03 (2<<6)
|
||||
#define PWM8_SW_P77 (3<<6)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 PWM1_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
|
||||
u8 PWM2_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
|
||||
u8 PWM3_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
|
||||
u8 PWM4_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
|
||||
u8 PWM5_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
|
||||
u8 PWM6_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
|
||||
u8 PWM7_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
|
||||
u8 PWM8_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
|
||||
|
||||
u16 PWM_Period; //周期时间, 0~65535
|
||||
u16 PWM1_Duty; //PWM1占空比时间, 0~Period
|
||||
u16 PWM2_Duty; //PWM2占空比时间, 0~Period
|
||||
u16 PWM3_Duty; //PWM3占空比时间, 0~Period
|
||||
u16 PWM4_Duty; //PWM4占空比时间, 0~Period
|
||||
u16 PWM5_Duty; //PWM5占空比时间, 0~Period
|
||||
u16 PWM6_Duty; //PWM6占空比时间, 0~Period
|
||||
u16 PWM7_Duty; //PWM7占空比时间, 0~Period
|
||||
u16 PWM8_Duty; //PWM8占空比时间, 0~Period
|
||||
u8 PWM_DeadTime; //死区发生器设置, 0~255
|
||||
|
||||
u8 PWM_CC1Enable; //开启输入捕获/比较输出, ENABLE,DISABLE
|
||||
u8 PWM_CC1NEnable; //开启输入捕获/比较输出, ENABLE,DISABLE
|
||||
u8 PWM_CC2Enable; //开启输入捕获/比较输出, ENABLE,DISABLE
|
||||
u8 PWM_CC2NEnable; //开启输入捕获/比较输出, ENABLE,DISABLE
|
||||
u8 PWM_CC3Enable; //开启输入捕获/比较输出, ENABLE,DISABLE
|
||||
u8 PWM_CC3NEnable; //开启输入捕获/比较输出, ENABLE,DISABLE
|
||||
u8 PWM_CC4Enable; //开启输入捕获/比较输出, ENABLE,DISABLE
|
||||
u8 PWM_CC4NEnable; //开启输入捕获/比较输出, ENABLE,DISABLE
|
||||
u8 PWM_CC5Enable; //开启输入捕获/比较输出, ENABLE,DISABLE
|
||||
u8 PWM_CC6Enable; //开启输入捕获/比较输出, ENABLE,DISABLE
|
||||
u8 PWM_CC7Enable; //开启输入捕获/比较输出, ENABLE,DISABLE
|
||||
u8 PWM_CC8Enable; //开启输入捕获/比较输出, ENABLE,DISABLE
|
||||
|
||||
u8 PWM_Reload; //输出比较的预装载使能, ENABLE,DISABLE
|
||||
u8 PWM_Fast; //输出比较快速功能使能, ENABLE,DISABLE
|
||||
|
||||
u8 PWM1_SetPriority; //设置PWM1优先级, Priority_0,Priority_1,Priority_2,Priority_3
|
||||
u8 PWM2_SetPriority; //设置PWM2优先级, Priority_0,Priority_1,Priority_2,Priority_3
|
||||
u8 PWM3_SetPriority; //设置PWM3优先级, Priority_0,Priority_1,Priority_2,Priority_3
|
||||
u8 PWM4_SetPriority; //设置PWM4优先级, Priority_0,Priority_1,Priority_2,Priority_3
|
||||
u8 PWM5_SetPriority; //设置PWM4优先级, Priority_0,Priority_1,Priority_2,Priority_3
|
||||
|
||||
u8 PWM_EnoSelect; //输出通道选择, ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8P
|
||||
u8 PWM_PreLoad; //预装载, ENABLE,DISABLE
|
||||
u8 PWM_PS_SW; //切换端口, PWM1_SW_P10_P11,PWM1_SW_P20_P21,PWM1_SW_P60_P61
|
||||
u8 PWM_CEN_Enable; //使能计数器, ENABLE,DISABLE
|
||||
|
||||
u8 PWM_BrakeEnable; //刹车输入使能, ENABLE,DISABLE
|
||||
u8 PWM_MainOutEnable;//主输出使能, ENABLE,DISABLE
|
||||
} PWMx_InitDefine;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u16 PWM1_Duty; //PWM1占空比时间, 0~Period
|
||||
u16 PWM2_Duty; //PWM2占空比时间, 0~Period
|
||||
u16 PWM3_Duty; //PWM3占空比时间, 0~Period
|
||||
u16 PWM4_Duty; //PWM4占空比时间, 0~Period
|
||||
u16 PWM5_Duty; //PWM5占空比时间, 0~Period
|
||||
u16 PWM6_Duty; //PWM6占空比时间, 0~Period
|
||||
u16 PWM7_Duty; //PWM7占空比时间, 0~Period
|
||||
u16 PWM8_Duty; //PWM8占空比时间, 0~Period
|
||||
} PWMx_Duty;
|
||||
|
||||
u8 PWM_Configuration(u8 PWM, PWMx_InitDefine *PWMx);
|
||||
void UpdatePwm(u8 PWM, PWMx_Duty *PWMx);
|
||||
void PWM_config(void);
|
||||
#endif
|
||||
|
2747
myinc/STC8xxxx.H
Normal file
2747
myinc/STC8xxxx.H
Normal file
File diff suppressed because it is too large
Load Diff
135
myinc/UART.h
Normal file
135
myinc/UART.h
Normal file
@ -0,0 +1,135 @@
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* --- STC MCU Limited ------------------------------------------------*/
|
||||
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
/* --- QQ: 800003751 -------------------------------------------------*/
|
||||
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __UART_H
|
||||
#define __UART_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#define UART1 1
|
||||
//#define UART2 2
|
||||
//#define UART3 3
|
||||
//#define UART4 4
|
||||
|
||||
#ifdef UART1
|
||||
#define COM_TX1_Lenth 32
|
||||
#define COM_RX1_Lenth 32
|
||||
#endif
|
||||
#ifdef UART2
|
||||
#define COM_TX2_Lenth 128
|
||||
#define COM_RX2_Lenth 128
|
||||
#endif
|
||||
#ifdef UART3
|
||||
#define COM_TX3_Lenth 128
|
||||
#define COM_RX3_Lenth 128
|
||||
#endif
|
||||
#ifdef UART4
|
||||
#define COM_TX4_Lenth 128
|
||||
#define COM_RX4_Lenth 128
|
||||
#endif
|
||||
|
||||
#define UART_ShiftRight 0 //同步移位输出
|
||||
#define UART_8bit_BRTx (1<<6) //8位数据,可变波特率
|
||||
#define UART_9bit (2<<6) //9位数据,固定波特率
|
||||
#define UART_9bit_BRTx (3<<6) //9位数据,可变波特率
|
||||
|
||||
#define UART1_SW_P30_P31 0
|
||||
#define UART1_SW_P36_P37 (1<<6)
|
||||
#define UART1_SW_P16_P17 (2<<6)
|
||||
#define UART1_SW_P43_P44 (3<<6)
|
||||
#define UART2_SW_P10_P11 0
|
||||
#define UART2_SW_P46_P47 1
|
||||
#define UART3_SW_P00_P01 0
|
||||
#define UART3_SW_P50_P51 2
|
||||
#define UART4_SW_P02_P03 0
|
||||
#define UART4_SW_P52_P53 4
|
||||
|
||||
|
||||
#define TimeOutSet1 5
|
||||
#define TimeOutSet2 5
|
||||
#define TimeOutSet3 5
|
||||
#define TimeOutSet4 5
|
||||
|
||||
#define BRT_Timer1 1
|
||||
#define BRT_Timer2 2
|
||||
#define BRT_Timer3 3
|
||||
#define BRT_Timer4 4
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 id; //串口号
|
||||
|
||||
u8 TX_read; //发送读指针
|
||||
u8 TX_write; //发送写指针
|
||||
u8 B_TX_busy; //忙标志
|
||||
|
||||
u8 RX_Cnt; //接收字节计数
|
||||
u8 RX_TimeOut; //接收超时
|
||||
u8 B_RX_OK; //接收块完成
|
||||
} COMx_Define;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 UART_Mode; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
|
||||
u8 UART_BRT_Use; //使用波特率, BRT_Timer1,BRT_Timer2
|
||||
u32 UART_BaudRate; //波特率, ENABLE,DISABLE
|
||||
u8 Morecommunicate; //多机通讯允许, ENABLE,DISABLE
|
||||
u8 UART_RxEnable; //允许接收, ENABLE,DISABLE
|
||||
u8 BaudRateDouble; //波特率加倍, ENABLE,DISABLE
|
||||
u8 UART_Interrupt; //中断控制, ENABLE,DISABLE
|
||||
u8 UART_Priority; //优先级, Priority_0,Priority_1,Priority_2,Priority_3
|
||||
u8 UART_P_SW; //切换端口, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44
|
||||
} COMx_InitDefine;
|
||||
|
||||
#ifdef UART1
|
||||
extern COMx_Define COM1;
|
||||
extern u8 xdata TX1_Buffer[COM_TX1_Lenth]; //发送缓冲
|
||||
extern u8 xdata RX1_Buffer[COM_RX1_Lenth]; //接收缓冲
|
||||
#endif
|
||||
#ifdef UART2
|
||||
extern COMx_Define COM2;
|
||||
extern u8 xdata TX2_Buffer[COM_TX2_Lenth]; //发送缓冲
|
||||
extern u8 xdata RX2_Buffer[COM_RX2_Lenth]; //接收缓冲
|
||||
#endif
|
||||
#ifdef UART3
|
||||
extern COMx_Define COM3;
|
||||
extern u8 xdata TX3_Buffer[COM_TX3_Lenth]; //发送缓冲
|
||||
extern u8 xdata RX3_Buffer[COM_RX3_Lenth]; //接收缓冲
|
||||
#endif
|
||||
#ifdef UART4
|
||||
extern COMx_Define COM4;
|
||||
extern u8 xdata TX4_Buffer[COM_TX4_Lenth]; //发送缓冲
|
||||
extern u8 xdata RX4_Buffer[COM_RX4_Lenth]; //接收缓冲
|
||||
#endif
|
||||
|
||||
u8 UART_Configuration(u8 UARTx, COMx_InitDefine *COMx);
|
||||
#ifdef UART1
|
||||
void TX1_write2buff(u8 dat); //写入发送缓冲,指针+1
|
||||
void PrintString1(u8 *puts);
|
||||
#endif
|
||||
#ifdef UART2
|
||||
void TX2_write2buff(u8 dat); //写入发送缓冲,指针+1
|
||||
void PrintString2(u8 *puts);
|
||||
#endif
|
||||
#ifdef UART3
|
||||
void TX3_write2buff(u8 dat); //写入发送缓冲,指针+1
|
||||
void PrintString3(u8 *puts);
|
||||
#endif
|
||||
#ifdef UART4
|
||||
void TX4_write2buff(u8 dat); //写入发送缓冲,指针+1
|
||||
void PrintString4(u8 *puts);
|
||||
#endif
|
||||
|
||||
|
||||
void UART_config(void);
|
||||
#endif
|
||||
|
21
myinc/common.h
Normal file
21
myinc/common.h
Normal file
@ -0,0 +1,21 @@
|
||||
#ifndef __common_H
|
||||
#define __common_H
|
||||
#include "config.h"
|
||||
#define speedmax 100
|
||||
#define speedmin 10
|
||||
#define subdivisionmax 8
|
||||
#define subdivisionmin 0
|
||||
#define MYaddress 0004
|
||||
#define speedstart 60
|
||||
#define substart 4
|
||||
extern u8 speedmode1, speedmode2, speedmode3, speedmode4, subdivision1, subdivision2, subdivision3, subdivision4;
|
||||
extern u16 keytime;
|
||||
extern u8 keyflag;
|
||||
extern u8 sunmode, pog;
|
||||
void getconfig();
|
||||
void keyscan();
|
||||
void display();
|
||||
void shuju();
|
||||
void setconfig();
|
||||
void run();
|
||||
#endif
|
34
myinc/config.h
Normal file
34
myinc/config.h
Normal file
@ -0,0 +1,34 @@
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* --- STC MCU Limited ------------------------------------------------*/
|
||||
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
/* --- QQ: 800003751 -------------------------------------------------*/
|
||||
/* <20><><EFBFBD>Ҫ<EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˴<C3B4><CBB4><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>STC<54><43><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD> */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __CONFIG_H
|
||||
#define __CONFIG_H
|
||||
|
||||
/*********************************************************/
|
||||
|
||||
//#define MAIN_Fosc 22118400L //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
//#define MAIN_Fosc 12000000L //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
// #define MAIN_Fosc 11059200L //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
//#define MAIN_Fosc 5529600L //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
#define MAIN_Fosc 24000000L //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
|
||||
|
||||
// #define STC8Hxx //STC8Hϵ<48><CFB5>
|
||||
|
||||
#define STC8Gxx //STC8Gϵ<47><CFB5>
|
||||
|
||||
/*********************************************************/
|
||||
|
||||
#include "STC8xxxx.H"
|
||||
|
||||
|
||||
#endif
|
21
myinc/delay.h
Normal file
21
myinc/delay.h
Normal file
@ -0,0 +1,21 @@
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* --- STC MCU Limited ------------------------------------------------*/
|
||||
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
/* --- QQ: 800003751 -------------------------------------------------*/
|
||||
/* <20><><EFBFBD>Ҫ<EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˴<C3B4><CBB4><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>STC<54><43><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD> */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __DELAY_H
|
||||
#define __DELAY_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
void delay_ms(unsigned char ms);
|
||||
void Delay4us();
|
||||
void Delay2us();
|
||||
#endif
|
47
myinc/timer.h
Normal file
47
myinc/timer.h
Normal file
@ -0,0 +1,47 @@
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* --- STC MCU Limited ------------------------------------------------*/
|
||||
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||||
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||||
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||||
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||||
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
||||
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||||
/* --- QQ: 800003751 -------------------------------------------------*/
|
||||
/* <20><><EFBFBD>Ҫ<EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˴<C3B4><CBB4><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>STC<54><43><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD> */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __TIMER_H
|
||||
#define __TIMER_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#define Timer0 0
|
||||
#define Timer1 1
|
||||
#define Timer2 2
|
||||
#define Timer3 3
|
||||
#define Timer4 4
|
||||
|
||||
#define TIM_16BitAutoReload 0
|
||||
#define TIM_16Bit 1
|
||||
#define TIM_8BitAutoReload 2
|
||||
#define TIM_16BitAutoReloadNoMask 3
|
||||
|
||||
#define TIM_CLOCK_1T 0
|
||||
#define TIM_CLOCK_12T 1
|
||||
#define TIM_CLOCK_Ext 2
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 TIM_Mode; // <20><><EFBFBD><EFBFBD>ģʽ, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
|
||||
u8 TIM_Priority; // <20><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD> Priority_0,Priority_1,Priority_2,Priority_3
|
||||
u8 TIM_Interrupt; // <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD> ENABLE,DISABLE
|
||||
u8 TIM_ClkSource; // ʱ<><CAB1>Դ TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
|
||||
u8 TIM_ClkOut; // <20>ɱ<EFBFBD><C9B1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>, ENABLE,DISABLE
|
||||
u16 TIM_Value; // װ<>س<EFBFBD>ֵ
|
||||
u8 TIM_Run; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> ENABLE,DISABLE
|
||||
} TIM_InitTypeDef;
|
||||
extern u8 displaydata;
|
||||
extern u32 timex;
|
||||
u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx);
|
||||
void Timer_config();
|
||||
#endif
|
30
myinc/tm1650.h
Normal file
30
myinc/tm1650.h
Normal file
@ -0,0 +1,30 @@
|
||||
#ifndef TM1650_H_
|
||||
#define TM1650_H_
|
||||
#include "config.h"
|
||||
// 显示参数
|
||||
#define TM1650_BRIGHT1 0x11 /*一级亮度,打开LED显示*/
|
||||
#define TM1650_BRIGHT2 0x21 /*二级亮度,打开LED显示*/
|
||||
#define TM1650_BRIGHT3 0x31 /*三级亮度,打开LED显示*/
|
||||
#define TM1650_BRIGHT4 0x41 /*四级亮度,打开LED显示*/
|
||||
#define TM1650_BRIGHT5 0x51 /*五级亮度,打开LED显示*/
|
||||
#define TM1650_BRIGHT6 0x61 /*六级亮度,打开LED显示*/
|
||||
#define TM1650_BRIGHT7 0x71 /*七级亮度,打开LED显示*/
|
||||
#define TM1650_BRIGHT8 0x01 /*八级亮度,打开LED显示*/
|
||||
#define TM1650_DSP_OFF 0x00 /*关闭LED显示*/
|
||||
|
||||
// 数码管位选
|
||||
#define TM1650_DIG1 0
|
||||
#define TM1650_DIG2 1
|
||||
#define TM1650_DIG3 2
|
||||
#define TM1650_DIG4 3
|
||||
|
||||
#define sda P33
|
||||
#define scl P32
|
||||
void TM1650_init(void); // 初始化
|
||||
void TM1650_print(unsigned char dig, unsigned char seg_data);
|
||||
void TM1650_printpogrun(u8 set,u8 mode);// 显示----页面0显示
|
||||
void TM1650_printpogstop(u8 set);// 显示----页面0显示
|
||||
void TM1650_print_SMG1(u8 set);
|
||||
void TM1650_print_SMG2(u16 set);
|
||||
void TM1650_print_SMG3(u8 set) ;
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user