feat: 添加HX711称重传感器支持并清理旧文档

- 新增HX711称重传感器驱动(bsp_hx711.c/h)
- 添加HX711相关文档和README
- 更新MP3驱动和FreeRTOS配置
- 修改CMakeLists.txt构建配置
- 删除旧的DX-WF24 WiFi模块开发文档和示例代码
- 整理Development_Docs目录结构
This commit is contained in:
2026-02-25 14:06:47 +08:00
parent 97d6d10731
commit d184d96052
1369 changed files with 383 additions and 406067 deletions

View File

@@ -47,6 +47,7 @@ add_executable(${CMAKE_PROJECT_NAME}
Core/Bsp/BSP_Device/bsp_aht30/bsp_aht30.c
Core/Bsp/BSP_Device/bsp_rtc/bsp_rtc.c
Core/Bsp/bsp_motor/stepper_motor.c
Core/Bsp/BSP_Device/bsp_hx711/bsp_hx711.c
)
# Add STM32CubeMX generated sources
add_subdirectory(cmake/stm32cubemx)
@@ -76,6 +77,7 @@ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
Core/Bsp/BSP_Device/bsp_aht30
Core/Bsp/BSP_Device/bsp_rtc
Core/Bsp/bsp_motor
Core/Bsp/BSP_Device/bsp_hx711
)
# Add project symbols (macros)

View File

@@ -0,0 +1,46 @@
# HX711 称重传感器驱动
## 目录结构
- `bsp_hx711.h` - 驱动头文件
- `bsp_hx711.c` - 驱动源文件
- `README.md` - 说明文档
## 功能特性
- 支持HX711称重传感器的基本操作
- 提供单次读取和多次平均读取功能
- 支持校准功能
- 支持重量计算
## 硬件连接
- HX711_SCK -> PA3
- HX711_DOUT -> PA2
## 使用说明
### 1. 初始化
```c
HX711_Init();
```
### 2. 校准
```c
float calibration_factor = 0.0f;
HX711_Calibration(&calibration_factor);
```
### 3. 读取重量
```c
float weight = HX711_GetWeight(calibration_factor, 10);
elog_info("HX711","重量: %.2fg\r\n", weight);
```
### 4. 直接读取原始数据
```c
uint32_t raw_data = HX711_ReadData(HX711_GAIN_128);
```
## 注意事项
- GPIO初始化已在gpio.c中完成无需重复初始化
- 校准过程需要放置已知重量的物体
- 建议使用多次采样平均以提高精度
- 增益设置建议使用HX711_GAIN_128以获得最高精度

View File

@@ -0,0 +1,96 @@
#include "bsp_hx711.h"
// 全局变量(零点偏移值、标定系数)
int32_t hx711_zero_offset = 0; // 零点偏移空载时的AD值
float hx711_scale = 0.002762; // 标定系数(重量/AD差值
// #################### 基础函数 ####################
void delay_us(uint32_t us) {
uint32_t delay = (HAL_RCC_GetHCLKFreq() / 4000000 * us);
while (delay--) {
;
}
}
// 初始化HX711引脚SCK输出DOUT输入
void HX711_Init(void) {
}
// 读取单次AD原始数据gain增益选择
int32_t HX711_ReadData(uint8_t gain) {
int32_t data = 0;
uint8_t i = 0;
// 等待数据就绪DOUT变低
while (HAL_GPIO_ReadPin(HX711_DOUT_GPIO_Port, HX711_DOUT_Pin) == GPIO_PIN_SET);
// 读取24位数据先MSB后LSB
for (i = 0; i < 24; i++) {
// 发送时钟脉冲SCK高电平
HAL_GPIO_WritePin(HX711_SCK_GPIO_Port, HX711_SCK_Pin, GPIO_PIN_SET);
delay_us(1); // 延时1us保证时序稳定关键
// 移位读取数据DOUT为当前位
data |= (HAL_GPIO_ReadPin(HX711_DOUT_GPIO_Port, HX711_DOUT_Pin) << (23 - i));
// 时钟脉冲拉低
HAL_GPIO_WritePin(HX711_SCK_GPIO_Port, HX711_SCK_Pin, GPIO_PIN_RESET);
delay_us(1);
}
// 发送增益选择脉冲1~3个
for (i = 0; i < gain; i++) {
HAL_GPIO_WritePin(HX711_SCK_GPIO_Port, HX711_SCK_Pin, GPIO_PIN_SET);
delay_us(1);
HAL_GPIO_WritePin(HX711_SCK_GPIO_Port, HX711_SCK_Pin, GPIO_PIN_RESET);
delay_us(1);
}
// 处理24位有符号数据HX711输出为二进制补码
if (data & 0x800000) { // 最高位为1表示负数转换为十进制
data |= ~0xFFFFFF; // 扩展符号位到32位int32_t
}
return data;
}
// #################### 校准与重量计算 ####################
// 校准零点(空载时调用,消除传感器自重误差)
void HX711_CalibrateZero(void) {
uint8_t i = 0;
int32_t temp = 0;
hx711_zero_offset = 0;
// 采样10次取平均值提高零点精度
for (i = 0; i < 10; i++) {
temp += HX711_ReadData(HX711_GAIN_128);
HAL_Delay(10); // 采样间隔
}
hx711_zero_offset = temp / 10; // 零点偏移值 = 空载平均AD值
}
// 标定量程放已知重量的物体后调用计算AD值与重量的比例
void HX711_CalibrateScale(float weight) {
uint8_t i = 0;
int32_t temp = 0;
int32_t ad_diff = 0;
// 采样10次取平均AD值
for (i = 0; i < 10; i++) {
temp += HX711_ReadData(HX711_GAIN_128);
HAL_Delay(10);
}
temp = temp / 10;
// 计算AD差值加载后AD值 - 零点AD值
ad_diff = temp - hx711_zero_offset;
if (ad_diff <= 0) {
hx711_scale = 1.0f; // 异常情况,避免除零
return;
}
// 标定系数 = 已知重量 / AD差值后续通过AD差值计算重量
hx711_scale = weight / (float)ad_diff;
}
// 获取重量sample_num采样次数次数越多精度越高推荐10~20次
float HX711_GetWeight(uint8_t sample_num) {
uint8_t i = 0;
int32_t temp = 0;
float weight = 0.0f;
if (sample_num == 0) sample_num = 1; // 避免采样次数为0
// 多次采样取平均
for (i = 0; i < sample_num; i++) {
temp += HX711_ReadData(HX711_GAIN_128);
HAL_Delay(5);
}
temp = temp / sample_num; // 平均AD值
// 计算重量 = (当前AD值 - 零点偏移) * 标定系数
weight = (temp - hx711_zero_offset) * hx711_scale;
return weight;
}

View File

@@ -0,0 +1,26 @@
#ifndef __HX711_H
#define __HX711_H
#include "stm32f1xx_hal.h"
#include "stdio.h"
// #################### 引脚定义(根据你的硬件修改!)####################
#define HX711_SCK_GPIO_Port GPIOA
#define HX711_SCK_Pin GPIO_PIN_3
#define HX711_DOUT_GPIO_Port GPIOA
#define HX711_DOUT_Pin GPIO_PIN_2
// 全局变量(零点偏移值、标定系数)
extern int32_t hx711_zero_offset; // 零点偏移空载时的AD值
extern float hx711_scale; // 标定系数(重量/AD差值
// 增益选择默认用通道A+128倍增益
#define HX711_GAIN_128 1 // 通道A128倍增益推荐
#define HX711_GAIN_64 2 // 通道A64倍增益
#define HX711_GAIN_32 3 // 通道B32倍增益
// 函数声明
void HX711_Init(void); // 初始化(引脚配置)
int32_t HX711_ReadData(uint8_t gain); // 读取原始AD数据
void HX711_CalibrateZero(void); // 校准零点(空载时调用)
void HX711_CalibrateScale(float weight); // 标定量程(放已知重量时调用)
float HX711_GetWeight(uint8_t sample_num); // 获取平均重量sample_num采样次数
#endif

View File

@@ -59,8 +59,7 @@ HAL_StatusTypeDef MP3_Init(void)
HAL_StatusTypeDef ret1 = MP3_SendCommand(init_cmd1, sizeof(init_cmd1));
elog_d("MP3", "开启声音命令返回值: %d", ret1);
// 设置为低音量-测试用
MP3_SetVolume(2);
// 延时等待模块响应
HAL_Delay(100);

View File

@@ -19,24 +19,26 @@
/* Includes ------------------------------------------------------------------*/
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"
#include "cmsis_os2.h"
#include "main.h"
#include "task.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "bsp_aht30.h"
#include "bsp_hx711.h"
#include "bsp_rtc.h"
#include "device_ctrl.h"
#include "dx_wf_24.h"
#include "elog.h"
#include "i2c.h"
#include "mp3_driver.h"
#include "mp3_play_index.h"
#include "multi_button.h"
#include "spi_st7735s.h"
#include "stdio.h"
#include "bsp_aht30.h"
#include "bsp_rtc.h"
#include "i2c.h"
#include "stepper_motor.h" // 添加步进电机驱动头文件
#include "stepper_motor.h" // 添加步进电机驱动头文件
/* USER CODE END Includes */
@@ -53,9 +55,10 @@
#define KEY2_MANUAL_FEED // 按键2手动喂食仅手动模式有效
#define KEY3_DISPLAY_NEXT // 按键3切换显示界面
#define KEY4_TIME_SET // 按键4长按设置时间
/***********************人体存在和水位检测作为两个单独的按键GPIO输入******************* */
#define KEY_WATER_LEVEL // 水位检测
#define KEY_BODY_EXIST // 人体存在
/***********************人体存在和水位检测作为两个单独的按键GPIO输入*******************
*/
#define KEY_WATER_LEVEL // 水位检测
#define KEY_BODY_EXIST // 人体存在
/* USER CODE END PD */
@@ -87,67 +90,68 @@ typedef struct {
// 喂食控制命令枚举
typedef enum {
FEED_CMD_NONE = 0, // 无命令
FEED_CMD_MANUAL, // 手动喂食
FEED_CMD_AUTO, // 自动喂食
FEED_CMD_REMOTE, // 远程喂食
FEED_CMD_TEST // 测试喂食
FEED_CMD_NONE = 0, // 无命令
FEED_CMD_MANUAL, // 手动喂食
FEED_CMD_AUTO, // 自动喂食
FEED_CMD_REMOTE, // 远程喂食
FEED_CMD_TEST // 测试喂食
} Feed_Cmd_t;
// 全局变量
static LCD_Page_t current_page = LCD_PAGE_TIME; // 当前显示页面
static Sensor_Data_t sensor_data = {0}; // 传感器数据
static volatile uint8_t lcd_force_refresh = 0; // 强制刷新标志RTC更新时设置
static volatile uint8_t system_mode = 1; // 系统模式1=自动模式0=手动模式(全局变量)
static volatile uint8_t lcd_force_refresh = 0; // 强制刷新标志RTC更新时设置
static volatile uint8_t system_mode =
1; // 系统模式1=自动模式0=手动模式(全局变量)
static volatile uint8_t feeding_in_progress = 0; // 喂食进行中标志
// 喂食控制相关全局变量
static volatile Feed_Cmd_t feed_command = FEED_CMD_NONE; // 喂食命令标志
static volatile uint16_t feed_angle = 90; // 喂食角度默认90度
static volatile uint8_t feed_amount = 1; // 喂食份数
static volatile Feed_Cmd_t feed_command = FEED_CMD_NONE; // 喂食命令标志
static volatile uint16_t feed_angle = 90; // 喂食角度默认90度
static volatile uint8_t feed_amount = 1; // 喂食份数
/* USER CODE END Variables */
/* Definitions for defaultTask */
osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes = {
.name = "defaultTask",
.stack_size = 256 * 4,
.priority = (osPriority_t) osPriorityHigh1,
.name = "defaultTask",
.stack_size = 256 * 4,
.priority = (osPriority_t)osPriorityHigh1,
};
/* Definitions for wifi_mqtt */
osThreadId_t wifi_mqttHandle;
const osThreadAttr_t wifi_mqtt_attributes = {
.name = "wifi_mqtt",
.stack_size = 3000 * 4,
.priority = (osPriority_t) osPriorityHigh,
.name = "wifi_mqtt",
.stack_size = 3000 * 4,
.priority = (osPriority_t)osPriorityHigh,
};
/* Definitions for LCD_SHOW_Task */
osThreadId_t LCD_SHOW_TaskHandle;
const osThreadAttr_t LCD_SHOW_Task_attributes = {
.name = "LCD_SHOW_Task",
.stack_size = 1024 * 4,
.priority = (osPriority_t) osPriorityHigh,
.name = "LCD_SHOW_Task",
.stack_size = 1024 * 4,
.priority = (osPriority_t)osPriorityHigh,
};
/* Definitions for button */
osThreadId_t buttonHandle;
const osThreadAttr_t button_attributes = {
.name = "button",
.stack_size = 512 * 4,
.priority = (osPriority_t) osPriorityRealtime2,
.name = "button",
.stack_size = 512 * 4,
.priority = (osPriority_t)osPriorityRealtime2,
};
/* Definitions for sensor */
osThreadId_t sensorHandle;
const osThreadAttr_t sensor_attributes = {
.name = "sensor",
.stack_size = 1024 * 4,
.priority = (osPriority_t) osPriorityNormal,
.name = "sensor",
.stack_size = 1024 * 4,
.priority = (osPriority_t)osPriorityNormal,
};
/* Definitions for step_motor */
osThreadId_t step_motorHandle;
const osThreadAttr_t step_motor_attributes = {
.name = "step_motor",
.stack_size = 512 * 4,
.priority = (osPriority_t) osPriorityNormal,
.name = "step_motor",
.stack_size = 512 * 4,
.priority = (osPriority_t)osPriorityNormal,
};
/* Private function prototypes -----------------------------------------------*/
@@ -160,7 +164,7 @@ void LCD_UpdateSensorData(float temp, float humi, float weight, uint8_t water,
uint8_t mode);
Sensor_Data_t *LCD_GetSensorData(void);
void user_button_init(void);
void RTC_TimeUpdateCallback(void); // RTC时间更新回调函数
void RTC_TimeUpdateCallback(void); // RTC时间更新回调函数
/* USER CODE END FunctionPrototypes */
void StartDefaultTask(void *argument);
@@ -173,16 +177,14 @@ void step_motor_task(void *argument);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
/**
* @brief FreeRTOS initialization
* @param None
* @retval None
*/
* @brief FreeRTOS initialization
* @param None
* @retval None
*/
void MX_FREERTOS_Init(void) {
/* USER CODE BEGIN Init */
ST7735_Init(); // 初始化ST7735显示屏
/* USER CODE END Init */
/* USER CODE BEGIN RTOS_MUTEX */
@@ -203,7 +205,8 @@ void MX_FREERTOS_Init(void) {
/* Create the thread(s) */
/* creation of defaultTask */
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
defaultTaskHandle =
osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
/* creation of wifi_mqtt */
wifi_mqttHandle = osThreadNew(wifi_task_mqtt, NULL, &wifi_mqtt_attributes);
@@ -227,7 +230,6 @@ void MX_FREERTOS_Init(void) {
/* USER CODE BEGIN RTOS_EVENTS */
/* add events, ... */
/* USER CODE END RTOS_EVENTS */
}
/* USER CODE BEGIN Header_StartDefaultTask */
@@ -237,8 +239,7 @@ void MX_FREERTOS_Init(void) {
* @retval None
*/
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
void StartDefaultTask(void *argument) {
/* USER CODE BEGIN StartDefaultTask */
// 1. 打开运行灯
Device_Control(DEVICE_LED_RUN, 1);
@@ -256,6 +257,9 @@ void StartDefaultTask(void *argument)
return;
}
// 设置为低音量-测试用
MP3_SetVolume(20);
elog_i("MP3", "模块初始化完成");
MP3_Play(SYS_POWER_ON); // 播放系统启动音
@@ -277,8 +281,7 @@ void StartDefaultTask(void *argument)
* @retval None
*/
/* USER CODE END Header_LCD_Task */
void LCD_Task(void *argument)
{
void LCD_Task(void *argument) {
/* USER CODE BEGIN LCD_Task */
char display_str[32];
@@ -306,71 +309,87 @@ void LCD_Task(void *argument)
case LCD_PAGE_TIME:
// 时间显示页面
ST7735_FillScreen(bg_color);
// 绘制标题栏
ST7735_FillRectangle(0, 0, ST7735_WIDTH, 15, ST7735_BLUE);
ST7735_WriteString(5, 2, "Time", &Font_7x10, ST7735_WHITE, ST7735_BLUE);
// 使用RTC时间独立于SNTP即使网络断开也能显示
if (BSP_RTC_GetTime(&rtc_time) == 0) {
// 显示时间(大字体,只显示时:分,不显示秒)
snprintf(display_str, sizeof(display_str), "%02d:%02d", rtc_time.hour, rtc_time.minute);
ST7735_WriteString(40, 30, display_str, &Font_16x26, ST7735_WHITE, bg_color);
snprintf(display_str, sizeof(display_str), "%02d:%02d", rtc_time.hour,
rtc_time.minute);
ST7735_WriteString(40, 30, display_str, &Font_16x26, ST7735_WHITE,
bg_color);
// 显示年月日(小字体,向下移动并居中)
snprintf(display_str, sizeof(display_str), "%04d-%02d-%02d",
rtc_time.year, rtc_time.month, rtc_time.day);
ST7735_WriteString(30, 65, display_str, &Font_7x10, ST7735_CYAN, bg_color);
ST7735_WriteString(30, 65, display_str, &Font_7x10, ST7735_CYAN,
bg_color);
} else {
ST7735_WriteString(40, 30, "--:--", &Font_16x26, ST7735_WHITE, bg_color);
ST7735_WriteString(30, 65, "----/--/--", &Font_7x10, ST7735_CYAN, bg_color);
ST7735_WriteString(40, 30, "--:--", &Font_16x26, ST7735_WHITE,
bg_color);
ST7735_WriteString(30, 65, "----/--/--", &Font_7x10, ST7735_CYAN,
bg_color);
}
break;
case LCD_PAGE_TEMP_HUMI:
// 温湿度页面
ST7735_FillScreen(bg_color);
// 绘制标题栏
ST7735_FillRectangle(0, 0, ST7735_WIDTH, 15, ST7735_GREEN);
ST7735_WriteString(5, 2, "Temp & Humi", &Font_7x10, ST7735_WHITE, ST7735_GREEN);
ST7735_WriteString(5, 2, "Temp & Humi", &Font_7x10, ST7735_WHITE,
ST7735_GREEN);
// 绘制分隔线
ST7735_DrawLine(0, 15, ST7735_WIDTH, 15, ST7735_WHITE);
// 显示温度(橙色 - 国际标准温度色)
snprintf(display_str, sizeof(display_str), "Temp:");
ST7735_WriteString(5, 25, display_str, &Font_7x10, ST7735_WHITE, bg_color);
snprintf(display_str, sizeof(display_str), "%.3fC", sensor_data.temperature);
ST7735_WriteString(40, 25, display_str, &Font_16x26, ST7735_ORANGE, bg_color);
ST7735_WriteString(5, 25, display_str, &Font_7x10, ST7735_WHITE,
bg_color);
snprintf(display_str, sizeof(display_str), "%.3fC",
sensor_data.temperature);
ST7735_WriteString(40, 25, display_str, &Font_16x26, ST7735_ORANGE,
bg_color);
// 显示湿度(青色 - 国际标准湿度色)
snprintf(display_str, sizeof(display_str), "Humi:");
ST7735_WriteString(5, 55, display_str, &Font_7x10, ST7735_WHITE, bg_color);
snprintf(display_str, sizeof(display_str), "%.3f%%", sensor_data.humidity);
ST7735_WriteString(40, 55, display_str, &Font_16x26, ST7735_CYAN, bg_color);
ST7735_WriteString(5, 55, display_str, &Font_7x10, ST7735_WHITE,
bg_color);
snprintf(display_str, sizeof(display_str), "%.3f%%",
sensor_data.humidity);
ST7735_WriteString(40, 55, display_str, &Font_16x26, ST7735_CYAN,
bg_color);
break;
case LCD_PAGE_FOOD_WEIGHT:
// 食物重量页面
ST7735_FillScreen(bg_color);
// 绘制标题栏
ST7735_FillRectangle(0, 0, ST7735_WIDTH, 15, ST7735_YELLOW);
ST7735_WriteString(5, 2, "Food Weight", &Font_7x10, ST7735_BLACK, ST7735_YELLOW);
ST7735_WriteString(5, 2, "Food Weight", &Font_7x10, ST7735_BLACK,
ST7735_YELLOW);
// 绘制分隔线
ST7735_DrawLine(0, 15, ST7735_WIDTH, 15, ST7735_WHITE);
// 显示食物重量
snprintf(display_str, sizeof(display_str), "%.2f g", sensor_data.food_weight);
ST7735_WriteString(15, 25, display_str, &Font_16x26, ST7735_WHITE, bg_color);
snprintf(display_str, sizeof(display_str), "%.2f g",
sensor_data.food_weight);
ST7735_WriteString(15, 25, display_str, &Font_16x26, ST7735_WHITE,
bg_color);
// 显示状态
if (sensor_data.food_weight < 50.0f) {
ST7735_WriteString(20, 65, "LOW", &Font_11x18, ST7735_RED, bg_color);
} else if (sensor_data.food_weight < 100.0f) {
ST7735_WriteString(15, 65, "MEDIUM", &Font_11x18, ST7735_YELLOW, bg_color);
ST7735_WriteString(15, 65, "MEDIUM", &Font_11x18, ST7735_YELLOW,
bg_color);
} else {
ST7735_WriteString(20, 65, "GOOD", &Font_11x18, ST7735_GREEN, bg_color);
}
@@ -379,11 +398,12 @@ void LCD_Task(void *argument)
case LCD_PAGE_WATER_LEVEL:
// 水位页面
ST7735_FillScreen(bg_color);
// 绘制标题栏
ST7735_FillRectangle(0, 0, ST7735_WIDTH, 15, ST7735_CYAN);
ST7735_WriteString(5, 2, "Water Level", &Font_7x10, ST7735_BLACK, ST7735_CYAN);
ST7735_WriteString(5, 2, "Water Level", &Font_7x10, ST7735_BLACK,
ST7735_CYAN);
// 绘制分隔线
ST7735_DrawLine(0, 15, ST7735_WIDTH, 15, ST7735_WHITE);
@@ -391,30 +411,36 @@ void LCD_Task(void *argument)
if (sensor_data.water_level == 0) {
// 绘制警告背景
ST7735_FillRectangle(0, 20, ST7735_WIDTH, 30, ST7735_RED);
ST7735_WriteString(20, 20, "NO WATER", &Font_16x26, ST7735_WHITE, ST7735_RED);
ST7735_WriteString(10, 60, "Add water", &Font_16x26, ST7735_YELLOW, bg_color);
ST7735_WriteString(20, 20, "NO WATER", &Font_16x26, ST7735_WHITE,
ST7735_RED);
ST7735_WriteString(10, 60, "Add water", &Font_16x26, ST7735_YELLOW,
bg_color);
} else {
// 绘制正常背景
ST7735_FillRectangle(0, 20, ST7735_WIDTH, 30, ST7735_GREEN);
ST7735_WriteString(5, 20, "WATER OK", &Font_16x26, ST7735_WHITE, ST7735_GREEN);
ST7735_WriteString(10, 60, "Not add", &Font_16x26, ST7735_WHITE, bg_color);
ST7735_WriteString(5, 20, "WATER OK", &Font_16x26, ST7735_WHITE,
ST7735_GREEN);
ST7735_WriteString(10, 60, "Not add", &Font_16x26, ST7735_WHITE,
bg_color);
}
break;
case LCD_PAGE_SYSTEM_STATUS:
// 系统状态页面
ST7735_FillScreen(bg_color);
// 绘制标题栏
ST7735_FillRectangle(0, 0, ST7735_WIDTH, 15, ST7735_MAGENTA);
ST7735_WriteString(5, 2, "System", &Font_7x10, ST7735_WHITE, ST7735_MAGENTA);
ST7735_WriteString(5, 2, "System", &Font_7x10, ST7735_WHITE,
ST7735_MAGENTA);
// 绘制分隔线
ST7735_DrawLine(0, 15, ST7735_WIDTH, 15, ST7735_WHITE);
// 显示MQTT连接状态
snprintf(display_str, sizeof(display_str), "MQTT:");
ST7735_WriteString(5, 25, display_str, &Font_7x10, ST7735_WHITE, bg_color);
ST7735_WriteString(5, 25, display_str, &Font_7x10, ST7735_WHITE,
bg_color);
if (WIFI_Is_MQTT_Connected()) {
ST7735_WriteString(40, 25, "OK", &Font_7x10, ST7735_GREEN, bg_color);
} else {
@@ -423,16 +449,19 @@ void LCD_Task(void *argument)
// 显示系统模式
snprintf(display_str, sizeof(display_str), "Mode:");
ST7735_WriteString(5, 45, display_str, &Font_7x10, ST7735_WHITE, bg_color);
ST7735_WriteString(5, 45, display_str, &Font_7x10, ST7735_WHITE,
bg_color);
if (sensor_data.system_mode) {
ST7735_WriteString(40, 45, "AUTO", &Font_7x10, ST7735_GREEN, bg_color);
} else {
ST7735_WriteString(40, 45, "MANUAL", &Font_7x10, ST7735_YELLOW, bg_color);
ST7735_WriteString(40, 45, "MANUAL", &Font_7x10, ST7735_YELLOW,
bg_color);
}
// 显示喂食状态
snprintf(display_str, sizeof(display_str), "Feed:");
ST7735_WriteString(5, 65, display_str, &Font_7x10, ST7735_WHITE, bg_color);
ST7735_WriteString(5, 65, display_str, &Font_7x10, ST7735_WHITE,
bg_color);
if (feeding_in_progress) {
ST7735_WriteString(40, 65, "Busy", &Font_7x10, ST7735_ORANGE, bg_color);
} else {
@@ -445,18 +474,19 @@ void LCD_Task(void *argument)
LCD_Page_t displayed_page = current_page;
// 根据当前页面设置不同的刷新间隔
if (current_page == LCD_PAGE_TIME || current_page == LCD_PAGE_SYSTEM_STATUS) {
if (current_page == LCD_PAGE_TIME ||
current_page == LCD_PAGE_SYSTEM_STATUS) {
// 时间页面和系统状态页面30秒刷新一次但每100ms检查一次是否需要切换页面
for (int i = 0; i < 300; i++) {
if (current_page != displayed_page) {
break; // 检测到页面切换,立即跳出
break; // 检测到页面切换,立即跳出
}
if (lcd_force_refresh) {
// RTC时间更新立即刷新LCD
lcd_force_refresh = 0;
break;
}
osDelay(100); // 每100ms检查一次总共30秒
osDelay(100); // 每100ms检查一次总共30秒
}
} else {
// 其他页面1秒刷新一次
@@ -468,19 +498,17 @@ void LCD_Task(void *argument)
/* USER CODE BEGIN Header_button_task */
/**
* @brief Function implementing the button thread.
* @param argument: Not used
* @retval None
*/
* @brief Function implementing the button thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_button_task */
void button_task(void *argument)
{
void button_task(void *argument) {
/* USER CODE BEGIN button_task */
user_button_init();
/* Infinite loop */
for(;;)
{
for (;;) {
button_ticks();
osDelay(5);
}
@@ -489,17 +517,29 @@ void button_task(void *argument)
/* USER CODE BEGIN Header_sensorTask */
/**
* @brief Function implementing the sensor thread.
* @param argument: Not used
* @retval None
*/
* @brief Function implementing the sensor thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_sensorTask */
void sensorTask(void *argument)
{
void sensorTask(void *argument) {
/* USER CODE BEGIN sensorTask */
elog_i(TAG, "启动传感器任务");
// #################### 校准流程(首次使用必须执行!)####################
HAL_Delay(1000); // 上电稳定
elog_i(TAG, "开始校准零点...");
HX711_CalibrateZero(); // 空载时调用(传感器上不放任何东西)
elog_i(TAG, "零点校准完成零点AD值%d", hx711_zero_offset);
HAL_Delay(1000);
// elog_i(TAG, "请在传感器上放置已知重量的物体3秒后开始标定...");
// HAL_Delay(3000);
// HX711_CalibrateScale(350.0f); // 放置100g的物体根据实际重量修改
elog_i(TAG, "量程标定完成!标定系数:%.6f", hx711_scale);
// #################### 循环读取重量 ####################
// 扫描I2C设备调试
elog_i(TAG, "扫描I2C设备");
AHT30_ScanI2C(&hi2c1);
// 如果硬件I2C扫描失败尝试软件I2C
@@ -525,8 +565,7 @@ void sensorTask(void *argument)
}
/* Infinite loop */
for(;;)
{
for (;;) {
// 读取温湿度数据
AHT30_Data_t aht30_data;
if (AHT30_ReadData(&aht30_data)) {
@@ -540,6 +579,9 @@ void sensorTask(void *argument)
elog_w(TAG, "AHT30数据读取失败");
}
sensor_data.food_weight= HX711_GetWeight(10); // 采样10次取平均
elog_d(TAG, "当前重量:%.2f g", sensor_data.food_weight);
// 每2秒读取一次
osDelay(2000);
}
@@ -558,12 +600,13 @@ uint8_t Request_Feed(Feed_Cmd_t cmd, uint16_t angle, uint8_t amount) {
elog_w("FEED", "喂食进行中,无法接受新命令");
return 0;
}
feed_command = cmd;
feed_angle = angle;
feed_amount = amount;
elog_i("FEED", "喂食请求已提交: cmd=%d, angle=%d, amount=%d", cmd, angle, amount);
elog_i("FEED", "喂食请求已提交: cmd=%d, angle=%d, amount=%d", cmd, angle,
amount);
return 1;
}
@@ -571,16 +614,12 @@ uint8_t Request_Feed(Feed_Cmd_t cmd, uint16_t angle, uint8_t amount) {
* @brief 获取当前喂食命令
* @retval 当前喂食命令
*/
Feed_Cmd_t Get_Feed_Command(void) {
return feed_command;
}
Feed_Cmd_t Get_Feed_Command(void) { return feed_command; }
/**
* @brief 清除喂食命令
*/
void Clear_Feed_Command(void) {
feed_command = FEED_CMD_NONE;
}
void Clear_Feed_Command(void) { feed_command = FEED_CMD_NONE; }
/**
* @brief 执行喂食操作
@@ -592,30 +631,30 @@ static void Execute_Feed(Feed_Cmd_t cmd, uint16_t angle, uint8_t amount) {
if (feeding_in_progress) {
return; // 防止重复执行
}
feeding_in_progress = 1;
// 根据命令类型播放不同音频
switch (cmd) {
case FEED_CMD_MANUAL:
MP3_Play(FEED_MANUAL_TRIGGER);
elog_i("FEED", "执行手动喂食: 角度%d度, %d份", angle, amount);
break;
case FEED_CMD_AUTO:
MP3_Play(FEED_AUTO_START);
elog_i("FEED", "执行自动喂食: 角度%d度, %d份", angle, amount);
break;
case FEED_CMD_REMOTE:
MP3_Play(REMOTE_CMD_RECEIVED);
elog_i("FEED", "执行远程喂食: 角度%d度, %d份", angle, amount);
break;
case FEED_CMD_TEST:
elog_i("FEED", "执行测试喂食: 角度%d度", angle);
break;
default:
break;
case FEED_CMD_MANUAL:
MP3_Play(FEED_MANUAL_TRIGGER);
elog_i("FEED", "执行手动喂食: 角度%d度, %d份", angle, amount);
break;
case FEED_CMD_AUTO:
MP3_Play(FEED_AUTO_START);
elog_i("FEED", "执行自动喂食: 角度%d度, %d份", angle, amount);
break;
case FEED_CMD_REMOTE:
MP3_Play(REMOTE_CMD_RECEIVED);
elog_i("FEED", "执行远程喂食: 角度%d度, %d份", angle, amount);
break;
case FEED_CMD_TEST:
elog_i("FEED", "执行测试喂食: 角度%d度", angle);
break;
default:
break;
}
// 执行实际的喂食动作
for (uint8_t i = 0; i < amount; i++) {
Stepper_Motor_RotateAngle(angle, STEPPER_DIR_CW, 2, STEPPER_MODE_FULL_STEP);
@@ -623,49 +662,47 @@ static void Execute_Feed(Feed_Cmd_t cmd, uint16_t angle, uint8_t amount) {
osDelay(1000); // 多份之间间隔1秒
}
}
// 等待食物落下
osDelay(3000);
// 停止电机
Stepper_Motor_Stop();
// 播放完成音效
MP3_Play(FEED_COMPLETE);
elog_i("FEED", "喂食完成");
feeding_in_progress = 0;
}
/* USER CODE BEGIN Header_step_motor_task */
/**
* @brief Function implementing the step_motor thread.
* @param argument: Not used
* @retval None
*/
* @brief Function implementing the step_motor thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_step_motor_task */
void step_motor_task(void *argument)
{
void step_motor_task(void *argument) {
/* USER CODE BEGIN step_motor_task */
// 初始化步进电机
Stepper_Motor_Init();
/* Infinite loop */
for(;;)
{
for (;;) {
// 检查是否有喂食命令需要执行
if (feed_command != FEED_CMD_NONE && !feeding_in_progress) {
Feed_Cmd_t current_cmd = feed_command;
uint16_t current_angle = feed_angle;
uint8_t current_amount = feed_amount;
// 清除命令标志
Clear_Feed_Command();
// 执行喂食
Execute_Feed(current_cmd, current_angle, current_amount);
}
osDelay(100); // 短暂延时,保持任务响应性
}
/* USER CODE END step_motor_task */
@@ -678,12 +715,12 @@ void step_motor_task(void *argument)
/* USER CODE BEGIN KEY Prototypes */
static Button KEY1; // 按键1
static Button KEY2; // 按键2
static Button KEY3; // 按键3
static Button KEY4; // 按键4
static Button M3_IO; // M3 IO
static Button HC_SR505; //HC-SR505
static Button KEY1; // 按键1
static Button KEY2; // 按键2
static Button KEY3; // 按键3
static Button KEY4; // 按键4
static Button M3_IO; // M3 IO
static Button HC_SR505; // HC-SR505
uint8_t read_button_gpio(uint8_t button_id) {
switch (button_id) {
@@ -717,16 +754,17 @@ uint8_t read_button_gpio(uint8_t button_id) {
void key1_single_click_handler(Button *btn) {
// 切换系统模式
system_mode = !system_mode; // 0和1之间切换
// 更新传感器数据中的模式状态
sensor_data.system_mode = system_mode;
// 记录日志
elog_i("KEY", "按键1单击 - 模式切换: %s", system_mode ? "自动模式" : "手动模式");
elog_i("KEY", "按键1单击 - 模式切换: %s",
system_mode ? "自动模式" : "手动模式");
// 播放模式切换音效
MP3_Play(system_mode ? MODE_AUTO : MODE_MANUAL);
// 强制刷新LCD显示以更新模式状态
lcd_force_refresh = 1;
}
@@ -752,27 +790,24 @@ void key2_single_click_handler(Button *btn) {
}
}
void key3_single_click_handler(Button *btn) {
elog_i("KEY", "按键3单击");
void key3_single_click_handler(Button *btn) {
elog_i("KEY", "按键3单击");
LCD_NextPage();
}
void key4_single_click_handler(Button *btn) { elog_i("KEY", "按键4单击"); }
void M3_long_press_start_handler(Button *btn) {
elog_i("KEY", "M3水位传感器检测到有水低电平");
void M3_long_press_start_handler(Button *btn) {
elog_i("KEY", "M3水位传感器检测到有水低电平");
sensor_data.water_level = 1;
}
void M3_press_up_handler(Button *btn) {
elog_i("KEY", "M3水位传感器检测到无水高电平");
void M3_press_up_handler(Button *btn) {
elog_i("KEY", "M3水位传感器检测到无水高电平");
sensor_data.water_level = 0;
}
void HC_SR055_long_click_handler(Button *btn) { elog_i("KEY", "HC-SR505触发"); }
void user_button_init(void) {
// 初始化按键 (active_level: 0=低电平有效, 1=高电平有效)
button_init(&KEY1, read_button_gpio, 0, 1);
@@ -790,7 +825,8 @@ void user_button_init(void) {
button_attach(&KEY4, BTN_SINGLE_CLICK, key4_single_click_handler);
button_attach(&M3_IO, BTN_LONG_PRESS_START, M3_long_press_start_handler);
button_attach(&M3_IO, BTN_PRESS_UP, M3_press_up_handler);
button_attach(&HC_SR505, BTN_LONG_PRESS_START, HC_SR055_long_click_handler); // 长按触发
button_attach(&HC_SR505, BTN_LONG_PRESS_START,
HC_SR055_long_click_handler); // 长按触发
elog_i("BUTTON", "按键回调函数设置完成");
@@ -801,7 +837,7 @@ void user_button_init(void) {
button_start(&KEY4);
button_start(&M3_IO);
button_start(&HC_SR505);
elog_i("BUTTON", "按键任务已启动");
}
@@ -809,9 +845,7 @@ void user_button_init(void) {
* @brief 获取当前系统模式
* @retval 系统模式 (0=手动, 1=自动)
*/
uint8_t Get_System_Mode(void) {
return system_mode;
}
uint8_t Get_System_Mode(void) { return system_mode; }
/**
* @brief 设置系统模式
@@ -830,9 +864,7 @@ void Set_System_Mode(uint8_t mode) {
* @brief 检查是否正在喂食
* @retval 1=正在喂食, 0=空闲
*/
uint8_t Is_Feeding_In_Progress(void) {
return feeding_in_progress;
}
uint8_t Is_Feeding_In_Progress(void) { return feeding_in_progress; }
/* USER CODE END KEY Prototypes */
@@ -916,9 +948,7 @@ Sensor_Data_t *LCD_GetSensorData(void) { return &sensor_data; }
* @brief RTC时间更新回调函数
* @note 当RTC通过SNTP更新时间时调用立即刷新LCD显示
*/
void RTC_TimeUpdateCallback(void) {
lcd_force_refresh = 1;
}
void RTC_TimeUpdateCallback(void) { lcd_force_refresh = 1; }
/* USER CODE END LCD_Page_Functions */

View File

@@ -1,5 +0,0 @@
大夏龙雀安卓WiFi APP以下任意一种方式可获取
1.官网-资料下载-开发工具-手机APPhttp://www.szdx-smart.com/zlxz/kfgj.html
2.公众号-大夏龙雀通信专家-服务支持-资料下载-软件工具-手机app

View File

@@ -1,5 +0,0 @@
大夏龙雀安卓测试APP以下任意一种方式可获取
1.官网-资料下载-开发工具-手机APPhttp://www.szdx-smart.com/zlxz/kfgj.html
2.公众号-大夏龙雀通信专家-服务支持-资料下载-软件工具-手机app

View File

@@ -1,5 +0,0 @@
大夏龙雀安卓app参考代码以下任意一种方式可获取
1.官网-资料下载-开发工具-app参考代码http://www.szdx-smart.com/zlxz/kfgj.html
2.公众号-大夏龙雀通信专家-服务支持-资料下载-软件工具-app参考代码

View File

@@ -1,5 +0,0 @@
大夏龙雀苹果app参考代码以下任意一种方式可获取
1.官网-资料下载-开发工具-app参考代码http://www.szdx-smart.com/zlxz/kfgj.html
2.公众号-大夏龙雀通信专家-服务支持-资料下载-软件工具-app参考代码

View File

@@ -1,2 +0,0 @@
苹果APP下载方法
App Store搜索“DX-SMART”

View File

@@ -1,6 +0,0 @@
如有MQTT服务器需求可到EMQX官网自行下载
https://www.emqx.io/zh/downloads?os=Windows
===========================================================
★ 解压路径不能有 中文

View File

@@ -1,383 +0,0 @@
;删除本文件可以恢复默认值。
;这是SSCOM的设置保存文件,您在程序中设置好的串口参数和字符串数据都会自动保存,请最好不要用外部编辑器改动本文件!
;如果文件被修改后程序不能打开,请删除本文件,程序将会自动生成一个新的ini文件.
;靠行首的半角分号是注释符号
;每行都以回车结束
;"="后面的H表示这是个HEX数据串
;"="后面的A表示这是个ASC字符串
;Nx表示第几条定义的字符串(1<x<=N)
N101=1,十六进制数据串1,1000
N1=H,13 00 FF 88
N102=3,字符串1,1000
N2=A,output string
N103=2,欢迎语,1000
N3=A,欢迎您使用SSCOM!
N104=0,4无注释,1000
N4=A,
N105=0,5无注释,1000
N5=A,
N106=0,6无注释,1000
N6=A,
N107=0,7无注释,1000
N7=A,
N108=0,8无注释,1000
N8=A,
N109=0,,1000
N9=A,作者的话:
N110=0,,1000
N10=A,为了更好地发展SSCOM软件.
N111=0,,1000
N11=A,请您注册嘉立创PCB打样F结尾ID.
N112=0,,1000
N12=A,本软件作者兼职了嘉立创业务员.
N113=0,,1000
N13=A,只有F结尾ID才能给作者带来收益.
N114=0,,1000
N14=A,即使您已有嘉立创的ID.
N115=0,,1000
N15=A,同一手机号也可以多注册一个F.
N116=0,,1000
N16=A,您将为SSCOM带来更多资金支持!
N117=0,,1000
N17=A,请联系F业务助理QQ:800058315
N118=0,,1000
N18=A,谢谢!(以上信息均可删除)
N119=0,19无注释,1000
N19=A,
N120=0,20无注释,1000
N20=A,
N121=0,21无注释,1000
N21=A,
N122=0,22无注释,1000
N22=A,
N123=0,23无注释,1000
N23=A,
N124=0,24无注释,1000
N24=A,
N125=0,25无注释,1000
N25=A,
N126=0,26无注释,1000
N26=A,
N127=0,27无注释,1000
N27=A,
N128=0,28无注释,1000
N28=A,
N129=0,29无注释,1000
N29=A,
N130=0,30无注释,1000
N30=A,
N131=0,31无注释,1000
N31=A,
N132=0,32无注释,1000
N32=A,
N133=0,33无注释,1000
N33=A,
N134=0,34无注释,1000
N34=A,
N135=0,35无注释,1000
N35=A,
N136=0,36无注释,1000
N36=A,
N137=0,37无注释,1000
N37=A,
N138=0,38无注释,1000
N38=A,
N139=0,39无注释,1000
N39=A,
N140=0,40无注释,1000
N40=A,
N141=0,41无注释,1000
N41=A,
N142=0,42无注释,1000
N42=A,
N143=0,43无注释,1000
N43=A,
N144=0,44无注释,1000
N44=A,
N145=0,45无注释,1000
N45=A,
N146=0,46无注释,1000
N46=A,
N147=0,47无注释,1000
N47=A,
N148=0,48无注释,1000
N48=A,
N149=0,49无注释,1000
N49=A,
N150=0,50无注释,1000
N50=A,
N151=0,51无注释,1000
N51=A,
N152=0,52无注释,1000
N52=A,
N153=0,53无注释,1000
N53=A,
N154=0,54无注释,1000
N54=A,
N155=0,55无注释,1000
N55=A,
N156=0,56无注释,1000
N56=A,
N157=0,57无注释,1000
N57=A,
N158=0,58无注释,1000
N58=A,
N159=0,59无注释,1000
N59=A,
N160=0,60无注释,1000
N60=A,
N161=0,61无注释,1000
N61=A,
N162=0,62无注释,1000
N62=A,
N163=0,63无注释,1000
N63=A,
N164=0,64无注释,1000
N64=A,
N165=0,65无注释,1000
N65=A,
N166=0,66无注释,1000
N66=A,
N167=0,67无注释,1000
N67=A,
N168=0,68无注释,1000
N68=A,
N169=0,69无注释,1000
N69=A,
N170=0,70无注释,1000
N70=A,
N171=0,71无注释,1000
N71=A,
N172=0,72无注释,1000
N72=A,
N173=0,73无注释,1000
N73=A,
N174=0,74无注释,1000
N74=A,
N175=0,75无注释,1000
N75=A,
N176=0,76无注释,1000
N76=A,
N177=0,77无注释,1000
N77=A,
N178=0,78无注释,1000
N78=A,
N179=0,79无注释,1000
N79=A,
N180=0,80无注释,1000
N80=A,
N181=0,81无注释,1000
N81=A,
N182=0,82无注释,1000
N82=A,
N183=0,83无注释,1000
N83=A,
N184=0,84无注释,1000
N84=A,
N185=0,85无注释,1000
N85=A,
N186=0,86无注释,1000
N86=A,
N187=0,87无注释,1000
N87=A,
N188=0,88无注释,1000
N88=A,
N189=0,89无注释,1000
N89=A,
N190=0,90无注释,1000
N90=A,
N191=0,91无注释,1000
N91=A,
N192=0,92无注释,1000
N92=A,
N193=0,93无注释,1000
N93=A,
N194=0,94无注释,1000
N94=A,
N195=0,95无注释,1000
N95=A,
N196=0,96无注释,1000
N96=A,
N197=0,97无注释,1000
N97=A,
N198=0,98无注释,1000
N98=A,
N199=0,99无注释,1000
N99=A,
;发送文件时每256字节延时时间ms
N1051=,1
;打开文件地址和名称
N1052=,
;主面板ASC字符串
N1053=,AT
;主面板HEX数据串
N1054=,12 FF 00 30
;主面板发送方式(ASC or HEX)
N1055=,A
;主面板字符串发送间隔时间ms
N1056=,1000
;主面板字符串发送新行
N1057=,Y
;多条字符串发送间隔时间ms
N1058=,1
;接收窗口是否HEX显示方式
N1059=,N
;校验方式,0=None1=modbusCRC162=ADD3=XOR
N1060=,0
;保存DTR:
N1061=,Y
;保存RTS:
N1062=,N
;程序启动时是否打开串口
N1063=,N
;是否分包显示
N1064=,Y
;分包超时时间ms
N1065=,20
;接收窗背景颜色
N1066=,16777215
;显示缓冲上限,200K,500K,1M,2M,5M,10M,20M
N1067=,1000000
;远程IP地址
N1068=,120.76.28.211
;远程端口
N1069=,80
;本地端口
N1070=,777
;选择回车后发送行(带回显)
N1071=,N
;选择按键立即发送键值
N1072=,Y
;选择回显
N1073=,N
;第几字节至末尾加校验
N1074=,1
;至末尾倒数第几字节加校验,存第几个项目
N1075=,0
;终端仿真输入回车后是否自动加换行
N1076=,N
;当前串口号Port=COMX,网络模式):1=TCPCLIENT,2=TCPSERVER,3=UDP
N1080=,1
;波特率Band rate
N1081=,9600
;保存窗口宽度
N1082=,792
;保存窗口高度
N1083=,600
;保存窗口left
N1084=,250
;保存窗口top
N1085=,180
;分割线位置(右侧装多条自定义字符串的容器宽度)
N1086=,418
;多条发送按钮的宽度
N1087=,120
;保存窗口字体名称
N1088=,宋体
;保存窗口字体大小
N1089=,9
;保存窗口字体颜色
N1090=,0
;C:Chinese汉语,E:English
N1100=,汉语
;end

View File

@@ -1,5 +0,0 @@
单片机例程获取方式:
1.公众号-大夏龙雀通信专家-服务支持-资料下载-软件工具-单片机例程
2.网盘下载https://pan.baidu.com/s/1TM_bhhZxs1XYpwCInLnWmQ?pwd=DXLQ

View File

@@ -1,3 +0,0 @@
WF20,WF24简易通讯演示https://www.bilibili.com/video/BV16y411i7GM/vd_source=eea7110af12e42cd165b2906e4af23ee
WF20,WF24正常模式演示https://www.bilibili.com/video/BV1ft421N73b/vd_source=eea7110af12e42cd165b2906e4af23ee

Binary file not shown.

View File

@@ -1,166 +0,0 @@
//**** 声明 ********************************************************************
/*******************************************************************************
* 下面来自互联开源程序,由深圳市大夏龙雀科技有限公司收集
* 方便用户参考学习,本公司不提供任何技术支持
* 程序仅供测试参考,不能应用在实际工程中,不一定能通过编译
* 公司网站 http://www.szdx-smart.com/
* 淘宝网址 https://shop184598174.taobao.com/?spm=a1z10.5-c-s.w12096189-21564973333.3.547b1176WCCDxR&scene=taobao_shop
*******************************************************************************/
/********************************************************************
* 文件名 WF24-MQTT协议应用
* 描述 : 该文件实现WF24和单片机数据透传。
***********************************************************************/
/*
Name: MQTT
Created: 2024/8/21
Author: WAM
*/
#include <Arduino.h>
#include <SPI.h>
#include <SoftwareSerial.h>
#include <stdio.h>
#include <string.h>
#define STA_MODE "AT+CWMODE=0\r\n"//设置为STA模式 连接热点
#define CONNECT_TO_WIFI "AT+CWJAP=DX-SMART,SMART@601\r\n"//DX-SMART为WIFI名称 SMART@601\r\n"//DX-SMART为WIFI名称 SMART@601为WIFI密码
#define ONECON_MODE "AT+CIPMODE=1\r\n"//设置为单连接模式 连接热点
#define CONNECT_TO_TCP "AT+CIPSTART=TCP,192.168.0.146,2347\r\n"//连接服务器 192.168.0.150为IP地址 2347为端口号 应和热点保持一致
#define CONNECT_TO_UDP "AT+CIPSTART=UDP,192.168.0.146,2345,1112,0\r\n"//连接服务器 192.168.0.150为IP地址 2345为端口号 1112 是模块设置的端口号 0 UDP固定目标模式
#define SET_MQTT "AT+MQTTLONGCLIENTID=WF-TEST2\r\n"//配置 MQTT 客户端所需的客户端 ID、用户名和密码 若 MQTT 服务器无用户名和密码验证,则模块可跳过用户名和密码的输入
#define CONNECT_TO_MQTT "AT+MQTTCONN=broker.emqx.io,1883,0\r\n"//连接MQTT 服务器 端口号 是否自动重连
#define SUB_TOPIC "AT+MQTTSUB=test-app,0\r\n"//订阅主题 test-app主题名 QOS服务质量
#define PUB_TOPIC "AT+MQTTPUBRAW=test-wf,10,0,0\r\n"//发布主题 test-wf主题名 10 消息长度 0 为QOS 0 retain 服务器是否为该主题存储一条最新的保留消息
#define EXIT_MQTT "AT+MQTTCLEAN\r\n" //断开MQTT连接
#define PUB_RAM "AT+MQTTPUBRAW=test-wf,32,0,0\r\n" //断开MQTT连接
SoftwareSerial WIFI(10, 11); // RX, TX 软件串口的波特率在Arduino会有一定限制 最好不要超过9600
int ledPin=3;//定义数字10接口
void setup() //初始化部分
{
Serial.begin(115200);//WF24使用硬件串口
WIFI.begin(9600);//作为调试
WIFI.listen();
Connect_MQTT();
pinMode(ledPin,OUTPUT);//定义小灯接口为输出接口
digitalWrite(ledPin,HIGH);
}
String arr;
void loop() //主循环
{
// 从WF24读取数据并发送到PC串口
while(WIFI.available()>0)
{
char c = WIFI.read();
Serial.write(c);
}
//WF24接收到消息进行打印
while (Serial.available() > 0) {
arr = Serial.readStringUntil('\0');
if(AT_CMD(PUB_RAM,"OK\r\n"))
{
Serial.print(arr);
delay(200);
while (Serial.available()) Serial.read();
}
}
}
bool AT_CMD(char * data,char * keyword)
{
while (Serial.available()) Serial.read();
int i=0;
char inchar;
char UNO_RECV[256] = {0};
unsigned long start = millis();
Serial.println(data); //发送AT指令
while(!Serial.available());//等待模块应答
delay(1500);
while (Serial.available())
{
UNO_RECV[i++] = Serial.read();
}
WIFI.print(UNO_RECV);
if(strstr(UNO_RECV,keyword)!=NULL)
{
if(strstr(data,"CWJAP")!=NULL)
delay(3000);//等待WIFI连接成功
if(strstr(data,"CIPSTART")!=NULL)
delay(1000);//等待连接TCP成功
if(strstr(data,"MQTTCONN")!=NULL)
delay(1000);//等待连接服务器成功
if(strstr(data,"MQTTPUBRAW")!=NULL)
{
}
while (Serial.available()) Serial.read();
WIFI.println("true\r\n");
return true;
}
else
{
WIFI.println("false\r\n");
while (Serial.available()) Serial.read();
return false;
}
}
void exit_Connect()
{
for(int i = 0;i<3;i++)
{
Serial.write('+');
}
delay(200);
for(int n = 0;n<3;n++)
{
Serial.write('+');
}
}
void Connect_TCP()
{
exit_Connect();//确保模块为指令模式
while(!AT_CMD("AT+RESTORE\r\n","OK\r\n"));//回复出厂设置
while(!AT_CMD("AT+RST\r\n","OK\r\n"));//上电重启
while(!AT_CMD("AT\r\n","OK\r\n"));//是否正常使用
while(!AT_CMD(STA_MODE,"OK\r\n"));//设置为STA模式
while(!AT_CMD(CONNECT_TO_WIFI,"OK\r\n"));//连接热点
while(!AT_CMD(ONECON_MODE,"OK\r\n"));//设置为单模式
while(!AT_CMD(CONNECT_TO_TCP,"CIPSTART:1"));//连接TCP服务端
while(!AT_CMD("AT+CIPSEND\r\n","OK\r\n"));//进入透传模式
Serial.println("connect success");
}
void Connect_UDP()
{
exit_Connect();//确保模块为指令模式
while(!AT_CMD("AT+RESTORE\r\n","OK\r\n"));//回复出厂设置
while(!AT_CMD("AT+RST\r\n","OK\r\n"));//上电重启
while(!AT_CMD("AT\r\n","OK\r\n"));;//是否正常使用
while(!AT_CMD(STA_MODE,"OK\r\n"));;//设置为STA模式
while(!AT_CMD(CONNECT_TO_WIFI,"OK\r\n"));;//连接热点
while(!AT_CMD(ONECON_MODE,"OK\r\n"));;//设置为单模式
while(!AT_CMD(CONNECT_TO_UDP,"CIPSTART:1")); ;//连接TCP服务端
while(!AT_CMD("AT+CIPSEND\r\n","OK\r\n"));//进入透传模式
Serial.println("connect UDP success");
}
void Connect_MQTT()
{
while(!AT_CMD(EXIT_MQTT,"OK\r\n"));//断开连接
while(!AT_CMD("AT+RESTORE\r\n","OK\r\n"));//回复出厂设置
while(!AT_CMD("AT+RST\r\n","OK\r\n"));//上电重启
while(!AT_CMD("AT\r\n","OK\r\n"));//是否正常使用
while(!AT_CMD(STA_MODE,"OK\r\n"));//设置为STA模式
while(!AT_CMD(CONNECT_TO_WIFI,"OK\r\n"));//连接热点
while(!AT_CMD(SET_MQTT,"OK\r\n"));//设置MQTT客户端参数
while(!AT_CMD(CONNECT_TO_MQTT,"MQTTCONNECTED:"));//连接MQTT服务器
while(!AT_CMD(SUB_TOPIC,"OK\r\n"));//订阅MQTT服务主题
//while(!AT_CMD(PUB_RAM,"OK\r\n"));//发布主题消息
//Serial.print("connect MQTT success");
}

View File

@@ -1,163 +0,0 @@
//**** 声明 ********************************************************************
/*******************************************************************************
* 下面来自互联开源程序,由深圳市大夏龙雀科技有限公司收集
* 方便用户参考学习,本公司不提供任何技术支持
* 程序仅供测试参考,不能应用在实际工程中,不一定能通过编译
* 公司网站 http://www.szdx-smart.com/
* 淘宝网址 https://shop184598174.taobao.com/?spm=a1z10.5-c-s.w12096189-21564973333.3.547b1176WCCDxR&scene=taobao_shop
*******************************************************************************/
/********************************************************************
* 文件名 WF24-TCP协议应用
* 描述 : 该文件实现WF24和单片机数据透传。
***********************************************************************/
/*
Name: TCP
Created: 2024/8/21
Author: WAM
*/
#include <Arduino.h>
#include <SPI.h>
#include <SoftwareSerial.h>
#include <stdio.h>
#include <string.h>
#define STA_MODE "AT+CWMODE=0\r\n"//设置为STA模式 连接热点
#define CONNECT_TO_WIFI "AT+CWJAP=DX-SMART,SMART@601\r\n"//DX-SMART为WIFI名称 SMART@601\r\n"//DX-SMART为WIFI名称 SMART@601为WIFI密码
#define ONECON_MODE "AT+CIPMODE=1\r\n"//设置为单连接模式 连接热点
#define CONNECT_TO_TCP "AT+CIPSTART=TCP,192.168.0.146,2347\r\n"//连接服务器 192.168.0.150为IP地址 2347为端口号 应和热点保持一致
#define CONNECT_TO_UDP "AT+CIPSTART=UDP,192.168.0.146,2345,1112,0\r\n"//连接服务器 192.168.0.150为IP地址 2345为端口号 1112 是模块设置的端口号 0 UDP固定目标模式
#define SET_MQTT "AT+MQTTLONGCLIENTID=WF-TEST2\r\n"//配置 MQTT 客户端所需的客户端 ID、用户名和密码 若 MQTT 服务器无用户名和密码验证,则模块可跳过用户名和密码的输入
#define CONNECT_TO_MQTT "AT+MQTTCONN=broker.emqx.io,1883,0\r\n"//连接MQTT 服务器 端口号 是否自动重连
#define SUB_TOPIC "AT+MQTTSUB=test-app,0\r\n"//订阅主题 test-app主题名 QOS服务质量
#define PUB_TOPIC "AT+MQTTPUBRAW=test-wf,10,0,0\r\n"//发布主题 test-wf主题名 10 消息长度 0 为QOS 0 retain 服务器是否为该主题存储一条最新的保留消息
#define EXIT_MQTT "AT+MQTTCLEAN\r\n" //断开MQTT连接
#define PUB_RAM "AT+MQTTPUBRAW=test-wf,32,0,0\r\n" //断开MQTT连接
SoftwareSerial WIFI(10, 11); // RX, TX 软件串口的波特率在Arduino会有一定限制 最好不要超过9600
int ledPin=3;//定义数字10接口
void setup() //初始化部分
{
Serial.begin(115200);//WF24使用硬件串口
WIFI.begin(9600);//作为调试
WIFI.listen();
Connect_TCP();
pinMode(ledPin,OUTPUT);//定义小灯接口为输出接口
digitalWrite(ledPin,HIGH);
}
String arr;
void loop() //主循环
{
// 从WF24读取数据并发送到PC串口
while(WIFI.available()>0)
{
char c = WIFI.read();
Serial.write(c);
}
//WF24接收到消息进行打印
while (Serial.available() > 0) {
arr = Serial.readStringUntil('\0');
Serial.print(arr);
}
}
bool AT_CMD(char * data,char * keyword)
{
while (Serial.available()) Serial.read();
int i=0;
char inchar;
char UNO_RECV[256] = {0};
unsigned long start = millis();
Serial.println(data); //发送AT指令
while(!Serial.available());//等待模块应答
delay(1500);
while (Serial.available())
{
UNO_RECV[i++] = Serial.read();
}
WIFI.print(UNO_RECV);
if(strstr(UNO_RECV,keyword)!=NULL)
{
if(strstr(data,"CWJAP")!=NULL)
delay(3000);//等待WIFI连接成功
if(strstr(data,"CIPSTART")!=NULL)
delay(1000);//等待连接TCP成功
if(strstr(data,"MQTTCONN")!=NULL)
delay(1000);//等待连接服务器成功
if(strstr(data,"MQTTPUBRAW")!=NULL)
{
}
while (Serial.available()) Serial.read();
WIFI.println("true\r\n");
return true;
}
else
{
WIFI.println("false\r\n");
while (Serial.available()) Serial.read();
return false;
}
}
void exit_Connect()
{
for(int i = 0;i<3;i++)
{
Serial.write('+');
}
delay(200);
for(int n = 0;n<3;n++)
{
Serial.write('+');
}
}
void Connect_TCP()
{
exit_Connect();//确保模块为指令模式
while(!AT_CMD("AT+RESTORE\r\n","OK\r\n"));//回复出厂设置
while(!AT_CMD("AT+RST\r\n","OK\r\n"));//上电重启
while(!AT_CMD("AT\r\n","OK\r\n"));//是否正常使用
while(!AT_CMD(STA_MODE,"OK\r\n"));//设置为STA模式
while(!AT_CMD(CONNECT_TO_WIFI,"OK\r\n"));//连接热点
while(!AT_CMD(ONECON_MODE,"OK\r\n"));//设置为单模式
while(!AT_CMD(CONNECT_TO_TCP,"CIPSTART:1"));//连接TCP服务端
while(!AT_CMD("AT+CIPSEND\r\n","OK\r\n"));//进入透传模式
Serial.println("connect success");
}
void Connect_UDP()
{
exit_Connect();//确保模块为指令模式
while(!AT_CMD("AT+RESTORE\r\n","OK\r\n"));//回复出厂设置
while(!AT_CMD("AT+RST\r\n","OK\r\n"));//上电重启
while(!AT_CMD("AT\r\n","OK\r\n"));;//是否正常使用
while(!AT_CMD(STA_MODE,"OK\r\n"));;//设置为STA模式
while(!AT_CMD(CONNECT_TO_WIFI,"OK\r\n"));;//连接热点
while(!AT_CMD(ONECON_MODE,"OK\r\n"));;//设置为单模式
while(!AT_CMD(CONNECT_TO_UDP,"CIPSTART:1")); ;//连接TCP服务端
while(!AT_CMD("AT+CIPSEND\r\n","OK\r\n"));//进入透传模式
Serial.println("connect UDP success");
}
void Connect_MQTT()
{
while(!AT_CMD(EXIT_MQTT,"OK\r\n"));//断开连接
while(!AT_CMD("AT+RESTORE\r\n","OK\r\n"));//回复出厂设置
while(!AT_CMD("AT+RST\r\n","OK\r\n"));//上电重启
while(!AT_CMD("AT\r\n","OK\r\n"));//是否正常使用
while(!AT_CMD(STA_MODE,"OK\r\n"));//设置为STA模式
while(!AT_CMD(CONNECT_TO_WIFI,"OK\r\n"));//连接热点
while(!AT_CMD(SET_MQTT,"OK\r\n"));//设置MQTT客户端参数
while(!AT_CMD(CONNECT_TO_MQTT,"MQTTCONNECTED:"));//连接MQTT服务器
while(!AT_CMD(SUB_TOPIC,"OK\r\n"));//订阅MQTT服务主题
//while(!AT_CMD(PUB_RAM,"OK\r\n"));//发布主题消息
//Serial.print("connect MQTT success");
}

View File

@@ -1,165 +0,0 @@
//**** 声明 ********************************************************************
/*******************************************************************************
* 下面来自互联开源程序,由深圳市大夏龙雀科技有限公司收集
* 方便用户参考学习,本公司不提供任何技术支持
* 程序仅供测试参考,不能应用在实际工程中,不一定能通过编译
* 公司网站 http://www.szdx-smart.com/
* 淘宝网址 https://shop184598174.taobao.com/?spm=a1z10.5-c-s.w12096189-21564973333.3.547b1176WCCDxR&scene=taobao_shop
*******************************************************************************/
/********************************************************************
* 文件名 WF24-UDP协议应用
* 描述 : 该文件实现WF24和单片机数据透传。
***********************************************************************/
/*
Name: UDP
Created: 2024/8/21
Author: WAM
*/
#include <Arduino.h>
#include <SPI.h>
#include <SoftwareSerial.h>
#include <stdio.h>
#include <string.h>
#define STA_MODE "AT+CWMODE=0\r\n"//设置为STA模式 连接热点
#define CONNECT_TO_WIFI "AT+CWJAP=DX-SMART,SMART@601\r\n"//DX-SMART为WIFI名称 SMART@601\r\n"//DX-SMART为WIFI名称 SMART@601为WIFI密码
#define ONECON_MODE "AT+CIPMODE=1\r\n"//设置为单连接模式 连接热点
#define CONNECT_TO_TCP "AT+CIPSTART=TCP,192.168.0.146,2347\r\n"//连接服务器 192.168.0.150为IP地址 2347为端口号 应和热点保持一致
#define CONNECT_TO_UDP "AT+CIPSTART=UDP,192.168.0.146,2345,1112,0\r\n"//连接服务器 192.168.0.150为IP地址 2345为端口号 1112 是模块设置的端口号 0 UDP固定目标模式
#define SET_MQTT "AT+MQTTLONGCLIENTID=WF-TEST2\r\n"//配置 MQTT 客户端所需的客户端 ID、用户名和密码 若 MQTT 服务器无用户名和密码验证,则模块可跳过用户名和密码的输入
#define CONNECT_TO_MQTT "AT+MQTTCONN=broker.emqx.io,1883,0\r\n"//连接MQTT 服务器 端口号 是否自动重连
#define SUB_TOPIC "AT+MQTTSUB=test-app,0\r\n"//订阅主题 test-app主题名 QOS服务质量
#define PUB_TOPIC "AT+MQTTPUBRAW=test-wf,10,0,0\r\n"//发布主题 test-wf主题名 10 消息长度 0 为QOS 0 retain 服务器是否为该主题存储一条最新的保留消息
#define EXIT_MQTT "AT+MQTTCLEAN\r\n" //断开MQTT连接
#define PUB_RAM "AT+MQTTPUBRAW=test-wf,32,0,0\r\n" //断开MQTT连接
SoftwareSerial WIFI(10, 11); // RX, TX 软件串口的波特率在Arduino会有一定限制 最好不要超过9600
int ledPin=3;//定义数字10接口
void setup() //初始化部分
{
Serial.begin(115200);//WF24使用硬件串口
WIFI.begin(9600);//作为调试
WIFI.listen();
Connect_UDP();
pinMode(ledPin,OUTPUT);//定义小灯接口为输出接口
digitalWrite(ledPin,HIGH);
}
String arr;
void loop() //主循环
{
// 从WF24读取数据并发送到PC串口
while(WIFI.available()>0)
{
char c = WIFI.read();
Serial.write(c);
}
//WF24接收到消息进行打印
while (Serial.available() > 0) {
arr = Serial.readStringUntil('\0');
Serial.print(arr);
while (Serial.available()) Serial.read();
}
}
bool AT_CMD(char * data,char * keyword)
{
while (Serial.available()) Serial.read();
int i=0;
char inchar;
char UNO_RECV[256] = {0};
unsigned long start = millis();
Serial.println(data); //发送AT指令
while(!Serial.available());//等待模块应答
delay(1500);
while (Serial.available())
{
UNO_RECV[i++] = Serial.read();
}
WIFI.print(UNO_RECV);
if(strstr(UNO_RECV,keyword)!=NULL)
{
if(strstr(data,"CWJAP")!=NULL)
delay(3000);//等待WIFI连接成功
if(strstr(data,"CIPSTART")!=NULL)
delay(1000);//等待连接TCP成功
if(strstr(data,"MQTTCONN")!=NULL)
delay(1000);//等待连接服务器成功
if(strstr(data,"MQTTPUBRAW")!=NULL)
{
}
while (Serial.available()) Serial.read();
WIFI.println("true\r\n");
return true;
}
else
{
WIFI.println("false\r\n");
while (Serial.available()) Serial.read();
return false;
}
}
void exit_Connect()
{
for(int i = 0;i<3;i++)
{
Serial.write('+');
}
delay(200);
for(int n = 0;n<3;n++)
{
Serial.write('+');
}
delay(1000);
}
void Connect_TCP()
{
exit_Connect();//确保模块为指令模式
while(!AT_CMD("AT+RESTORE\r\n","OK\r\n"));//回复出厂设置
while(!AT_CMD("AT+RST\r\n","OK\r\n"));//上电重启
while(!AT_CMD("AT\r\n","OK\r\n"));//是否正常使用
while(!AT_CMD(STA_MODE,"OK\r\n"));//设置为STA模式
while(!AT_CMD(CONNECT_TO_WIFI,"OK\r\n"));//连接热点
while(!AT_CMD(ONECON_MODE,"OK\r\n"));//设置为单模式
while(!AT_CMD(CONNECT_TO_TCP,"CIPSTART:1"));//连接TCP服务端
while(!AT_CMD("AT+CIPSEND\r\n","OK\r\n"));//进入透传模式
Serial.println("connect success");
}
void Connect_UDP()
{
exit_Connect();//确保模块为指令模式
while(!AT_CMD("AT+RESTORE\r\n","OK\r\n"));//回复出厂设置
while(!AT_CMD("AT+RST\r\n","OK\r\n"));//上电重启
while(!AT_CMD("AT\r\n","OK\r\n"));;//是否正常使用
while(!AT_CMD(STA_MODE,"OK\r\n"));;//设置为STA模式
while(!AT_CMD(CONNECT_TO_WIFI,"OK\r\n"));;//连接热点
while(!AT_CMD(ONECON_MODE,"OK\r\n"));;//设置为单模式
while(!AT_CMD(CONNECT_TO_UDP,"CIPSTART:1")); ;//连接TCP服务端
while(!AT_CMD("AT+CIPSEND\r\n","OK\r\n"));//进入透传模式
Serial.println("connect UDP success");
}
void Connect_MQTT()
{
while(!AT_CMD(EXIT_MQTT,"OK\r\n"));//断开连接
while(!AT_CMD("AT+RESTORE\r\n","OK\r\n"));//回复出厂设置
while(!AT_CMD("AT+RST\r\n","OK\r\n"));//上电重启
while(!AT_CMD("AT\r\n","OK\r\n"));//是否正常使用
while(!AT_CMD(STA_MODE,"OK\r\n"));//设置为STA模式
while(!AT_CMD(CONNECT_TO_WIFI,"OK\r\n"));//连接热点
while(!AT_CMD(SET_MQTT,"OK\r\n"));//设置MQTT客户端参数
while(!AT_CMD(CONNECT_TO_MQTT,"MQTTCONNECTED:"));//连接MQTT服务器
while(!AT_CMD(SUB_TOPIC,"OK\r\n"));//订阅MQTT服务主题
//while(!AT_CMD(PUB_RAM,"OK\r\n"));//发布主题消息
//Serial.print("connect MQTT success");
}

View File

@@ -1,233 +0,0 @@
<?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; *.md</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp; *.cc; *.cxx</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>11059200</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>
<Books>
<Book>
<Number>0</Number>
<Title>Data Sheet</Title>
<Path>DATASHTS\ATMEL\AT89C52_DS.PDF</Path>
</Book>
<Book>
<Number>1</Number>
<Title>Instruction Set Manual</Title>
<Path>DATASHTS\ATMEL\AT_C51ISM.PDF</Path>
</Book>
</Books>
<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>User</GroupName>
<tvExp>1</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>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\UART.C</PathWithFileName>
<FilenameWithoutPath>UART.C</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\oled.c</PathWithFileName>
<FilenameWithoutPath>oled.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

View File

@@ -1,405 +0,0 @@
<?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>AT89C52</Device>
<Vendor>Microchip</Vendor>
<Cpu>IRAM(0-0xFF) IROM(0-0x1FFF) CLOCK(24000000)</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>2980</DeviceId>
<RegisterFile>REGX52.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>Atmel\</RegisterFilePath>
<DBRegisterFilePath>Atmel\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>51Project</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>-p52</SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TP51.DLL</TargetDlgDll>
<TargetDlgDllArguments>-p52</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>2</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>0</HadXRAM>
<HadIROM>1</HadIROM>
<Moda2>0</Moda2>
<Moddp2>0</Moddp2>
<Modp2>0</Modp2>
<Mod517dp>0</Mod517dp>
<Mod517au>0</Mod517au>
<Mode2>0</Mode2>
<useCB>0</useCB>
<useXB>0</useXB>
<useL251>1</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>0x2000</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100</Size>
</IRA>
<XRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</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>..\User</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>User</GroupName>
<Files>
<File>
<FileName>STARTUP.A51</FileName>
<FileType>2</FileType>
<FilePath>.\STARTUP.A51</FilePath>
</File>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\main.c</FilePath>
</File>
<File>
<FileName>UART.C</FileName>
<FileType>1</FileType>
<FilePath>..\User\UART.C</FilePath>
</File>
<File>
<FileName>oled.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\oled.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
</Project>

View File

@@ -1,253 +0,0 @@
A51 MACRO ASSEMBLER STARTUP 08/13/2024 16:08:25 PAGE 1
MACRO ASSEMBLER A51 V8.2.7.0
OBJECT MODULE PLACED IN .\Objects\STARTUP.obj
ASSEMBLER INVOKED BY: D:\Keil5\C51\BIN\A51.EXE STARTUP.A51 SET(LARGE) DEBUG PRINT(.\Listings\STARTUP.lst) OBJECT(.\Objec
ts\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 08/13/2024 16:08:25 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 08/13/2024 16:08:25 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 08/13/2024 16:08:25 PAGE 4
190
195 ;</h>
0009 020000 F 196 LJMP ?C_START
197
198 END
A51 MACRO ASSEMBLER STARTUP 08/13/2024 16:08:25 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)

View File

@@ -1,246 +0,0 @@
C51 COMPILER V9.60.7.0 UART 08/13/2024 16:08:25 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\Objects\UART.obj
COMPILER INVOKED BY: D:\Keil5\C51\BIN\C51.EXE ..\User\UART.C LARGE OMF2 OPTIMIZE(8,SPEED) BROWSE INCDIR(..\User) DEBUG P
-RINT(.\Listings\UART.lst) OBJECT(.\Objects\UART.obj)
line level source
1 #include "UART.h"
2 #include <string.h>
3 #include "oled.h"
4 #include <stdio.h>
5
6 // 用于存储接收数据的数组
7 unsigned char rxBuffer[ARRAY_SIZE];
8 unsigned int rxIndex = 0; // 接收数据的索引
9 unsigned int rx_flag=0;
10 extern unsigned int CONNECT_FLEG;//连接标志
11 // 初始化串口
12 void Serial_Init() {
13 1 SCON = 0x50; // 设置为模式18位数据可变波特率
14 1 TMOD &= 0x0F; // 清除定时器1模式位
15 1 TMOD |= 0x20; // 设置定时器1为8位自动重装模式
16 1 TH1 = TL1 = 256 - (11059200 / 12 / 32) / BAUDRATE; // 设置波特率
17 1 TR1 = 1; // 启动定时器1
18 1 ES = 1; // 开启串口中断
19 1 EA = 1; // 开启全局中断
20 1 }
21
22 void Delay(unsigned int xms)
23 {
24 1 unsigned char i, j;
25 1 while(xms--)
26 1 {
27 2 i = 2;
28 2 j = 239;
29 2 do
30 2 {
31 3 while (--j);
32 3 } while (--i);
33 2 }
34 1 }
35
36 void buff_memset(void)
37 {
38 1 memset(rxBuffer,0,64);
39 1 rxIndex=0;
40 1 rx_flag = 0;
41 1 }
42 unsigned int WIFI_CheckAck(char* src, char* dest, int timeout)
43 {
44 1 char *check = NULL;
45 1 //清空缓冲
46 1 buff_memset();
47 1
48 1 UART_sentString(src);
49 1 timeout=timeout/10;//10ms处理一次
50 1 while(timeout--)
51 1 {
52 2 Delay(10);//延时1ms
53 2 if(rx_flag==1)
54 2 {
C51 COMPILER V9.60.7.0 UART 08/13/2024 16:08:25 PAGE 2
55 3 check = strstr(rxBuffer,dest);
56 3 if(check != NULL)
57 3 {
58 4 buff_memset();//数据有误 清空
59 4 return 1;
60 4 }
61 3 }
62 2 }
63 1 buff_memset();//数据有误 清空
64 1 return 0;//超时
65 1 }
66
67 sbit LED = P2^5;
68 sbit motor1 = P2^6;
69 sbit motor2 = P2^7;
70
71 void CONNECT_TX_Control(void)
72 {
73 1 char *ptr = NULL;
74 1 int number;
75 1 if (CONNECT_FLEG)
76 1 {
77 2 if(rx_flag)
78 2 {
79 3 if(strstr(rxBuffer,"192.168.0")!=NULL)
80 3 {
81 4 ptr = strrchr((char*)rxBuffer,','); // 以最后一个,为准后面为数据
82 4
83 4 if(strlen(ptr)-3==1) //判断接收到为一位数据 ,*\r\n
84 4 {
85 5 number = ptr[1]-'0';
86 5 switch(number)
87 5 {
88 6 case 1: LED = 0 ; break;
89 6 case 2: LED = 1; break;
90 6 case 3:OLED_Show(); break;
91 6 case 4:OLED_Clear(); break;
92 6 case 5:motor1=0;motor2=1; break;
93 6 case 6:motor1=1;motor2=0; break;
94 6 case 7:motor1=0;motor2=0 ; break;
95 6 default: return;
96 6 }
97 5 }
98 4 }
99 3 else if(strstr((char *)rxBuffer,"RECV:test-app")!=NULL)
100 3 {
101 4 ptr = strrchr((char*)rxBuffer,','); // 以最后一个,为准后面为数据
102 4
103 4 if(strlen(ptr)-3==1) //判断接收到为一位数据 ,*\r\n
104 4 {
105 5 number = ptr[1]-'0';
106 5 switch(number)
107 5 {
108 6 case 1: LED = 0 ; break;
109 6 case 2: LED = 1; break;
110 6 case 3:OLED_Show(); break;
111 6 case 4:OLED_Clear(); break;
112 6 case 5:motor1=0;motor2=1; break;
113 6 case 6:motor1=1;motor2=0; break;
114 6 case 7:motor1=0;motor2=0 ; break;
115 6 default: return;
116 6 }
C51 COMPILER V9.60.7.0 UART 08/13/2024 16:08:25 PAGE 3
117 5 }
118 4 }
119 3 }
120 2 buff_memset();//数据有误 清空
121 2 }
122 1 }
123 void CONNECT_TO_TCP(unsigned char* id,unsigned char *password)
124 {
125 1 unsigned char buf[50];
126 1 WIFI_CheckAck("+++",id,1500); //确保其退出透传
127 1 //while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
128 1 while(!WIFI_CheckAck("AT\r\n","OK",1000));
129 1 while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000));
130 1 sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
131 1 while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));
132 1 while(!WIFI_CheckAck("AT+CIPMODE=1\r\n","OK",1000)!=0);
133 1 while(!WIFI_CheckAck("AT+CIPSTART=TCP,192.168.0.146,2347\r\n","+CIPSTART:1",3000));
134 1 while(!WIFI_CheckAck("AT+CIPSEND\r\n","OK",1000));
135 1 UART_sentString(":Connected\r\n");
136 1 CONNECT_FLEG = 1;
137 1 }
138 void CONNECT_TO_UDP(unsigned char* id,unsigned char *password)
139 {
140 1 unsigned char buf[50];
141 1
142 1 WIFI_CheckAck("+++",id,1500); //确保其退出透传
143 1 //while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
144 1 while(!WIFI_CheckAck("AT\r\n","OK",1000));
145 1 while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000));
146 1 sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
147 1 while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));
148 1 while(!WIFI_CheckAck("AT+CIPMODE=1\r\n","OK",1000)!=0);
149 1 while(!WIFI_CheckAck("AT+CIPSTART=UDP,192.168.0.146,2345,1112,0\r\n","+CIPSTART:1",3000)); //192.168.0.15
-0,2345为IP地址 2345 端口号1112 是模块设置的端口号 0 UDP固定目标模式
150 1 while(!WIFI_CheckAck("AT+CIPSEND\r\n","OK",1000));
151 1 UART_sentString(":Connected\r\n");
152 1 CONNECT_FLEG = 1;
153 1 }
154 void CONNECT_TO_MQTT(unsigned char* id,unsigned char *password)
155 {
156 1 unsigned char buf[50];
157 1 while(!WIFI_CheckAck("AT+MQTTCLEAN\r\n","OK",1000));
158 1 //while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
159 1 while(!WIFI_CheckAck("AT\r\n","OK",1000));
160 1 while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000)); //STA模式
161 1 sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
162 1 while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));//连接WIFI
163 1 while(!WIFI_CheckAck("AT+MQTTLONGCLIENTID=WF-TEST2\r\n","OK",1000)!=0);//配置 MQTT 客户端所需的客户端 ID<49>
-⒂没<E29282><E6B2A1>兔苈<E58594>
164 1 while(!WIFI_CheckAck("AT+MQTTCONN=broker.emqx.io,1883,0\r\n","MQTTCONNECTED:",2000)!=0);//连接 MQTT 服务<E69C8D>
-<2D>
165 1 while(!WIFI_CheckAck("AT+MQTTSUB=test-app,0\r\n","OK",2000)!=0);//订阅主题 test-app
166 1 while(!WIFI_CheckAck("AT+MQTTPUBRAW=test-w,32,0,0\r\n","OK",2000)!=0);
167 1 UART_sentString("MQTT_Connected\r\n");
168 1 buff_memset();
169 1 CONNECT_FLEG = 1;
170 1 }
171
172 void UART_SendByte(unsigned char Byte)
173 {
174 1 SBUF=Byte;
175 1 while(!TI);
C51 COMPILER V9.60.7.0 UART 08/13/2024 16:08:25 PAGE 4
176 1 TI=0;
177 1 }
178
179 void UART_sentString(char *str)
180 {
181 1
182 1 while(*str){
183 2 UART_SendByte(*str);
184 2 str++;
185 2 }
186 1 }
187 // 串口接收中断服务程序
188 void Serial_ISR() interrupt 4 {
189 1 if (RI) {
190 2 RI = 0; // 清除接收中断标志
191 2
192 2
193 2 rxBuffer[rxIndex++] = SBUF; // 存储接收到的数据
194 2 if(rxBuffer[rxIndex-1]=='\n')
195 2 {
196 3 rx_flag=1;
197 3 }
198 2 if(rxIndex==64)
199 2 {
200 3 rxIndex=0;
201 3 rx_flag=1;
202 3 }
203 2
204 2 }
205 1 }
206
207
208
209
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1827 ----
CONSTANT SIZE = 379 ----
XDATA SIZE = 68 184
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

View File

@@ -1,88 +0,0 @@
C51 COMPILER V9.60.7.0 MAIN 08/13/2024 16:08:25 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Objects\main.obj
COMPILER INVOKED BY: D:\Keil5\C51\BIN\C51.EXE ..\User\main.c LARGE OMF2 OPTIMIZE(8,SPEED) BROWSE INCDIR(..\User) DEBUG P
-RINT(.\Listings\main.lst) OBJECT(.\Objects\main.obj)
line level source
1 #include <REGX52.H> // STC89C52RC的寄存器定义
2 #include "UART.h"
3 #include "string.h"
4 #include "stdio.h"
5 #include "oled.h"
6 extern unsigned int rxIndex;
7 extern unsigned char rxBuffer[ARRAY_SIZE];
8 extern unsigned int rx_flag;
9 unsigned int CONNECT_FLEG;//连接标志
10 // 主函数
11 unsigned char conver[64];
12 char *ptr = NULL;
13 void MQTT_CONVER(void);
14 void main() {
15 1 Serial_Init(); // 初始化串口
16 1 OLED_Init();
17 1 CONNECT_TO_MQTT("DX-SMART","SMART@601");
18 1 while (1) {
19 2
20 2 // 主循环,可以添加其他任务
21 2 MQTT_CONVER();
22 2 }
23 1 }
24
25 void TCP_UDP_CONVER(void)
26 {
27 1 if (rx_flag)
28 1 {
29 2 UART_sentString(rxBuffer);
30 2 CONNECT_TX_Control();
31 2 rxIndex = 0; // 重置索引,准备下一次接收
32 2 memset(rxBuffer,0,ARRAY_SIZE); //清空缓冲区
33 2 }
34 1 }
35 void MQTT_CONVER(void)
36 {
37 1 if (rx_flag)
38 1 {
39 2 if(strstr(rxBuffer,"RECV:test-app")!=NULL)
40 2 {
41 3 ptr = strrchr(rxBuffer,',');
42 3 memcpy(conver,ptr,*(ptr-1));
43 3 while(!WIFI_CheckAck("AT+MQTTPUBRAW=test-w,32,0,0\r\n","OK",2000)!=0);
44 3 buff_memset();//数据有误 清空
*** WARNING C206 IN LINE 44 OF ..\User\main.c: 'buff_memset': missing function-prototype
45 3 UART_sentString(conver);
46 3
47 3 }
48 2
49 2 }
50 1 }
51 void MQTT_CONTROL(void)
52 {
53 1 if (rx_flag)
C51 COMPILER V9.60.7.0 MAIN 08/13/2024 16:08:25 PAGE 2
54 1 {
55 2 CONNECT_TX_Control();
56 2 }
57 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 240 ----
CONSTANT SIZE = 66 ----
XDATA SIZE = 69 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)

View File

@@ -1,287 +0,0 @@
C51 COMPILER V9.60.7.0 OLED 08/13/2024 16:08:25 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE OLED
OBJECT MODULE PLACED IN .\Objects\oled.obj
COMPILER INVOKED BY: D:\Keil5\C51\BIN\C51.EXE ..\User\oled.c LARGE OMF2 OPTIMIZE(8,SPEED) BROWSE INCDIR(..\User) DEBUG P
-RINT(.\Listings\oled.lst) OBJECT(.\Objects\oled.obj)
line level source
1 #include "oled.h"
2 #include "oledfont.h"
3
4 void delay_ms(unsigned int ms)
5 {
6 1 unsigned int a;
7 1 while(ms)
8 1 {
9 2 a=1800;
10 2 while(a--);
11 2 ms--;
12 2 }
13 1 return;
14 1 }
15 void OLED_Show()
16 {
17 1 OLED_ShowCHinese(16,0,0);
18 1 OLED_ShowCHinese(32,0,1);
19 1 OLED_ShowCHinese(48,0,2);
20 1 OLED_ShowCHinese(64,0,3);
21 1 OLED_ShowCHinese(80,0,4);
22 1 OLED_ShowCHinese(96,0,5);
23 1 OLED_ShowString(32,2,"WF24");
24 1
25 1 }
26 #if OLED_MODE==1
//向SSD1106写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{
DATAOUT(dat);
if(cmd)
OLED_DC_Set();
else
OLED_DC_Clr();
OLED_CS_Clr();
OLED_WR_Clr();
OLED_WR_Set();
OLED_CS_Set();
OLED_DC_Set();
}
#else
44 //向SSD1306写入一个字节。
45 //dat:要写入的数据/命令
46 //cmd:数据/命令标志 0,表示命令;1,表示数据;
47 void OLED_WR_Byte(u8 dat,u8 cmd)
48 {
49 1 u8 i;
50 1 if(cmd)
51 1 OLED_DC_Set();
52 1 else
53 1 OLED_DC_Clr();
54 1 OLED_CS_Clr();
C51 COMPILER V9.60.7.0 OLED 08/13/2024 16:08:25 PAGE 2
55 1 for(i=0;i<8;i++)
56 1 {
57 2 OLED_SCLK_Clr();
58 2 if(dat&0x80)
59 2 {
60 3 OLED_SDIN_Set();
61 3 }
62 2 else
63 2 OLED_SDIN_Clr();
64 2 OLED_SCLK_Set();
65 2 dat<<=1;
66 2 }
67 1 OLED_CS_Set();
68 1 OLED_DC_Set();
69 1 }
70 #endif
71 void OLED_Set_Pos(unsigned char x, unsigned char y)
72 {
73 1 OLED_WR_Byte(0xb0+y,OLED_CMD);
74 1 OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
75 1 OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);
76 1 }
77 //开启OLED显示
78 void OLED_Display_On(void)
79 {
80 1 OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
81 1 OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
82 1 OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
83 1 }
84 //关闭OLED显示
85 void OLED_Display_Off(void)
86 {
87 1 OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
88 1 OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF
89 1 OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF
90 1 }
91 //清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
92 void OLED_Clear(void)
93 {
94 1 u8 i,n;
95 1 for(i=0;i<8;i++)
96 1 {
97 2 OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址0~7
98 2 OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址
99 2 OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址
100 2 for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
101 2 } //更新显示
102 1 }
103
104
105 //在指定位置显示一个字符,包括部分字符
106 //x:0~127
107 //y:0~63
108 //mode:0,反白显示;1,正常显示
109 //size:选择字体 16/12
110 void OLED_ShowChar(u8 x,u8 y,u8 chr)
111 {
112 1 unsigned char c=0,i=0;
113 1 c=chr-' ';//得到偏移后的值
114 1 if(x>Max_Column-1){x=0;y=y+2;}
115 1 if(SIZE ==16)
116 1 {
C51 COMPILER V9.60.7.0 OLED 08/13/2024 16:08:25 PAGE 3
117 2 OLED_Set_Pos(x,y);
118 2 for(i=0;i<8;i++)
119 2 OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
120 2 OLED_Set_Pos(x,y+1);
121 2 for(i=0;i<8;i++)
122 2 OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
123 2 }
124 1
125 1 }
126 //m^n函数
127 u32 oled_pow(u8 m,u8 n)
128 {
129 1 u32 result=1;
130 1 while(n--)result*=m;
131 1 return result;
132 1 }
133 //显示2个数字
134 //x,y :起点坐标
135 //len :数字的位数
136 //size:字体大小
137 //mode:模式 0,填充模式;1,叠加模式
138 //num:数值(0~4294967295);
139 void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
140 {
141 1 u8 t,temp;
142 1 u8 enshow=0;
143 1 for(t=0;t<len;t++)
144 1 {
145 2 temp=(num/oled_pow(10,len-t-1))%10;
146 2 if(enshow==0&&t<(len-1))
147 2 {
148 3 if(temp==0)
149 3 {
150 4 OLED_ShowChar(x+(size2/2)*t,y,' ');
151 4 continue;
152 4 }else enshow=1;
153 3
154 3 }
155 2 OLED_ShowChar(x+(size2/2)*t,y,temp+'0');
156 2 }
157 1 }
158 //显示一个字符号串
159 void OLED_ShowString(u8 x,u8 y,u8 *chr)
160 {
161 1 unsigned char j=0;
162 1 while (chr[j]!='\0')
163 1 { OLED_ShowChar(x,y,chr[j]);
164 2 x+=8;
165 2 if(x>120){x=0;y+=2;}
166 2 j++;
167 2 }
168 1 }
169 //显示汉字
170 void OLED_ShowCHinese(u8 x,u8 y,u8 no)
171 {
172 1 u8 t,adder=0;
173 1 OLED_Set_Pos(x,y);
174 1 for(t=0;t<16;t++)
175 1 {
176 2 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
177 2 adder+=1;
178 2 }
C51 COMPILER V9.60.7.0 OLED 08/13/2024 16:08:25 PAGE 4
179 1 OLED_Set_Pos(x,y+1);
180 1 for(t=0;t<16;t++)
181 1 {
182 2 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
183 2 adder+=1;
184 2 }
185 1 }
186 /***********功能描述显示显示BMP图片128×64起始点坐标(x,y),x的范围0127y为页的范围07****************
-*/
187 void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[
-])
188 {
189 1 unsigned int j=0;
190 1 unsigned char x,y;
191 1
192 1 if(y1%8==0) y=y1/8;
193 1 else y=y1/8+1;
194 1 for(y=y0;y<y1;y++)
195 1 {
196 2 OLED_Set_Pos(x0,y);
197 2 for(x=x0;x<x1;x++)
198 2 {
199 3 OLED_WR_Byte(BMP[j++],OLED_DATA);
200 3 }
201 2 }
202 1 }
203
204
205 //初始化SSD1306
206 void OLED_Init(void)
207 {
208 1
209 1
210 1
211 1 OLED_RST_Set();
212 1 delay_ms(100);
213 1 OLED_RST_Clr();
214 1 delay_ms(100);
215 1 OLED_RST_Set();
216 1 OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
217 1 OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
218 1 OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
219 1 OLED_WR_Byte(0x40,OLED_CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
220 1 OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
221 1 OLED_WR_Byte(0xCF,OLED_CMD); // Set SEG Output Current Brightness
222 1 OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常
223 1 OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常
224 1 OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
225 1 OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
226 1 OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
227 1 OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
228 1 OLED_WR_Byte(0x00,OLED_CMD);//-not offset
229 1 OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
230 1 OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
231 1 OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
232 1 OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
233 1 OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
234 1 OLED_WR_Byte(0x12,OLED_CMD);
235 1 OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
236 1 OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
237 1 OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
238 1 OLED_WR_Byte(0x02,OLED_CMD);//
C51 COMPILER V9.60.7.0 OLED 08/13/2024 16:08:25 PAGE 5
239 1 OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
240 1 OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
241 1 OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
242 1 OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7)
243 1 OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
244 1
245 1 OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/
246 1 OLED_Clear();
247 1 OLED_Set_Pos(0,0);
248 1 }
249
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1037 ----
CONSTANT SIZE = 2461 ----
XDATA SIZE = ---- 27
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

View File

@@ -1,58 +0,0 @@
<html>
<body>
<pre>
<h1>µVision Build Log</h1>
<h2>Tool Versions:</h2>
IDE-Version: ¦ÌVision V5.38.0.0
Copyright (C) 2022 ARM Ltd and ARM Germany GmbH. All rights reserved.
License Information: 1 1, 21, LIC=TI4EI-T6WYP-WQ90S-LZLT9-S04QZ-NNNW4
Tool Versions:
Toolchain: PK51 Prof. Developers Kit Version: 9.60.7.0
Toolchain Path: D:\Keil5\C51\BIN
C Compiler: C51.exe V9.60.7.0
Assembler: A51.exe V8.2.7.0
Linker/Locator: LX51.exe V4.66.100.0
Library Manager: LIBX51.exe V4.30.1.0
Hex Converter: OHX51.exe V1.47.0.0
CPU DLL: S8051.DLL V3.125.1.0
Dialog DLL: DP51.DLL V2.69.0.0
<h2>Project:</h2>
F:\WF24DEMO\C52_TO_WF24\MQTT\C52\Project\51Project.uvproj
Project File Date: 08/07/2024
<h2>Output:</h2>
Rebuild target 'Target 1'
assembling STARTUP.A51...
compiling main.c...
..\User\main.c(44): warning C206: 'buff_memset': missing function-prototype
compiling UART.C...
compiling oled.c...
linking...
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: TCP_UDP_CONVER/MAIN
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: MQTT_CONTROL/MAIN
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: _CONNECT_TO_TCP/UART
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: _CONNECT_TO_UDP/UART
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: OLED_DISPLAY_ON/OLED
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: OLED_DISPLAY_OFF/OLED
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: _OLED_SHOWNUM/OLED
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: _OLED_DRAWBMP/OLED
*** WARNING L25: DATA TYPES DIFFERENT
SYMBOL: buff_memset
MODULE: .\Objects\main.obj (MAIN)
DEFINED: .\Objects\UART.obj (UART)
Program Size: data=15.1 xdata=377 const=2906 code=5155
creating hex file from ".\Objects\51Project"...
".\Objects\51Project" - 0 Error(s), 10 Warning(s).
Build Time Elapsed: 00:00:00
</pre>
</body>
</html>

View File

@@ -1,505 +0,0 @@
:10000000020F10AC07ED24B0FFE4FD121268EC54AF
:10001000F0C4540F4410FF121268EC540F4401FF57
:1000200002126802109AE508243BF582E43400F5D8
:1000300083E005082290003830070390003BE47508
:10004000F0011205CE0204812000E97F2ED200804B
:1000500018EF540F2490D43440D4FF30040BEF2415
:10006000BFB41A0050032461FFE5096002150905B9
:100070000CE50C7002050B30070E900038E475F0AB
:10008000011205CEEF0205A60212E57403D2078025
:1000900003E4C207F5089000381205E5E4F509F518
:1000A0000BF50CE50960077F2012006980F5750AE1
:1000B000FFC201C200C202C203C205C206C20812C8
:1000C0000035FF700D3007057F0012007AAF0CAECF
:1000D0000B22B4255FC2D5C204120035FF24D0B470
:1000E0000A00501A75F00A780930D50508B6FF01E4
:1000F00006C6A426F620D5047002D20380D924CFE8
:10010000B41A00EF5004C2E5D20402027BD201808F
:10011000C6D20080C0D20280BCD2D580BAD20580BF
:10012000B47F201200692002077401B5090040F174
:10013000120026FF1200690200A3D208D2068095A1
:10014000120026FB120026FA120026F94A4B70060E
:10015000794C7A037BFF20022EE509602A7E008E0F
:100160008275830012049A60060EEE650A70F0C272
:10017000D5EBC0E0EAC0E0E9C0E0EE1202C2D0E098
:10018000F9D0E0FAD0E0FB120481FF60AAEBC0E0F6
:10019000EAC0E0E9C0E0120069D0E02401F9D0E053
:1001A0003400FAD0E0FBE50A0460DCD50AD9808788
:1001B0007BFF7A0279BED202809C79108002790896
:1001C000C206C2088008D2D5790A8004790AC2D54D
:1001D000E50A047002F50AE4FAFDFEFF120026FCAF
:1001E0007B08200113120026FD7B1030000A12004C
:1001F00026FE120026FF7B20EC3382D592D55013C9
:10020000C3E43000069FFFE49EFEE42001039DFD51
:10021000E49CFCE4CBF8C201EC700CCFCECDCCE872
:1002200024F8F870F38017C3EF33FFEE33FEED339D
:10023000FDEC33FCEB33FB994002FB0FD8E9EB30CC
:100240000105F8D0E0C448B201C0E00AEC4D4E4FC1
:1002500078207B0070C2EAB50A0040BCC0E0120200
:10026000C4D0F0D0E0200104C4C0E0C4B201C0F0AA
:10027000120052D0F0D5F0EB0200A31205EE0140BF
:100280005301BA5801114C010D4201BE4F01C64441
:1002900001C64901264301CC5501B04601B04501D4
:1002A000B047036C5001152D01192E013C2B011D87
:1002B00023013A2003552A00D548000001343F3F6E
:1002C0003F00790AA2D5200314300509B9100204B1
:1002D00004B9080104A2D5200602500104200268D6
:1002E0009202B509005034C0E07F203003197F30FE
:1002F000A20272067205500F12031BC202C206C28E
:1003000005C2087F30800F300503E9C0E0120069A4
:10031000300503D0E0F9D0E0B509CC3005177F30C7
:10032000B9100C1200697F583004077F788003B938
:1003300008031200693002057F2D0200697F20202A
:1003400008F87F2B2006F322920280CF286E756C6E
:100350006C2900D2011200263001F8C20178093060
:10036000D50108F60200D52D504349581200262425
:1003700003B405004001E49003679312005A743AF5
:1003800012005AD2037509040201BAE709F608DF20
:10039000FA8046E709F208DFFA803E88828C83E71C
:1003A00009F0A3DFFA8032E309F608DFFA8078E388
:1003B00009F208DFFA807088828C83E309F0A3DFFA
:1003C000FA806489828A83E0A3F608DFFA8058897C
:1003D000828A83E0A3F208DFFA804C80D280FA8020
:1003E000C680D4806980F28033801080A680EA8045
:1003F0009A80A880DA80E280CA803389828A83EC7E
:10040000FAE493A3C8C582C8CCC583CCF0A3C8C501
:1004100082C8CCC583CCDFE9DEE7800D89828A8380
:10042000E493A3F608DFF9ECFAA9F0EDFB22898248
:100430008A83ECFAE0A3C8C582C8CCC583CCF0A3FC
:10044000C8C582C8CCC583CCDFEADEE880DB898200
:100450008A83E493A3F208DFF980CC88F0EF60018F
:100460000E4E60C388F0ED2402B4040050B9F5824A
:10047000EB2402B4040050AF23234582239003DB16
:1004800073BB010689828A83E0225002E722BBFE09
:1004900002E32289828A83E49322BB010CE582294C
:1004A000F582E5833AF583E0225006E92582F8E6F5
:1004B00022BBFE06E92582F8E222E58229F582E5E3
:1004C000833AF583E49322EF8DF0A4A8F0CF8CF06B
:1004D000A428CE8DF0A42EFE22BC000BBE0029EF76
:1004E0008DF084FFADF022E4CCF875F008EF2FFF1B
:1004F000EE33FEEC33FCEE9DEC984005FCEE9DFEE9
:100500000FD5F0E9E4CEFD22EDF8F5F0EE8420D22F
:100510001CFEADF075F008EF2FFFED33FD4007989E
:100520005006D5F0F222C398FD0FD5F0EA22C2D5CD
:10053000EC30E709B2D5E4C39DFDE49CFCEE30E766
:1005400015B2D5E4C39FFFE49EFE1204D9C3E49D17
:10055000FDE49CFC80031204D930D507C3E49FFF5F
:10056000E49EFE22A3F8E0C5F025F0F0E5821582B6
:1005700070021583E0C838F0E822EF4E6012EF6099
:10058000010EEDBB010B89828A83F0A3DFFCDEFA4A
:100590002289F05007F709DFFCA9F022BBFEFCF32B
:1005A00009DFFCA9F022BB010689828A83F0225070
:1005B00002F722BBFE01F322C5F0F8A3E028F0C544
:1005C000F0F8E582158270021583E038F022F8E039
:1005D000FBA3A3E0F925F0F0E582158270021583F4
:1005E000E0FA38F022EBF0A3EAF0A3E9F022D0839E
:1005F000D082F8E4937012740193700DA3A393F862
:10060000740193F5828883E4737402936860EFA3A6
:10061000A3A380DF900172E4F0A3F0A3F090006048
:10062000E07002A3E070030207AE9000E7E0700202
:10063000A3E070030207AB90004674FFF0A3741DA3
:10064000F0A374C0F07B017A0079A5120C5DE94A31
:100650004B70030206F17B017A0079A57D2C121004
:1006600020900172EBF0A3EAF0A3E9F01213C5EFBA
:1006700024FDFFEE34FFFEEF64014E60030207AB82
:10068000900172E0FBA3E0FAA3E0F99000011204EC
:100690009AFF3395E0FEEF24D0FFEE34FFFE900189
:1006A00075F0A3EFF0EE60030207AEEF14B407009D
:1006B00040030207AE9006C375F003A4C58325F07E
:1006C000C583730206D80206DD0206E20206E502D1
:1006D00006E80206EB0206EEC2A50207ABD2A502AF
:1006E00007AB02079102079602079B0207A10207C8
:1006F000A790004674FFF0A3741DF0A374CAF07BAA
:10070000017A0079A5120C5DE94A4B70030207AB30
:100710007B017A0079A57D2C121020900172EBF0FC
:10072000A3EAF0A3E9F01213C5EF24FDFFEE34FFB6
:10073000FEEF64014E7074900172E0FBA3E0FAA337
:10074000E0F990000112049AFF3395E0FEEF24D007
:10075000FFEE34FFFE900175F0A3EFF0EE704FEF67
:1007600014B40700504890077475F003A4C583259E
:10077000F0C5837302078902078D0207910207966D
:1007800002079B0207A10207A7C2A5801ED2A5806F
:100790001A12121580151212BC8010C2A6D2A780A0
:1007A0000AD2A6C2A78004C2A6C2A712134C2290E6
:1007B0000000EBF0A3EAF0A3E9F090003B74FFF037
:1007C000A3741DF0A374E1F0A37403F0A374E8F024
:1007D0007BFF7A1E7993120BBAEF4E60DD120B9EEF
:1007E000EF4E60F990003B74FFF0A3741DF0A3740A
:1007F000E1F0A37407F0A374D0F07BFF7A1D79E4D5
:10080000120BBAEF4E60DD90003B74FFF0A3741D35
:10081000F0A374F2F0900000E0F9A3E0FAA3E090F6
:10082000003EC9F0A3EAF0A3E9F0900003E0F9A3C9
:10083000E0FAA3E0900041C9F0A3EAF0A3E9F07B5D
:10084000017A00790612008B90003B74FFF0A374CC
:100850001EF0A37403F0A37413F0A37488F07B015B
:100860007A007906120BBAEF4E60DD90003B74FF00
:10087000F0A3741DF0A374E1F0A37403F0A374E873
:10088000F07BFF7A1E79A2120BBAEF4E7F00700246
:100890007F01EF70D690003B74FFF0A3741EF0A3AD
:1008A00074E5F0A37407F0A374D0F07BFF7A1E798F
:1008B000C1120BBAEF4E7F0070027F01EF70D6902D
:1008C000003B74FFF0A3741DF0A374E1F0A3740760
:1008D000F0A374D0F07BFF7A1E79F4120BBAEF4EBE
:1008E0007F0070027F01EF70D690003B74FFF0A391
:1008F000741DF0A374E1F0A37407F0A374D0F07B2F
:10090000FF7A1F790C120BBAEF4E7F0070027F0145
:10091000EF70D67BFF7A1F792A12138712134C903F
:100920000060E4F0A304F0229000E9EBF0A3EAF009
:10093000A3E9F09000E9E0F9A3E0FAA3E090003B1E
:10094000C9F0A3EAF0A3E9F0A37405F0A374DCF006
:100950007BFF7A1D79D8120BBA120B9EEF4E60F90D
:1009600090003B74FFF0A3741DF0A374E1F0A37436
:1009700007F0A374D0F07BFF7A1D79E4120BBAEF75
:100980004E60DD90003B74FFF0A3741DF0A374F281
:10099000F09000E9E0F9A3E0FAA3E090003EC9F08E
:1009A000A3EAF0A3E9F09000ECE0F9A3E0FAA3E0F9
:1009B000900041C9F0A3EAF0A3E9F07B017A007945
:1009C000EF12008B90003B74FFF0A3741EF0A37431
:1009D00003F0A37413F0A37488F07B017A0079EF1D
:1009E000120BBAEF4E60DD90003B74FFF0A3741D54
:1009F000F0A374E1F0A37403F0A374E8F07BFF7A32
:100A00001E790D120BBAEF4E7F0070027F01EF705E
:100A1000D690003B74FFF0A3741EF0A37441F0A3C2
:100A2000740BF0A374B8F07BFF7A1E791C120BBA1A
:100A3000EF4E60DD90003B74FFF0A3741DF0A374D3
:100A4000E1F0A37403F0A374E8F07BFF7A1E794D04
:100A5000120BBAEF4E60DD121381900060E4F0A338
:100A600004F022900121EBF0A3EAF0A3E9F0900159
:100A700021E0F9A3E0FAA3E090003BC9F0A3EAF07B
:100A8000A3E9F0A37405F0A374DCF07BFF7A1D7971
:100A9000D8120BBA120B9EEF4E60F990003B74FF18
:100AA000F0A3741DF0A374E1F0A37407F0A374D055
:100AB000F07BFF7A1D79E4120BBAEF4E60DD9000F7
:100AC0003B74FFF0A3741DF0A374F2F0900121E0D9
:100AD000F9A3E0FAA3E090003EC9F0A3EAF0A3E98D
:100AE000F0900124E0F9A3E0FAA3E0900041C9F0FE
:100AF000A3EAF0A3E9F07B017A01792712008B9039
:100B0000003B74FFF0A3741EF0A37403F0A37413EE
:100B1000F0A37488F07B017A017927120BBAEF4EAB
:100B200060DD90003B74FFF0A3741DF0A374E1F04E
:100B3000A37403F0A374E8F07BFF7A1E790D120B07
:100B4000BAEF4E7F0070027F01EF70D690003B74C9
:100B5000FFF0A3741EF0A37441F0A3740BF0A37410
:100B6000B8F07BFF7A1E7967120BBAEF4E60DD900A
:100B7000003B74FFF0A3741DF0A374E1F0A37403B1
:100B8000F0A374E8F07BFF7A1E794D120BBAEF4E9A
:100B900060DD121381900060E4F0A304F022900065
:100BA0003B74FFF0A3741DF0A374E1F0A37403F091
:100BB000A374E8F07BFF7A1D79DC900038EBF0A39A
:100BC000EAF0A3E9F0900040E4F0A3F0A3F01213E0
:100BD0004C900038E0FBA3E0FAA3E0F912138790F1
:100BE000003EE0FEA3E0FF7C007D0A12052E90008F
:100BF0003EEEF0A3EFF090003E74FFF5F0120564B6
:100C000045F060527F0A7E001213B09000E7E0705A
:100C100004A3E0640170DF90003BE0F9A3E0FAA3D5
:100C2000E0900046C9F0A3EAF0A3E9F07B017A0066
:100C300079A5120C5D900040EBF0A3EAF0A3E9F077
:100C4000900040E0FBA3E0FAA3E04A4B60A8121337
:100C50004C7E007F012212134CE4FEFF22900043E1
:100C6000EBF0A3EAF0A3E9F0A3E0FBA3E0FAA3E032
:100C7000F91204817003020D09900043E0FBA3E028
:100C8000FAA3E0F91204817003020D15900046E00A
:100C9000F9A3E0FAA3E0A3C9F0A3EAF0A3E9F09076
:100CA0000043A3E0FAA3E0F990004CEBF0A3EAF0D4
:100CB000A3E9F0900049E0FBA3E0FAA3E0F91204F5
:100CC00081FF602690004CE0FBA3E0FAA3E0F9125C
:100CD00004816F701590004A75F0011205B89000FC
:100CE0004DE475F0011205B880C9900049E0FBA3FE
:100CF000E0FAA3E0F91204817002800D900044E450
:100D000075F0011205B8020C79900043E0FBA3E0F6
:100D1000FAA3E0F9227B007A00790022D2A27F6454
:100D20007E00121367C2A27F647E00121367D2A2F4
:100D3000E4FD7FAE121268E4FF1212687F101212F7
:100D4000687F401212687F811212687FCF1212688A
:100D50007FA11212687FC81212687FA61212687FE4
:100D6000A81212687F3F1212687FD3121268E4FF44
:100D70001212687FD51212687F801212687FD91212
:100D800012687FF11212687FDA1212687F12121253
:100D9000687FDB1212687F401212687F201212688F
:100DA0007F021212687F8D1212687F141212687F00
:100DB000A41212687FA61212687FAF1212687FAF6A
:100DC0001212681212BCE4FDFF020003900163EFEF
:100DD000F0A3EDF0A3EAF0A3EBF0E490016BF09048
:100DE0000169F0900167E0FF900169E0FEC39F4058
:100DF00003020E7AC3EF9E14FD7F0A12132E900198
:100E000065E0FCA3E0FDCFCDCFCECCCE1204D97CE3
:100E1000007D0A1204D990016AEDF0A3E0703090D1
:100E20000167E014FF900169E0FEC39F5021A3E039
:100E30007017900168E0C3138EF0A4FF900163E087
:100E40002FFFA3E0FD7B20802590016B7401F090C3
:100E50000168E0C313FFA3E0FEEF8EF0A4FF900152
:100E600063E02FFFA3E0FD90016AE02430FB121144
:100E70000A900169E004F0020DE3229000E7E070BF
:100E800002A3E07003020F0F90004674FFF0A374FA
:100E90001FF0A3744EF07B017A0079A5120C5DE976
:100EA0004A4B606B7B017A0079A57D2C1210209053
:100EB00000A2EBF0A3EAF0A3E9F090FFFF12049A7E
:100EC000FF3395E0FE78627C007D019000A2E0FB9C
:100ED000A3E0FAA3E0F912045B90003B74FFF0A3D7
:100EE000741FF0A3747AF0A37407F0A374D0F07B9E
:100EF000FF7A1F795C120BBAEF4E7F0070027F0100
:100F0000EF70D612134C7B017A007962121387229C
:100F1000787FE4F6D8FD758121020F5702130CE4A7
:100F200093A3F8E493A34003F68001F208DFF48072
:100F300029E493A3F85407240CC8C333C4540F44C2
:100F400020C8834004F456800146F6DFE4800B019C
:100F5000020408102040809013DAE47E019360BC04
:100F6000A3FF543F30E509541FFEE493A360010E34
:100F7000CF54C025E060A840B8E493A3FAE493A35B
:100F8000F8E493A3C8C582C8CAC583CAF0A3C8C57C
:100F900082C8CAC583CADFE9DEE780BE900159EF87
:100FA000F090015BEBF0E4900160F0A3F090015C45
:100FB000E0FF54077008EF131313541F800A9001C9
:100FC0005CE0131313541F04900162F0900162ED72
:100FD000F090015CE0FF900162E0FDC39F50409003
:100FE0000159E0FF120003E0FC90015BE0FFECC35D
:100FF0009F502490015DE0FBA3E0FAA3E0F9A3E495
:1010000075F00112056485F082F58312049AFF7D64
:10101000011212680C80D2900162E004F080B222CA
:10102000900000EBF0A3EAF0A3E9F0A3EBF0A3EA51
:10103000F0A3E9F0900003E0FBA3E0FAA3E0F912CB
:101040000481600C900004E475F0011205B880E49E
:10105000900003E0FBA3E0FAA3E0F91204816D70B5
:101060000122900000E0FBA3E0FAA3E0F9EBC0E06E
:10107000EAC0E0E9C0E0A3E0FBA374FFF5F01205CD
:1010800064FAD082D083D0E06B7009E5F06582709D
:1010900003EA658370BAFBFAF922C0E0C0F0C083AE
:1010A000C082C0D075D000C000C006C007309849CB
:1010B000C2989000E5E475F001120564FE74A52560
:1010C000F0F58274003EF583E599F09000E5E0FECE
:1010D000A3E0FF24A4F58274003EF583E0B40A087F
:1010E0009000E7E4F0A304F0EF64404E700B900032
:1010F000E5F0A3F0A3F0A304F0D007D006D000D011
:10110000D0D082D083D0F0D0E032AA07A905AF03B7
:10111000E4FCEF24E0FBEAD3947F4004E4FA0909FD
:10112000AF02AD01120003E4FC75F010EBA42CF546
:1011300082E435F0F583E5822450F582E5833416A8
:101140001212610CECB408E1AF02E904FD120003D5
:10115000E4FC75F010EBA42CF582E435F0F583E5A2
:10116000822458F582E58334161212610CECB4081F
:10117000E12290016CEFF0A3EDF0A3EBF0A3EAF015
:10118000A3E9F0E4A3F090016EE0FBA3E0FAA3E092
:10119000F9A3E0F58275830012049AFB60279001A1
:1011A0006CE0FFA3E0FD12110A90016CE02408F04E
:1011B000E0D394784007E4F0A3E02402F0900171BA
:1011C000E004F080C122A907AA05E4900178F0129A
:1011D0000003E4FC75F040EBA42440F582E5F03414
:1011E0001C121257900178E004F00CECB410E5AF3B
:1011F00001EA04FD120003E4FC75F040EBA4246056
:10120000F582E5F0341C121257900178E004F00CDE
:10121000ECB410E522E4FBFD7F101211C67B01E463
:10122000FD7F201211C67B02E4FD7F301211C67BC8
:1012300003E4FD7F401211C67B04E4FD7F501211D0
:10124000C67B05E4FD7F601211C67BFF7A1479230B
:101250007D027F20021172F583E5822CF582E43550
:1012600083F583E493FF7D01ED6004D2A38002C285
:10127000A3C2A4E4FEC2A0EF30E704D2A18002C260
:10128000A1D2A0EF25E0FF0EEEB408E9D2A4D2A3CC
:10129000229000E7E07002A3E060207B017A0079F1
:1012A000A5121387120614E49000E5F0A3F0FE7F68
:1012B00040FD7B017A0079A512057A22E4FCEC243A
:1012C000B0FFE4FD121268E4FF1212687F101212E0
:1012D00068E4FB7D01E4FF1212680BEBB480F40CB0
:1012E000ECB408DA22EFB40A07740D1212F0740A93
:1012F000309811A899B8130CC2983098FDA899C2DB
:1013000098B811F63099FDC299F5992212139A12E4
:101310000D1C90000374FFF0A3741FF0A37444F03D
:101320007BFF7A1F793B1207AF120E7B80FB900187
:1013300077EFF0A9057F017E00AD0119ED600C90FB
:101340000177E0FD7C001204C780EE227E007F4022
:101350007D007B017A0079A512057AE49000E5F022
:10136000A3F0A3F0A3F022EF4E60157D087C07EDFB
:101370001DAA0470011C4A70F6EF1F70EA1E80E778
:10138000227BFF7A1E795A120481FF600C12141B13
:10139000740129F9E43AFA80EE2275985053890FC6
:1013A000438920758BFD758DFDD28ED2ACD2AF22D4
:1013B000EF1FAC0670011E4C600A7D027CEFDCFE64
:1013C000DDFC80EC22E4FFFE120481600C0FEF7064
:1013D000010E09E970F20A80EF224300A20000002A
:1013E0004200E500004200E7000000E4FD7F8D12AE
:1013F00012687F141212687FAF021268E4FD7F8DBD
:101400001212687F101212687FAE0212689000E715
:10141000E07002A3E06003120614228F993099FD58
:10142000C29922574632340000000000000000003C
:10143000002F000000000700070000147F147F1435
:1014400000242A7F2A1200626408132300364955BB
:10145000225000000503000000001C224100000093
:1014600041221C000014083E08140008083E080829
:10147000000000A060000008080808080000606084
:101480000000002010080402003E5149453E0000C3
:10149000427F4000004261514946002141454B31A5
:1014A000001814127F10002745454539003C4A4971
:1014B00049300001710905030036494949360006E3
:1014C0004949291E0000363600000000563600004B
:1014D00000081422410000141414141400004122C6
:1014E000140800020151090600324959513E007C9E
:1014F0001211127C007F49494936003E4141412288
:10150000007F4141221C007F49494941007F090970
:101510000901003E4149497A007F0808087F000020
:10152000417F4100002040413F01007F08142241DB
:10153000007F40404040007F020C027F007F040893
:10154000107F003E4141413E007F09090906003EEF
:101550004151215E007F0919294600464949493118
:101560000001017F0101003F4040403F001F20403B
:10157000201F003F4038403F0063140814630007F9
:101580000870080700615149454300007F41410050
:1015900000552A552A55000041417F0000040201F0
:1015A00002040040404040400000010204000020CE
:1015B00054545478007F484444380038444444200C
:1015C00000384444487F00385454541800087E09B9
:1015D00001020018A4A4A47C007F08040478000081
:1015E000447D4000004080847D00007F102844003E
:1015F0000000417F4000007C04180478007C08044F
:10160000047800384444443800FC2424241800188A
:10161000242418FC007C0804040800485454542076
:1016200000043F444020003C4040207C001C2040FF
:10163000201C003C4030403C004428102844001C42
:10164000A0A0A07C004464544C441414141414143A
:10165000000000000000000000000000000000008A
:10166000000000F80000000000000033300000001F
:1016700000100C06100C0600000000000000000026
:1016800040C07840C0784000043F04043F04040098
:10169000007088FC08300000001820FF211E0000A8
:1016A000F008F000E018000000211C031E211E00BD
:1016B00000F00888700000001E2123241927211043
:1016C00010160E00000000000000000000000000E6
:1016D000000000E01804020000000007182040008D
:1016E00000020418E000000000402018070000007D
:1016F000404080F0804040000202010F01020200E1
:10170000000000F0000000000101011F01010100C4
:10171000000000000000000080B070000000000029
:1017200000000000000000000001010101010101B2
:101730000000000000000000003030000000000049
:10174000000000008060180400601806010000001E
:1017500000E010080810E000000F102020100F001B
:10176000001010F8000000000020203F20200000A2
:1017700000700808088870000030282422213000FA
:1017800000300888884830000018202020110E0002
:101790000000C02010F8000000070424243F2400AB
:1017A00000F80888880808000019212020110E0080
:1017B00000E0108888180000000F112020110E0092
:1017C00000380808C83808000000003F000000008A
:1017D0000070880808887000001C222121221C004B
:1017E00000E010080810E0000000312222110F0074
:1017F000000000C0C0000000000000303000000009
:101800000000008000000000000080600000000078
:101810000000804020100800000102040810200091
:1018200040404040404040000404040404040400DC
:101830000008102040800000002010080402010071
:10184000007048080808F000000000303601000071
:10185000C030C828E810E0000718272423140B0024
:101860000000C038E0000000203C2302022738209E
:1018700008F8888888700000203F202020110E0082
:10188000C030080808083800071820202010080079
:1018900008F808080810E000203F202020100F0062
:1018A00008F88888E8081000203F2020232018002E
:1018B00008F88888E8081000203F20000300000096
:1018C000C03008080838000007182020221E020037
:1018D00008F808000008F808203F210101213F20F6
:1018E000000808F8080800000020203F2020000021
:1018F00000000808F8080800C08080807F00000011
:1019000008F888C028180800203F20012638200049
:1019100008F8080000000000203F202020203000B0
:1019200008F8F800F8F80800203F003F003F2000CA
:1019300008F830C00008F808203F200007183F00D2
:10194000E01008080810E0000F10202020100F0001
:1019500008F808080808F000203F210101010000F4
:10196000E01008080810E0000F18242438504F0039
:1019700008F8888888887000203F2000030C3020F9
:1019800000708808080838000038202121221C0037
:10199000180808F8080818000000203F2000000080
:1019A00008F808000008F808001F202020201F0069
:1019B0000878880000C83808000007380E010000C9
:1019C000F80800F80008F800033C0700073C030093
:1019D000081868808068180820302C03032C3020F9
:1019E0000838C800C83808000000203F2000000068
:1019F00010080808C83808002038262120201800C0
:101A0000000000FE020202000000007F4040400093
:101A1000000C30C000000000000000010638C000CB
:101A200000020202FE000000004040407F00000073
:101A30000000040202020400000000000000000098
:101A40000000000000000000808080808080808096
:101A5000000202040000000000000000000000007E
:101A600000008080808000000019242222223F2074
:101A700008F8008080000000003F112020110E00B7
:101A80000000008080800000000E11202020110046
:101A9000000000808088F800000E112020103F20F8
:101AA0000000808080800000001F2222222213007C
:101AB000008080F0888888180020203F20200000C7
:101AC0000000808080808000006B9494949360007C
:101AD00008F8008080800000203F210000203F2087
:101AE00000809898000000000020203F2020000087
:101AF000000000809898000000C08080807F000077
:101B000008F8000080808000203F24022D30200053
:101B1000000808F8000000000020203F20200000FE
:101B20008080808080808000203F20003F20003F18
:101B30008080008080800000203F210000203F2026
:101B40000000808080800000001F202020201F00D7
:101B5000808000808000000080FFA12020110E0006
:101B60000000008080808000000E112020A0FF80F7
:101B7000808080008080800020203F2120000100A4
:101B800000008080808080000033242424241900F9
:101B9000008080E0808000000000001F2020000006
:101BA0008080000000808000001F202020103F2047
:101BB000808080000080808000010E3008060100D7
:101BC00080800080008080800F300C030C300F007C
:101BD00000808000808080000020312E0E312000A7
:101BE000808080000080808080818E7018060100D7
:101BF00000808080808080000021302C22213000F5
:101C000000000000807C020200000000003F404015
:101C100000000000FF00000000000000FF000000C6
:101C20000002027C800000000040403F00000000F5
:101C30000006010102020404000000000000000090
:101C400020202020202020FF2020202020202000D5
:101C50000000000000000000000000000000000084
:101C600080804020100C0300030C10204080800076
:101C70000000000000000000000000000000000064
:101C8000000101FD55555755555555FD0101000001
:101C90000000000000000000000000000000000044
:101CA000809088454F55252525554D4580808000DD
:101CB0000000000000000000000000000000000024
:101CC0001010101010FF1010F0101116D01010008E
:101CD0000000000000000000000000000000000004
:101CE00080402018064120103F4442414040780087
:101CF00000000000000000000000000000000000E4
:101D0000001088864040202F5090080204080000F0
:101D100000000000000000000000000000000000C3
:101D2000010100FF555555557F555555554100004A
:101D300000000000000000000000000000000000A3
:101D40002424A4FEA3220022CC0000FF00000000F7
:101D50000000000000000000000000000000000083
:101D6000080601FF00010404040404FF020202004B
:101D70000000000000000000000000000000000063
:101D8000101010FF109008888888FF888888080045
:101D90000000000000000000000000000000000043
:101DA0000444827F01808040432C102846818000BB
:101DB0000000000000000000000000000000000023
:101DC0003139322E3136382E3000524543563A746E
:101DD0006573742D617070002B2B2B0041540D0A1C
:101DE000004F4B0041542B43574D4F44453D300D60
:101DF0000A0041542B43574A41503D25732C25730B
:101E00000D0A002B43574A41503A312C0041542BC4
:101E10004349504D4F44453D310D0A0041542B4339
:101E2000495053544152543D5443502C3139322E71
:101E30003136382E302E3134362C323334370D0AC9
:101E4000002B43495053544152543A310041542BD2
:101E500043495053454E440D0A003A436F6E6E6538
:101E6000637465640D0A0041542B43495053544137
:101E700052543D5544502C3139322E3136382E30A3
:101E80002E3134362C323334352C313131322C3042
:101E90000D0A0041542B4D515454434C45414E0DB5
:101EA0000A0041542B4D5154544C4F4E47434C491A
:101EB000454E5449443D57462D54455354320D0A1E
:101EC0000041542B4D515454434F4E4E3D62726F5E
:101ED0006B65722E656D71782E696F2C31383833D1
:101EE0002C300D0A004D515454434F4E4E4543542F
:101EF00045443A0041542B4D5154545355423D747E
:101F00006573742D6170702C300D0A0041542B4D97
:101F10005154545055425241573D746573742D7756
:101F20002C33322C302C300D0A004D5154545F4369
:101F30006F6E6E65637465640D0A0044582D534DD1
:101F400041525400534D41525440363031005245B5
:101F500043563A746573742D6170700041542B4D73
:101F60005154545055425241573D746573742D7706
:0D1F70002C33322C302C300D0A004F4B006A
:00000001FF

View File

@@ -1,7 +0,0 @@
".\Objects\STARTUP.obj",
".\Objects\main.obj",
".\Objects\UART.obj",
".\Objects\oled.obj"
TO ".\Objects\51Project"
PRINT(".\Listings\51Project.map")

View File

@@ -1,198 +0,0 @@
$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

View File

@@ -1,209 +0,0 @@
#include "UART.h"
#include <string.h>
#include "oled.h"
#include <stdio.h>
// 用于存储接收数据的数组
unsigned char rxBuffer[ARRAY_SIZE];
unsigned int rxIndex = 0; // 接收数据的索引
unsigned int rx_flag=0;
extern unsigned int CONNECT_FLEG;//连接标志
// 初始化串口
void Serial_Init() {
SCON = 0x50; // 设置为模式18位数据可变波特率
TMOD &= 0x0F; // 清除定时器1模式位
TMOD |= 0x20; // 设置定时器1为8位自动重装模式
TH1 = TL1 = 256 - (11059200 / 12 / 32) / BAUDRATE; // 设置波特率
TR1 = 1; // 启动定时器1
ES = 1; // 开启串口中断
EA = 1; // 开启全局中断
}
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void buff_memset(void)
{
memset(rxBuffer,0,64);
rxIndex=0;
rx_flag = 0;
}
unsigned int WIFI_CheckAck(char* src, char* dest, int timeout)
{
char *check = NULL;
//清空缓冲
buff_memset();
UART_sentString(src);
timeout=timeout/10;//10ms处理一次
while(timeout--)
{
Delay(10);//延时1ms
if(rx_flag==1)
{
check = strstr(rxBuffer,dest);
if(check != NULL)
{
buff_memset();//数据有误 清空
return 1;
}
}
}
buff_memset();//数据有误 清空
return 0;//超时
}
sbit LED = P2^5;
sbit motor1 = P2^6;
sbit motor2 = P2^7;
void CONNECT_TX_Control(void)
{
char *ptr = NULL;
int number;
if (CONNECT_FLEG)
{
if(rx_flag)
{
if(strstr(rxBuffer,"192.168.0")!=NULL)
{
ptr = strrchr((char*)rxBuffer,','); // 以最后一个,为准后面为数据
if(strlen(ptr)-3==1) //判断接收到为一位数据 ,*\r\n
{
number = ptr[1]-'0';
switch(number)
{
case 1: LED = 0 ; break;
case 2: LED = 1; break;
case 3:OLED_Show(); break;
case 4:OLED_Clear(); break;
case 5:motor1=0;motor2=1; break;
case 6:motor1=1;motor2=0; break;
case 7:motor1=0;motor2=0 ; break;
default: return;
}
}
}
else if(strstr((char *)rxBuffer,"RECV:test-app")!=NULL)
{
ptr = strrchr((char*)rxBuffer,','); // 以最后一个,为准后面为数据
if(strlen(ptr)-3==1) //判断接收到为一位数据 ,*\r\n
{
number = ptr[1]-'0';
switch(number)
{
case 1: LED = 0 ; break;
case 2: LED = 1; break;
case 3:OLED_Show(); break;
case 4:OLED_Clear(); break;
case 5:motor1=0;motor2=1; break;
case 6:motor1=1;motor2=0; break;
case 7:motor1=0;motor2=0 ; break;
default: return;
}
}
}
}
buff_memset();//数据有误 清空
}
}
void CONNECT_TO_TCP(unsigned char* id,unsigned char *password)
{
unsigned char buf[50];
WIFI_CheckAck("+++",id,1500); //确保其退出透传
//while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
while(!WIFI_CheckAck("AT\r\n","OK",1000));
while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000));
sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));
while(!WIFI_CheckAck("AT+CIPMODE=1\r\n","OK",1000)!=0);
while(!WIFI_CheckAck("AT+CIPSTART=TCP,192.168.0.146,2347\r\n","+CIPSTART:1",3000));
while(!WIFI_CheckAck("AT+CIPSEND\r\n","OK",1000));
UART_sentString(":Connected\r\n");
CONNECT_FLEG = 1;
}
void CONNECT_TO_UDP(unsigned char* id,unsigned char *password)
{
unsigned char buf[50];
WIFI_CheckAck("+++",id,1500); //确保其退出透传
//while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
while(!WIFI_CheckAck("AT\r\n","OK",1000));
while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000));
sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));
while(!WIFI_CheckAck("AT+CIPMODE=1\r\n","OK",1000)!=0);
while(!WIFI_CheckAck("AT+CIPSTART=UDP,192.168.0.146,2345,1112,0\r\n","+CIPSTART:1",3000)); //192.168.0.150,2345为IP地址 2345 端口号1112 是模块设置的端口号 0 UDP固定目标模式
while(!WIFI_CheckAck("AT+CIPSEND\r\n","OK",1000));
UART_sentString(":Connected\r\n");
CONNECT_FLEG = 1;
}
void CONNECT_TO_MQTT(unsigned char* id,unsigned char *password)
{
unsigned char buf[50];
while(!WIFI_CheckAck("AT+MQTTCLEAN\r\n","OK",1000));
//while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
while(!WIFI_CheckAck("AT\r\n","OK",1000));
while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000)); //STA模式
sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));//连接WIFI
while(!WIFI_CheckAck("AT+MQTTLONGCLIENTID=WF-TEST2\r\n","OK",1000)!=0);//配置 MQTT 客户端所需的客户端 ID、用户名和密码
while(!WIFI_CheckAck("AT+MQTTCONN=broker.emqx.io,1883,0\r\n","MQTTCONNECTED:",2000)!=0);//连接 MQTT 服务器
while(!WIFI_CheckAck("AT+MQTTSUB=test-app,0\r\n","OK",2000)!=0);//订阅主题 test-app
while(!WIFI_CheckAck("AT+MQTTPUBRAW=test-w,32,0,0\r\n","OK",2000)!=0);
UART_sentString("MQTT_Connected\r\n");
buff_memset();
CONNECT_FLEG = 1;
}
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(!TI);
TI=0;
}
void UART_sentString(char *str)
{
while(*str){
UART_SendByte(*str);
str++;
}
}
// 串口接收中断服务程序
void Serial_ISR() interrupt 4 {
if (RI) {
RI = 0; // 清除接收中断标志
rxBuffer[rxIndex++] = SBUF; // 存储接收到的数据
if(rxBuffer[rxIndex-1]=='\n')
{
rx_flag=1;
}
if(rxIndex==64)
{
rxIndex=0;
rx_flag=1;
}
}
}

View File

@@ -1,16 +0,0 @@
#ifndef _UART_H_
#define _UART_H_
#include <REGX52.H> // STC89C52RC的寄存器定义
#define BAUDRATE 9600 // 波特率
#define ARRAY_SIZE 64 // 数组大小
void Serial_Init();
void Uart_send_String();
void UART_SendByte(unsigned char Byte);
void UART_sentString(char *str);
void Delay(unsigned int xms);
unsigned int WIFI_CheckAck(char* src, char* dest, int timeout);
void CONNECT_TO_TCP(unsigned char* id,unsigned char *password);
void CONNECT_TO_UDP(unsigned char* id,unsigned char *password);
void CONNECT_TO_MQTT(unsigned char* id,unsigned char *password);
void CONNECT_TX_Control(void);
#endif

View File

@@ -1,74 +0,0 @@
//**** 声明 ********************************************************************
/*******************************************************************************
* 下面来自互联开源程序,由深圳市大夏龙雀科技有限公司收集
* 方便用户参考学习,本公司不提供任何技术支持
* 程序仅供测试参考,不能应用在实际工程中,不一定能通过编译
* 公司网站 http://www.szdx-smart.com/
* 淘宝网址 https://shop184598174.taobao.com/?spm=a1z10.5-c-s.w12096189-21564973333.3.547b1176WCCDxR&scene=taobao_shop
*******************************************************************************/
/********************************************************************
* 文件名 WF24-MQTT协议应用
* 描述 : 该文件实现WF24和单片机数据透传。
***********************************************************************/
/*
Name: MQTT
Created: 2024/8/21
Author: WAM
*/
#include <REGX52.H> // STC89C52RC的寄存器定义
#include "UART.h"
#include "string.h"
#include "stdio.h"
#include "oled.h"
extern unsigned int rxIndex;
extern unsigned char rxBuffer[ARRAY_SIZE];
extern unsigned int rx_flag;
unsigned int CONNECT_FLEG;//连接标志
// 主函数
unsigned char conver[64];
char *ptr = NULL;
void MQTT_CONVER(void);
void main() {
Serial_Init(); // 初始化串口
OLED_Init();
CONNECT_TO_MQTT("DX-SMART","SMART@601");
while (1) {
// 主循环,可以添加其他任务
MQTT_CONVER();
}
}
void TCP_UDP_CONVER(void)
{
if (rx_flag)
{
UART_sentString(rxBuffer);
CONNECT_TX_Control();
rxIndex = 0; // 重置索引,准备下一次接收
memset(rxBuffer,0,ARRAY_SIZE); //清空缓冲区
}
}
void MQTT_CONVER(void)
{
if (rx_flag)
{
if(strstr(rxBuffer,"RECV:test-app")!=NULL)
{
ptr = strrchr(rxBuffer,',');
memcpy(conver,ptr,*(ptr-1));
while(!WIFI_CheckAck("AT+MQTTPUBRAW=test-w,32,0,0\r\n","OK",2000)!=0);
buff_memset();//数据有误 清空
UART_sentString(conver);
}
}
}
void MQTT_CONTROL(void)
{
if (rx_flag)
{
CONNECT_TX_Control();
}
}

View File

@@ -1,249 +0,0 @@
#include "oled.h"
#include "oledfont.h"
void delay_ms(unsigned int ms)
{
unsigned int a;
while(ms)
{
a=1800;
while(a--);
ms--;
}
return;
}
void OLED_Show()
{
OLED_ShowCHinese(16,0,0);
OLED_ShowCHinese(32,0,1);
OLED_ShowCHinese(48,0,2);
OLED_ShowCHinese(64,0,3);
OLED_ShowCHinese(80,0,4);
OLED_ShowCHinese(96,0,5);
OLED_ShowString(32,2,"WF24");
}
#if OLED_MODE==1
//向SSD1106写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{
DATAOUT(dat);
if(cmd)
OLED_DC_Set();
else
OLED_DC_Clr();
OLED_CS_Clr();
OLED_WR_Clr();
OLED_WR_Set();
OLED_CS_Set();
OLED_DC_Set();
}
#else
//向SSD1306写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{
u8 i;
if(cmd)
OLED_DC_Set();
else
OLED_DC_Clr();
OLED_CS_Clr();
for(i=0;i<8;i++)
{
OLED_SCLK_Clr();
if(dat&0x80)
{
OLED_SDIN_Set();
}
else
OLED_SDIN_Clr();
OLED_SCLK_Set();
dat<<=1;
}
OLED_CS_Set();
OLED_DC_Set();
}
#endif
void OLED_Set_Pos(unsigned char x, unsigned char y)
{
OLED_WR_Byte(0xb0+y,OLED_CMD);
OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);
}
//开启OLED显示
void OLED_Display_On(void)
{
OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
}
//关闭OLED显示
void OLED_Display_Off(void)
{
OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF
OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF
}
//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
void OLED_Clear(void)
{
u8 i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址0~7
OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址
OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址
for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
} //更新显示
}
//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白显示;1,正常显示
//size:选择字体 16/12
void OLED_ShowChar(u8 x,u8 y,u8 chr)
{
unsigned char c=0,i=0;
c=chr-' ';//得到偏移后的值
if(x>Max_Column-1){x=0;y=y+2;}
if(SIZE ==16)
{
OLED_Set_Pos(x,y);
for(i=0;i<8;i++)
OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
OLED_Set_Pos(x,y+1);
for(i=0;i<8;i++)
OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
}
}
//m^n函数
u32 oled_pow(u8 m,u8 n)
{
u32 result=1;
while(n--)result*=m;
return result;
}
//显示2个数字
//x,y :起点坐标
//len :数字的位数
//size:字体大小
//mode:模式 0,填充模式;1,叠加模式
//num:数值(0~4294967295);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
{
u8 t,temp;
u8 enshow=0;
for(t=0;t<len;t++)
{
temp=(num/oled_pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
OLED_ShowChar(x+(size2/2)*t,y,' ');
continue;
}else enshow=1;
}
OLED_ShowChar(x+(size2/2)*t,y,temp+'0');
}
}
//显示一个字符号串
void OLED_ShowString(u8 x,u8 y,u8 *chr)
{
unsigned char j=0;
while (chr[j]!='\0')
{ OLED_ShowChar(x,y,chr[j]);
x+=8;
if(x>120){x=0;y+=2;}
j++;
}
}
//显示汉字
void OLED_ShowCHinese(u8 x,u8 y,u8 no)
{
u8 t,adder=0;
OLED_Set_Pos(x,y);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
adder+=1;
}
OLED_Set_Pos(x,y+1);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
adder+=1;
}
}
/***********功能描述显示显示BMP图片128×64起始点坐标(x,y),x的范围0127y为页的范围07*****************/
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
{
unsigned int j=0;
unsigned char x,y;
if(y1%8==0) y=y1/8;
else y=y1/8+1;
for(y=y0;y<y1;y++)
{
OLED_Set_Pos(x0,y);
for(x=x0;x<x1;x++)
{
OLED_WR_Byte(BMP[j++],OLED_DATA);
}
}
}
//初始化SSD1306
void OLED_Init(void)
{
OLED_RST_Set();
delay_ms(100);
OLED_RST_Clr();
delay_ms(100);
OLED_RST_Set();
OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
OLED_WR_Byte(0x40,OLED_CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
OLED_WR_Byte(0xCF,OLED_CMD); // Set SEG Output Current Brightness
OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常
OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常
OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
OLED_WR_Byte(0x00,OLED_CMD);//-not offset
OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
OLED_WR_Byte(0x12,OLED_CMD);
OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
OLED_WR_Byte(0x02,OLED_CMD);//
OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7)
OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/
OLED_Clear();
OLED_Set_Pos(0,0);
}

View File

@@ -1,73 +0,0 @@
#ifndef _OLED_H_
#define _OLED_H_
#include <REGX52.H>
#define u8 unsigned char
#define u32 unsigned int
#define OLED_CMD 0 //写命令
#define OLED_DATA 1 //写数据
#define OLED_MODE 0
sbit OLED_CS=P2^4; //片选
sbit OLED_RST =P2^2;//复位
sbit OLED_DC =P2^3;//数据/命令控制
sbit OLED_SCL=P2^0;//时钟 D0SCLK
sbit OLED_SDIN=P2^1;//D1MOSI 数据
#define OLED_CS_Clr() OLED_CS=0
#define OLED_CS_Set() OLED_CS=1
#define OLED_RST_Clr() OLED_RST=0
#define OLED_RST_Set() OLED_RST=1
#define OLED_DC_Clr() OLED_DC=0
#define OLED_DC_Set() OLED_DC=1
#define OLED_SCLK_Clr() OLED_SCL=0
#define OLED_SCLK_Set() OLED_SCL=1
#define OLED_SDIN_Clr() OLED_SDIN=0
#define OLED_SDIN_Set() OLED_SDIN=1
//OLED模式设置
//0:4线串行模式
//1:并行8080模式
#define SIZE 16
#define XLevelL 0x02
#define XLevelH 0x10
#define Max_Column 128
#define Max_Row 64
#define Brightness 0xFF
#define X_WIDTH 128
#define Y_WIDTH 64
//-----------------OLED端口定义----------------
void delay_ms(unsigned int ms);
void OLED_Show();
//OLED控制用函数
void OLED_WR_Byte(u8 dat,u8 cmd);
void OLED_Display_On(void);
void OLED_Display_Off(void);
void OLED_Init(void);
void OLED_Clear(void);
void OLED_DrawPoint(u8 x,u8 y,u8 t);
void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
void OLED_ShowChar(u8 x,u8 y,u8 chr);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2);
void OLED_ShowString(u8 x,u8 y, u8 *p);
void OLED_Set_Pos(unsigned char x, unsigned char y);
void OLED_ShowCHinese(u8 x,u8 y,u8 no);
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
#endif

View File

@@ -1,225 +0,0 @@
//#endif /*_OLEDFONT_H*/
#ifndef __OLEDFONT_H
#define __OLEDFONT_H
//常用ASCII表
//偏移量32
//ASCII字符集
//偏移量32
//大小:12*6
/************************************6*8的点阵************************************/
const unsigned char code F6x8[][6] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '
0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
};
/****************************************8*16的点阵************************************/
const unsigned char code F8X16[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
};
const char code Hzk[][32]={
{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00},
{0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00},/*"大",0*/
{0x00,0x01,0x01,0xFD,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0xFD,0x01,0x01,0x00,0x00},
{0x80,0x90,0x88,0x45,0x4F,0x55,0x25,0x25,0x25,0x55,0x4D,0x45,0x80,0x80,0x80,0x00},/*"夏",1*/
{0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0xF0,0x10,0x11,0x16,0xD0,0x10,0x10,0x00},
{0x80,0x40,0x20,0x18,0x06,0x41,0x20,0x10,0x3F,0x44,0x42,0x41,0x40,0x40,0x78,0x00},/*"龙",2*/
{0x00,0x10,0x88,0x86,0x40,0x40,0x20,0x2F,0x50,0x90,0x08,0x02,0x04,0x08,0x00,0x00},
{0x01,0x01,0x00,0xFF,0x55,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x55,0x41,0x00,0x00},/*"雀",3*/
{0x24,0x24,0xA4,0xFE,0xA3,0x22,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,0x00},
{0x08,0x06,0x01,0xFF,0x00,0x01,0x04,0x04,0x04,0x04,0x04,0xFF,0x02,0x02,0x02,0x00},/*"科",5*/
{0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00},
{0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"技",6*/
};
#endif

View File

@@ -1,233 +0,0 @@
<?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; *.md</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp; *.cc; *.cxx</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>11059200</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>
<Books>
<Book>
<Number>0</Number>
<Title>Data Sheet</Title>
<Path>DATASHTS\ATMEL\AT89C52_DS.PDF</Path>
</Book>
<Book>
<Number>1</Number>
<Title>Instruction Set Manual</Title>
<Path>DATASHTS\ATMEL\AT_C51ISM.PDF</Path>
</Book>
</Books>
<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>User</GroupName>
<tvExp>1</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>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\UART.C</PathWithFileName>
<FilenameWithoutPath>UART.C</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\oled.c</PathWithFileName>
<FilenameWithoutPath>oled.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

View File

@@ -1,405 +0,0 @@
<?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>AT89C52</Device>
<Vendor>Microchip</Vendor>
<Cpu>IRAM(0-0xFF) IROM(0-0x1FFF) CLOCK(24000000)</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>2980</DeviceId>
<RegisterFile>REGX52.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>Atmel\</RegisterFilePath>
<DBRegisterFilePath>Atmel\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>51Project</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>-p52</SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TP51.DLL</TargetDlgDll>
<TargetDlgDllArguments>-p52</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>2</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>0</HadXRAM>
<HadIROM>1</HadIROM>
<Moda2>0</Moda2>
<Moddp2>0</Moddp2>
<Modp2>0</Modp2>
<Mod517dp>0</Mod517dp>
<Mod517au>0</Mod517au>
<Mode2>0</Mode2>
<useCB>0</useCB>
<useXB>0</useXB>
<useL251>1</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>0x2000</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100</Size>
</IRA>
<XRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</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>..\User</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>User</GroupName>
<Files>
<File>
<FileName>STARTUP.A51</FileName>
<FileType>2</FileType>
<FilePath>.\STARTUP.A51</FilePath>
</File>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\main.c</FilePath>
</File>
<File>
<FileName>UART.C</FileName>
<FileType>1</FileType>
<FilePath>..\User\UART.C</FilePath>
</File>
<File>
<FileName>oled.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\oled.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
</Project>

View File

@@ -1,253 +0,0 @@
A51 MACRO ASSEMBLER STARTUP 08/20/2024 11:07:29 PAGE 1
MACRO ASSEMBLER A51 V8.2.7.0
OBJECT MODULE PLACED IN .\Objects\STARTUP.obj
ASSEMBLER INVOKED BY: D:\Keil5\C51\BIN\A51.EXE STARTUP.A51 SET(LARGE) DEBUG PRINT(.\Listings\STARTUP.lst) OBJECT(.\Objec
ts\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 08/20/2024 11:07:29 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 08/20/2024 11:07:29 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 08/20/2024 11:07:29 PAGE 4
190
195 ;</h>
0009 020000 F 196 LJMP ?C_START
197
198 END
A51 MACRO ASSEMBLER STARTUP 08/20/2024 11:07:29 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)

View File

@@ -1,246 +0,0 @@
C51 COMPILER V9.60.7.0 UART 08/20/2024 11:07:30 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\Objects\UART.obj
COMPILER INVOKED BY: D:\Keil5\C51\BIN\C51.EXE ..\User\UART.C LARGE OMF2 OPTIMIZE(8,SPEED) BROWSE INCDIR(..\User) DEBUG P
-RINT(.\Listings\UART.lst) OBJECT(.\Objects\UART.obj)
line level source
1 #include "UART.h"
2 #include <string.h>
3 #include "oled.h"
4 #include <stdio.h>
5
6 // 用于存储接收数据的数组
7 unsigned char rxBuffer[ARRAY_SIZE];
8 unsigned int rxIndex = 0; // 接收数据的索引
9 unsigned int rx_flag=0;
10 extern unsigned int CONNECT_FLEG;//连接标志
11 // 初始化串口
12 void Serial_Init() {
13 1 SCON = 0x50; // 设置为模式18位数据可变波特率
14 1 TMOD &= 0x0F; // 清除定时器1模式位
15 1 TMOD |= 0x20; // 设置定时器1为8位自动重装模式
16 1 TH1 = TL1 = 256 - (11059200 / 12 / 32) / BAUDRATE; // 设置波特率
17 1 TR1 = 1; // 启动定时器1
18 1 ES = 1; // 开启串口中断
19 1 EA = 1; // 开启全局中断
20 1 }
21
22 void Delay(unsigned int xms)
23 {
24 1 unsigned char i, j;
25 1 while(xms--)
26 1 {
27 2 i = 2;
28 2 j = 239;
29 2 do
30 2 {
31 3 while (--j);
32 3 } while (--i);
33 2 }
34 1 }
35
36 void buff_memset(void)
37 {
38 1 memset(rxBuffer,0,64);
39 1 rxIndex=0;
40 1 rx_flag = 0;
41 1 }
42 unsigned int WIFI_CheckAck(char* src, char* dest, int timeout)
43 {
44 1 char *check = NULL;
45 1 //清空缓冲
46 1 buff_memset();
47 1
48 1 UART_sentString(src);
49 1 timeout=timeout/10;//10ms处理一次
50 1 while(timeout--)
51 1 {
52 2 Delay(10);//延时1ms
53 2 if(rx_flag==1)
54 2 {
C51 COMPILER V9.60.7.0 UART 08/20/2024 11:07:30 PAGE 2
55 3 check = strstr(rxBuffer,dest);
56 3 if(check != NULL)
57 3 {
58 4 buff_memset();//数据有误 清空
59 4 return 1;
60 4 }
61 3 }
62 2 }
63 1 buff_memset();//数据有误 清空
64 1 return 0;//超时
65 1 }
66
67 sbit LED = P2^5;
68 sbit motor1 = P2^6;
69 sbit motor2 = P2^7;
70
71 void CONNECT_TX_Control(void)
72 {
73 1 char *ptr = NULL;
74 1 int number;
75 1 if (CONNECT_FLEG)
76 1 {
77 2 if(rx_flag)
78 2 {
79 3 if(strstr(rxBuffer,"192.168.0")!=NULL)
80 3 {
81 4 ptr = strrchr((char*)rxBuffer,','); // 以最后一个,为准后面为数据
82 4
83 4 if(strlen(ptr)-3==1) //判断接收到为一位数据 ,*\r\n
84 4 {
85 5 number = ptr[1]-'0';
86 5 switch(number)
87 5 {
88 6 case 1: LED = 0 ; break;
89 6 case 2: LED = 1; break;
90 6 case 3:OLED_Show(); break;
91 6 case 4:OLED_Clear(); break;
92 6 case 5:motor1=0;motor2=1; break;
93 6 case 6:motor1=1;motor2=0; break;
94 6 case 7:motor1=0;motor2=0 ; break;
95 6 default: return;
96 6 }
97 5 }
98 4 }
99 3 else if(strstr((char *)rxBuffer,"RECV:test-app")!=NULL)
100 3 {
101 4 ptr = strrchr((char*)rxBuffer,','); // 以最后一个,为准后面为数据
102 4
103 4 if(strlen(ptr)-3==1) //判断接收到为一位数据 ,*\r\n
104 4 {
105 5 number = ptr[1]-'0';
106 5 switch(number)
107 5 {
108 6 case 1: LED = 0 ; break;
109 6 case 2: LED = 1; break;
110 6 case 3:OLED_Show(); break;
111 6 case 4:OLED_Clear(); break;
112 6 case 5:motor1=0;motor2=1; break;
113 6 case 6:motor1=1;motor2=0; break;
114 6 case 7:motor1=0;motor2=0 ; break;
115 6 default: return;
116 6 }
C51 COMPILER V9.60.7.0 UART 08/20/2024 11:07:30 PAGE 3
117 5 }
118 4 }
119 3 }
120 2 buff_memset();//数据有误 清空
121 2 }
122 1 }
123 void CONNECT_TO_TCP(unsigned char* id,unsigned char *password)
124 {
125 1 unsigned char buf[50];
126 1 WIFI_CheckAck("+++",id,1500); //确保其退出透传
127 1 //while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
128 1 while(!WIFI_CheckAck("AT\r\n","OK",1000));
129 1 while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000));
130 1 sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
131 1 while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));
132 1 while(!WIFI_CheckAck("AT+CIPMODE=1\r\n","OK",1000)!=0);
133 1 while(!WIFI_CheckAck("AT+CIPSTART=TCP,192.168.0.223,2347\r\n","+CIPSTART:1",3000));
134 1 while(!WIFI_CheckAck("AT+CIPSEND\r\n","OK",1000));
135 1 UART_sentString(":Connected\r\n");
136 1 CONNECT_FLEG = 1;
137 1 }
138 void CONNECT_TO_UDP(unsigned char* id,unsigned char *password)
139 {
140 1 unsigned char buf[50];
141 1
142 1 WIFI_CheckAck("+++",id,1500); //确保其退出透传
143 1 //while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
144 1 while(!WIFI_CheckAck("AT\r\n","OK",1000));
145 1 while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000));
146 1 sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
147 1 while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));
148 1 while(!WIFI_CheckAck("AT+CIPMODE=1\r\n","OK",1000)!=0);
149 1 while(!WIFI_CheckAck("AT+CIPSTART=UDP,192.168.0.146,2345,1112,0\r\n","+CIPSTART:1",3000)); //192.168.0.15
-0,2345为IP地址 2345 端口号1112 是模块设置的端口号 0 UDP固定目标模式
150 1 while(!WIFI_CheckAck("AT+CIPSEND\r\n","OK",1000));
151 1 UART_sentString(":Connected\r\n");
152 1 CONNECT_FLEG = 1;
153 1 }
154 void CONNECT_TO_MQTT(unsigned char* id,unsigned char *password)
155 {
156 1 unsigned char buf[50];
157 1 while(!WIFI_CheckAck("AT+MQTTCLEAN\r\n","OK",1000));
158 1 //while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
159 1 while(!WIFI_CheckAck("AT\r\n","OK",1000));
160 1 while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000)); //STA模式
161 1 sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
162 1 while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));//连接WIFI
163 1 while(!WIFI_CheckAck("AT+MQTTLONGCLIENTID=WF-TEST2\r\n","OK",1000)!=0);//配置 MQTT 客户端所需的客户端 ID<49>
-⒂没<E29282><E6B2A1>兔苈<E58594>
164 1 while(!WIFI_CheckAck("AT+MQTTCONN=broker.emqx.io,1883,0\r\n","MQTTCONNECTED:",2000)!=0);//连接 MQTT 服务<E69C8D>
-<2D>
165 1 while(!WIFI_CheckAck("AT+MQTTSUB=test-app,0\r\n","OK",2000)!=0);//订阅主题 test-app
166 1 while(!WIFI_CheckAck("AT+MQTTPUBRAW=test-w,32,0,0\r\n","OK",2000)!=0);
167 1 UART_sentString("MQTT_Connected\r\n");
168 1 buff_memset();
169 1 CONNECT_FLEG = 1;
170 1 }
171
172 void UART_SendByte(unsigned char Byte)
173 {
174 1 SBUF=Byte;
175 1 while(!TI);
C51 COMPILER V9.60.7.0 UART 08/20/2024 11:07:30 PAGE 4
176 1 TI=0;
177 1 }
178
179 void UART_sentString(char *str)
180 {
181 1
182 1 while(*str){
183 2 UART_SendByte(*str);
184 2 str++;
185 2 }
186 1 }
187 // 串口接收中断服务程序
188 void Serial_ISR() interrupt 4 {
189 1 if (RI) {
190 2 RI = 0; // 清除接收中断标志
191 2
192 2
193 2 rxBuffer[rxIndex++] = SBUF; // 存储接收到的数据
194 2 if(rxBuffer[rxIndex-1]=='\n')
195 2 {
196 3 rx_flag=1;
197 3 }
198 2 if(rxIndex==64)
199 2 {
200 3 rxIndex=0;
201 3 rx_flag=1;
202 3 }
203 2
204 2 }
205 1 }
206
207
208
209
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1827 ----
CONSTANT SIZE = 379 ----
XDATA SIZE = 68 184
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

View File

@@ -1,89 +0,0 @@
C51 COMPILER V9.60.7.0 MAIN 08/20/2024 11:07:30 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Objects\main.obj
COMPILER INVOKED BY: D:\Keil5\C51\BIN\C51.EXE ..\User\main.c LARGE OMF2 OPTIMIZE(8,SPEED) BROWSE INCDIR(..\User) DEBUG P
-RINT(.\Listings\main.lst) OBJECT(.\Objects\main.obj)
line level source
1 #include <REGX52.H> // STC89C52RC的寄存器定义
2 #include "UART.h"
3 #include "string.h"
4 #include "stdio.h"
5 #include "oled.h"
6 extern unsigned int rxIndex;
7 extern unsigned char rxBuffer[ARRAY_SIZE];
8 extern unsigned int rx_flag;
9 unsigned int CONNECT_FLEG;//连接标志
10 // 主函数
11 unsigned char conver[64];
12 char *ptr = NULL;
13 void MQTT_CONVER(void);
14 void TCP_UDP_CONVER(void);
15 void main() {
16 1 Serial_Init(); // 初始化串口
17 1 OLED_Init();
18 1 CONNECT_TO_TCP("DX-SMART","SMART@601");
19 1 while (1) {
20 2
21 2 // 主循环,可以添加其他任务
22 2 TCP_UDP_CONVER();
23 2 }
24 1 }
25
26 void TCP_UDP_CONVER(void)
27 {
28 1 if (rx_flag)
29 1 {
30 2 UART_sentString(rxBuffer);
31 2 // CONNECT_TX_Control();
32 2 rxIndex = 0; // 重置索引,准备下一次接收
33 2 memset(rxBuffer,0,ARRAY_SIZE); //清空缓冲区
34 2 }
35 1 }
36 void MQTT_CONVER(void)
37 {
38 1 if (rx_flag)
39 1 {
40 2 if(strstr(rxBuffer,"RECV:test-app")!=NULL)
41 2 {
42 3 ptr = strrchr(rxBuffer,',');
43 3 memcpy(conver,ptr,*(ptr-1));
44 3 while(!WIFI_CheckAck("AT+MQTTPUBRAW=test-w,32,0,0\r\n","OK",2000)!=0);
45 3 buff_memset();//数据有误 清空
*** WARNING C206 IN LINE 45 OF ..\User\main.c: 'buff_memset': missing function-prototype
46 3 UART_sentString(conver);
47 3
48 3 }
49 2
50 2 }
51 1 }
52 void MQTT_CONTROL(void)
53 {
C51 COMPILER V9.60.7.0 MAIN 08/20/2024 11:07:30 PAGE 2
54 1 if (rx_flag)
55 1 {
56 2 CONNECT_TX_Control();
57 2 }
58 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 237 ----
CONSTANT SIZE = 66 ----
XDATA SIZE = 69 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)

View File

@@ -1,287 +0,0 @@
C51 COMPILER V9.60.7.0 OLED 08/20/2024 11:07:30 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE OLED
OBJECT MODULE PLACED IN .\Objects\oled.obj
COMPILER INVOKED BY: D:\Keil5\C51\BIN\C51.EXE ..\User\oled.c LARGE OMF2 OPTIMIZE(8,SPEED) BROWSE INCDIR(..\User) DEBUG P
-RINT(.\Listings\oled.lst) OBJECT(.\Objects\oled.obj)
line level source
1 #include "oled.h"
2 #include "oledfont.h"
3
4 void delay_ms(unsigned int ms)
5 {
6 1 unsigned int a;
7 1 while(ms)
8 1 {
9 2 a=1800;
10 2 while(a--);
11 2 ms--;
12 2 }
13 1 return;
14 1 }
15 void OLED_Show()
16 {
17 1 OLED_ShowCHinese(16,0,0);
18 1 OLED_ShowCHinese(32,0,1);
19 1 OLED_ShowCHinese(48,0,2);
20 1 OLED_ShowCHinese(64,0,3);
21 1 OLED_ShowCHinese(80,0,4);
22 1 OLED_ShowCHinese(96,0,5);
23 1 OLED_ShowString(32,2,"WF24");
24 1
25 1 }
26 #if OLED_MODE==1
//向SSD1106写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{
DATAOUT(dat);
if(cmd)
OLED_DC_Set();
else
OLED_DC_Clr();
OLED_CS_Clr();
OLED_WR_Clr();
OLED_WR_Set();
OLED_CS_Set();
OLED_DC_Set();
}
#else
44 //向SSD1306写入一个字节。
45 //dat:要写入的数据/命令
46 //cmd:数据/命令标志 0,表示命令;1,表示数据;
47 void OLED_WR_Byte(u8 dat,u8 cmd)
48 {
49 1 u8 i;
50 1 if(cmd)
51 1 OLED_DC_Set();
52 1 else
53 1 OLED_DC_Clr();
54 1 OLED_CS_Clr();
C51 COMPILER V9.60.7.0 OLED 08/20/2024 11:07:30 PAGE 2
55 1 for(i=0;i<8;i++)
56 1 {
57 2 OLED_SCLK_Clr();
58 2 if(dat&0x80)
59 2 {
60 3 OLED_SDIN_Set();
61 3 }
62 2 else
63 2 OLED_SDIN_Clr();
64 2 OLED_SCLK_Set();
65 2 dat<<=1;
66 2 }
67 1 OLED_CS_Set();
68 1 OLED_DC_Set();
69 1 }
70 #endif
71 void OLED_Set_Pos(unsigned char x, unsigned char y)
72 {
73 1 OLED_WR_Byte(0xb0+y,OLED_CMD);
74 1 OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
75 1 OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);
76 1 }
77 //开启OLED显示
78 void OLED_Display_On(void)
79 {
80 1 OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
81 1 OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
82 1 OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
83 1 }
84 //关闭OLED显示
85 void OLED_Display_Off(void)
86 {
87 1 OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
88 1 OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF
89 1 OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF
90 1 }
91 //清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
92 void OLED_Clear(void)
93 {
94 1 u8 i,n;
95 1 for(i=0;i<8;i++)
96 1 {
97 2 OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址0~7
98 2 OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址
99 2 OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址
100 2 for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
101 2 } //更新显示
102 1 }
103
104
105 //在指定位置显示一个字符,包括部分字符
106 //x:0~127
107 //y:0~63
108 //mode:0,反白显示;1,正常显示
109 //size:选择字体 16/12
110 void OLED_ShowChar(u8 x,u8 y,u8 chr)
111 {
112 1 unsigned char c=0,i=0;
113 1 c=chr-' ';//得到偏移后的值
114 1 if(x>Max_Column-1){x=0;y=y+2;}
115 1 if(SIZE ==16)
116 1 {
C51 COMPILER V9.60.7.0 OLED 08/20/2024 11:07:30 PAGE 3
117 2 OLED_Set_Pos(x,y);
118 2 for(i=0;i<8;i++)
119 2 OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
120 2 OLED_Set_Pos(x,y+1);
121 2 for(i=0;i<8;i++)
122 2 OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
123 2 }
124 1
125 1 }
126 //m^n函数
127 u32 oled_pow(u8 m,u8 n)
128 {
129 1 u32 result=1;
130 1 while(n--)result*=m;
131 1 return result;
132 1 }
133 //显示2个数字
134 //x,y :起点坐标
135 //len :数字的位数
136 //size:字体大小
137 //mode:模式 0,填充模式;1,叠加模式
138 //num:数值(0~4294967295);
139 void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
140 {
141 1 u8 t,temp;
142 1 u8 enshow=0;
143 1 for(t=0;t<len;t++)
144 1 {
145 2 temp=(num/oled_pow(10,len-t-1))%10;
146 2 if(enshow==0&&t<(len-1))
147 2 {
148 3 if(temp==0)
149 3 {
150 4 OLED_ShowChar(x+(size2/2)*t,y,' ');
151 4 continue;
152 4 }else enshow=1;
153 3
154 3 }
155 2 OLED_ShowChar(x+(size2/2)*t,y,temp+'0');
156 2 }
157 1 }
158 //显示一个字符号串
159 void OLED_ShowString(u8 x,u8 y,u8 *chr)
160 {
161 1 unsigned char j=0;
162 1 while (chr[j]!='\0')
163 1 { OLED_ShowChar(x,y,chr[j]);
164 2 x+=8;
165 2 if(x>120){x=0;y+=2;}
166 2 j++;
167 2 }
168 1 }
169 //显示汉字
170 void OLED_ShowCHinese(u8 x,u8 y,u8 no)
171 {
172 1 u8 t,adder=0;
173 1 OLED_Set_Pos(x,y);
174 1 for(t=0;t<16;t++)
175 1 {
176 2 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
177 2 adder+=1;
178 2 }
C51 COMPILER V9.60.7.0 OLED 08/20/2024 11:07:30 PAGE 4
179 1 OLED_Set_Pos(x,y+1);
180 1 for(t=0;t<16;t++)
181 1 {
182 2 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
183 2 adder+=1;
184 2 }
185 1 }
186 /***********功能描述显示显示BMP图片128×64起始点坐标(x,y),x的范围0127y为页的范围07****************
-*/
187 void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[
-])
188 {
189 1 unsigned int j=0;
190 1 unsigned char x,y;
191 1
192 1 if(y1%8==0) y=y1/8;
193 1 else y=y1/8+1;
194 1 for(y=y0;y<y1;y++)
195 1 {
196 2 OLED_Set_Pos(x0,y);
197 2 for(x=x0;x<x1;x++)
198 2 {
199 3 OLED_WR_Byte(BMP[j++],OLED_DATA);
200 3 }
201 2 }
202 1 }
203
204
205 //初始化SSD1306
206 void OLED_Init(void)
207 {
208 1
209 1
210 1
211 1 OLED_RST_Set();
212 1 delay_ms(100);
213 1 OLED_RST_Clr();
214 1 delay_ms(100);
215 1 OLED_RST_Set();
216 1 OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
217 1 OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
218 1 OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
219 1 OLED_WR_Byte(0x40,OLED_CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
220 1 OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
221 1 OLED_WR_Byte(0xCF,OLED_CMD); // Set SEG Output Current Brightness
222 1 OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常
223 1 OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常
224 1 OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
225 1 OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
226 1 OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
227 1 OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
228 1 OLED_WR_Byte(0x00,OLED_CMD);//-not offset
229 1 OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
230 1 OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
231 1 OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
232 1 OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
233 1 OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
234 1 OLED_WR_Byte(0x12,OLED_CMD);
235 1 OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
236 1 OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
237 1 OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
238 1 OLED_WR_Byte(0x02,OLED_CMD);//
C51 COMPILER V9.60.7.0 OLED 08/20/2024 11:07:30 PAGE 5
239 1 OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
240 1 OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
241 1 OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
242 1 OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7)
243 1 OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
244 1
245 1 OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/
246 1 OLED_Clear();
247 1 OLED_Set_Pos(0,0);
248 1 }
249
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1037 ----
CONSTANT SIZE = 2461 ----
XDATA SIZE = ---- 27
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

View File

@@ -1,58 +0,0 @@
<html>
<body>
<pre>
<h1>礦ision Build Log</h1>
<h2>Tool Versions:</h2>
IDE-Version: μVision V5.38.0.0
Copyright (C) 2022 ARM Ltd and ARM Germany GmbH. All rights reserved.
License Information: 1 1, 21, LIC=TI4EI-T6WYP-WQ90S-LZLT9-S04QZ-NNNW4
Tool Versions:
Toolchain: PK51 Prof. Developers Kit Version: 9.60.7.0
Toolchain Path: D:\Keil5\C51\BIN
C Compiler: C51.exe V9.60.7.0
Assembler: A51.exe V8.2.7.0
Linker/Locator: LX51.exe V4.66.100.0
Library Manager: LIBX51.exe V4.30.1.0
Hex Converter: OHX51.exe V1.47.0.0
CPU DLL: S8051.DLL V3.125.1.0
Dialog DLL: DP51.DLL V2.69.0.0
<h2>Project:</h2>
F:\WF24DEMO\单片机应用资料\单片机串口通信\1.单片机与WF24串口通信资料\2.STC89C52\例程\TCP\C52\Project\51Project.uvproj
Project File Date: 08/07/2024
<h2>Output:</h2>
Rebuild target 'Target 1'
assembling STARTUP.A51...
compiling main.c...
..\User\main.c(45): warning C206: 'buff_memset': missing function-prototype
compiling UART.C...
compiling oled.c...
linking...
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: MQTT_CONVER/MAIN
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: MQTT_CONTROL/MAIN
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: _CONNECT_TO_UDP/UART
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: _CONNECT_TO_MQTT/UART
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: OLED_DISPLAY_ON/OLED
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: OLED_DISPLAY_OFF/OLED
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: _OLED_SHOWNUM/OLED
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: _OLED_DRAWBMP/OLED
*** WARNING L25: DATA TYPES DIFFERENT
SYMBOL: buff_memset
MODULE: .\Objects\main.obj (MAIN)
DEFINED: .\Objects\UART.obj (UART)
Program Size: data=15.1 xdata=383 const=2906 code=5152
creating hex file from ".\Objects\51Project"...
".\Objects\51Project" - 0 Error(s), 10 Warning(s).
Build Time Elapsed: 00:00:01
</pre>
</body>
</html>

View File

@@ -1,505 +0,0 @@
:10000000020F10AC07ED24B0FFE4FD121268EC54AF
:10001000F0C4540F4410FF121268EC540F4401FF57
:1000200002126802109AE508243BF582E43400F5D8
:1000300083E005082290003830070390003BE47508
:10004000F0011205CE0204812000E97F2ED200804B
:1000500018EF540F2490D43440D4FF30040BEF2415
:10006000BFB41A0050032461FFE5096002150905B9
:100070000CE50C7002050B30070E900038E475F0AB
:10008000011205CEEF0205A60212E27403D2078028
:1000900003E4C207F5089000381205E5E4F509F518
:1000A0000BF50CE50960077F2012006980F5750AE1
:1000B000FFC201C200C202C203C205C206C20812C8
:1000C0000035FF700D3007057F0012007AAF0CAECF
:1000D0000B22B4255FC2D5C204120035FF24D0B470
:1000E0000A00501A75F00A780930D50508B6FF01E4
:1000F00006C6A426F620D5047002D20380D924CFE8
:10010000B41A00EF5004C2E5D20402027BD201808F
:10011000C6D20080C0D20280BCD2D580BAD20580BF
:10012000B47F201200692002077401B5090040F174
:10013000120026FF1200690200A3D208D2068095A1
:10014000120026FB120026FA120026F94A4B70060E
:10015000794C7A037BFF20022EE509602A7E008E0F
:100160008275830012049A60060EEE650A70F0C272
:10017000D5EBC0E0EAC0E0E9C0E0EE1202C2D0E098
:10018000F9D0E0FAD0E0FB120481FF60AAEBC0E0F6
:10019000EAC0E0E9C0E0120069D0E02401F9D0E053
:1001A0003400FAD0E0FBE50A0460DCD50AD9808788
:1001B0007BFF7A0279BED202809C79108002790896
:1001C000C206C2088008D2D5790A8004790AC2D54D
:1001D000E50A047002F50AE4FAFDFEFF120026FCAF
:1001E0007B08200113120026FD7B1030000A12004C
:1001F00026FE120026FF7B20EC3382D592D55013C9
:10020000C3E43000069FFFE49EFEE42001039DFD51
:10021000E49CFCE4CBF8C201EC700CCFCECDCCE872
:1002200024F8F870F38017C3EF33FFEE33FEED339D
:10023000FDEC33FCEB33FB994002FB0FD8E9EB30CC
:100240000105F8D0E0C448B201C0E00AEC4D4E4FC1
:1002500078207B0070C2EAB50A0040BCC0E0120200
:10026000C4D0F0D0E0200104C4C0E0C4B201C0F0AA
:10027000120052D0F0D5F0EB0200A31205EE0140BF
:100280005301BA5801114C010D4201BE4F01C64441
:1002900001C64901264301CC5501B04601B04501D4
:1002A000B047036C5001152D01192E013C2B011D87
:1002B00023013A2003552A00D548000001343F3F6E
:1002C0003F00790AA2D5200314300509B9100204B1
:1002D00004B9080104A2D5200602500104200268D6
:1002E0009202B509005034C0E07F203003197F30FE
:1002F000A20272067205500F12031BC202C206C28E
:1003000005C2087F30800F300503E9C0E0120069A4
:10031000300503D0E0F9D0E0B509CC3005177F30C7
:10032000B9100C1200697F583004077F788003B938
:1003300008031200693002057F2D0200697F20202A
:1003400008F87F2B2006F322920280CF286E756C6E
:100350006C2900D2011200263001F8C20178093060
:10036000D50108F60200D52D504349581200262425
:1003700003B405004001E49003679312005A743AF5
:1003800012005AD2037509040201BAE709F608DF20
:10039000FA8046E709F208DFFA803E88828C83E71C
:1003A00009F0A3DFFA8032E309F608DFFA8078E388
:1003B00009F208DFFA807088828C83E309F0A3DFFA
:1003C000FA806489828A83E0A3F608DFFA8058897C
:1003D000828A83E0A3F208DFFA804C80D280FA8020
:1003E000C680D4806980F28033801080A680EA8045
:1003F0009A80A880DA80E280CA803389828A83EC7E
:10040000FAE493A3C8C582C8CCC583CCF0A3C8C501
:1004100082C8CCC583CCDFE9DEE7800D89828A8380
:10042000E493A3F608DFF9ECFAA9F0EDFB22898248
:100430008A83ECFAE0A3C8C582C8CCC583CCF0A3FC
:10044000C8C582C8CCC583CCDFEADEE880DB898200
:100450008A83E493A3F208DFF980CC88F0EF60018F
:100460000E4E60C388F0ED2402B4040050B9F5824A
:10047000EB2402B4040050AF23234582239003DB16
:1004800073BB010689828A83E0225002E722BBFE09
:1004900002E32289828A83E49322BB010CE582294C
:1004A000F582E5833AF583E0225006E92582F8E6F5
:1004B00022BBFE06E92582F8E222E58229F582E5E3
:1004C000833AF583E49322EF8DF0A4A8F0CF8CF06B
:1004D000A428CE8DF0A42EFE22BC000BBE0029EF76
:1004E0008DF084FFADF022E4CCF875F008EF2FFF1B
:1004F000EE33FEEC33FCEE9DEC984005FCEE9DFEE9
:100500000FD5F0E9E4CEFD22EDF8F5F0EE8420D22F
:100510001CFEADF075F008EF2FFFED33FD4007989E
:100520005006D5F0F222C398FD0FD5F0EA22C2D5CD
:10053000EC30E709B2D5E4C39DFDE49CFCEE30E766
:1005400015B2D5E4C39FFFE49EFE1204D9C3E49D17
:10055000FDE49CFC80031204D930D507C3E49FFF5F
:10056000E49EFE22A3F8E0C5F025F0F0E5821582B6
:1005700070021583E0C838F0E822EF4E6012EF6099
:10058000010EEDBB010B89828A83F0A3DFFCDEFA4A
:100590002289F05007F709DFFCA9F022BBFEFCF32B
:1005A00009DFFCA9F022BB010689828A83F0225070
:1005B00002F722BBFE01F322C5F0F8A3E028F0C544
:1005C000F0F8E582158270021583E038F022F8E039
:1005D000FBA3A3E0F925F0F0E582158270021583F4
:1005E000E0FA38F022EBF0A3EAF0A3E9F022D0839E
:1005F000D082F8E4937012740193700DA3A393F862
:10060000740193F5828883E4737402936860EFA3A6
:10061000A3A380DF900178E4F0A3F0A3F090006042
:10062000E07002A3E070030207AE9000E7E0700202
:10063000A3E070030207AB90004674FFF0A3741DA3
:10064000F0A374BDF07B017A0079A5120C5DE94A34
:100650004B70030206F17B017A0079A57D2C121004
:1006600020900178EBF0A3EAF0A3E9F01213C2EFB7
:1006700024FDFFEE34FFFEEF64014E60030207AB82
:10068000900178E0FBA3E0FAA3E0F99000011204E6
:100690009AFF3395E0FEEF24D0FFEE34FFFE900189
:1006A0007BF0A3EFF0EE60030207AEEF14B4070097
:1006B00040030207AE9006C375F003A4C58325F07E
:1006C000C583730206D80206DD0206E20206E502D1
:1006D00006E80206EB0206EEC2A50207ABD2A502AF
:1006E00007AB02079102079602079B0207A10207C8
:1006F000A790004674FFF0A3741DF0A374C7F07BAD
:10070000017A0079A5120C5DE94A4B70030207AB30
:100710007B017A0079A57D2C121020900178EBF0F6
:10072000A3EAF0A3E9F01213C2EF24FDFFEE34FFB9
:10073000FEEF64014E7074900178E0FBA3E0FAA331
:10074000E0F990000112049AFF3395E0FEEF24D007
:10075000FFEE34FFFE90017BF0A3EFF0EE704FEF61
:1007600014B40700504890077475F003A4C583259E
:10077000F0C5837302078902078D0207910207966D
:1007800002079B0207A10207A7C2A5801ED2A5806F
:100790001A12121580151212918010C2A6D2A780CB
:1007A0000AD2A6C2A78004C2A6C2A71213492290E9
:1007B0000121EBF0A3EAF0A3E9F090003B74FFF015
:1007C000A3741DF0A374DEF0A37403F0A374E8F027
:1007D0007BFF7A1E7990120BBAEF4E60DD120B9EF2
:1007E000EF4E60F990003B74FFF0A3741DF0A3740A
:1007F000DEF0A37407F0A374D0F07BFF7A1D79E1DB
:10080000120BBAEF4E60DD90003B74FFF0A3741D35
:10081000F0A374EFF0900121E0F9A3E0FAA3E090D7
:10082000003EC9F0A3EAF0A3E9F0900124E0F9A3A7
:10083000E0FAA3E0900041C9F0A3EAF0A3E9F07B5D
:10084000017A01792712008B90003B74FFF0A374AA
:100850001EF0A37400F0A37413F0A37488F07B015E
:100860007A017927120BBAEF4E60DD90003B74FFDE
:10087000F0A3741DF0A374DEF0A37403F0A374E876
:10088000F07BFF7A1E799F120BBAEF4E7F00700249
:100890007F01EF70D690003B74FFF0A3741EF0A3AD
:1008A00074E2F0A37407F0A374D0F07BFF7A1E7992
:1008B000BE120BBAEF4E7F0070027F01EF70D69030
:1008C000003B74FFF0A3741DF0A374DEF0A3740763
:1008D000F0A374D0F07BFF7A1E79F1120BBAEF4EC1
:1008E0007F0070027F01EF70D690003B74FFF0A391
:1008F000741DF0A374DEF0A37407F0A374D0F07B32
:10090000FF7A1F7909120BBAEF4E7F0070027F0148
:10091000EF70D67BFF7A1F79271213841213499048
:100920000060E4F0A304F022900000EBF0A3EAF0F2
:10093000A3E9F0900000E0F9A3E0FAA3E090003B07
:10094000C9F0A3EAF0A3E9F0A37405F0A374DCF006
:100950007BFF7A1D79D5120BBA120B9EEF4E60F910
:1009600090003B74FFF0A3741DF0A374DEF0A37439
:1009700007F0A374D0F07BFF7A1D79E1120BBAEF78
:100980004E60DD90003B74FFF0A3741DF0A374EF84
:10099000F0900000E0F9A3E0FAA3E090003EC9F077
:1009A000A3EAF0A3E9F0900003E0F9A3E0FAA3E0E2
:1009B000900041C9F0A3EAF0A3E9F07B017A007945
:1009C0000612008B90003B74FFF0A3741EF0A3741A
:1009D00000F0A37413F0A37488F07B017A00790609
:1009E000120BBAEF4E60DD90003B74FFF0A3741D54
:1009F000F0A374DEF0A37403F0A374E8F07BFF7A35
:100A00001E790A120BBAEF4E7F0070027F01EF7061
:100A1000D690003B74FFF0A3741EF0A3743EF0A3C5
:100A2000740BF0A374B8F07BFF7A1E7919120BBA1D
:100A3000EF4E60DD90003B74FFF0A3741DF0A374D3
:100A4000DEF0A37403F0A374E8F07BFF7A1E794A0A
:100A5000120BBAEF4E60DD12137E900060E4F0A33B
:100A600004F0229000E9EBF0A3EAF0A3E9F0900093
:100A7000E9E0F9A3E0FAA3E090003BC9F0A3EAF0B3
:100A8000A3E9F0A37405F0A374DCF07BFF7A1D7971
:100A9000D5120BBA120B9EEF4E60F990003B74FF1B
:100AA000F0A3741DF0A374DEF0A37407F0A374D058
:100AB000F07BFF7A1D79E1120BBAEF4E60DD9000FA
:100AC0003B74FFF0A3741DF0A374EFF09000E9E015
:100AD000F9A3E0FAA3E090003EC9F0A3EAF0A3E98D
:100AE000F09000ECE0F9A3E0FAA3E0900041C9F037
:100AF000A3EAF0A3E9F07B017A0079EF12008B9072
:100B0000003B74FFF0A3741EF0A37400F0A37413F1
:100B1000F0A37488F07B017A0079EF120BBAEF4EE4
:100B200060DD90003B74FFF0A3741DF0A374DEF051
:100B3000A37403F0A374E8F07BFF7A1E790A120B0A
:100B4000BAEF4E7F0070027F01EF70D690003B74C9
:100B5000FFF0A3741EF0A3743EF0A3740BF0A37413
:100B6000B8F07BFF7A1E7964120BBAEF4E60DD900D
:100B7000003B74FFF0A3741DF0A374DEF0A37403B4
:100B8000F0A374E8F07BFF7A1E794A120BBAEF4E9D
:100B900060DD12137E900060E4F0A304F022900068
:100BA0003B74FFF0A3741DF0A374DEF0A37403F094
:100BB000A374E8F07BFF7A1D79D9900038EBF0A39D
:100BC000EAF0A3E9F0900040E4F0A3F0A3F01213E0
:100BD00049900038E0FBA3E0FAA3E0F912138490F7
:100BE000003EE0FEA3E0FF7C007D0A12052E90008F
:100BF0003EEEF0A3EFF090003E74FFF5F0120564B6
:100C000045F060527F0A7E001213AD9000E7E0705D
:100C100004A3E0640170DF90003BE0F9A3E0FAA3D5
:100C2000E0900046C9F0A3EAF0A3E9F07B017A0066
:100C300079A5120C5D900040EBF0A3EAF0A3E9F077
:100C4000900040E0FBA3E0FAA3E04A4B60A8121337
:100C5000497E007F0122121349E4FEFF22900043E7
:100C6000EBF0A3EAF0A3E9F0A3E0FBA3E0FAA3E032
:100C7000F91204817003020D09900043E0FBA3E028
:100C8000FAA3E0F91204817003020D15900046E00A
:100C9000F9A3E0FAA3E0A3C9F0A3EAF0A3E9F09076
:100CA0000043A3E0FAA3E0F990004CEBF0A3EAF0D4
:100CB000A3E9F0900049E0FBA3E0FAA3E0F91204F5
:100CC00081FF602690004CE0FBA3E0FAA3E0F9125C
:100CD00004816F701590004A75F0011205B89000FC
:100CE0004DE475F0011205B880C9900049E0FBA3FE
:100CF000E0FAA3E0F91204817002800D900044E450
:100D000075F0011205B8020C79900043E0FBA3E0F6
:100D1000FAA3E0F9227B007A00790022D2A27F6454
:100D20007E00121364C2A27F647E00121364D2A2FA
:100D3000E4FD7FAE121268E4FF1212687F101212F7
:100D4000687F401212687F811212687FCF1212688A
:100D50007FA11212687FC81212687FA61212687FE4
:100D6000A81212687F3F1212687FD3121268E4FF44
:100D70001212687FD51212687F801212687FD91212
:100D800012687FF11212687FDA1212687F12121253
:100D9000687FDB1212687F401212687F201212688F
:100DA0007F021212687F8D1212687F141212687F00
:100DB000A41212687FA61212687FAF1212687FAF6A
:100DC000121268121291E4FDFF020003900163EF1A
:100DD000F0A3EDF0A3EAF0A3EBF0E490016BF09048
:100DE0000169F0900167E0FF900169E0FEC39F4058
:100DF00003020E7AC3EF9E14FD7F0A12132B90019B
:100E000065E0FCA3E0FDCFCDCFCECCCE1204D97CE3
:100E1000007D0A1204D990016AEDF0A3E0703090D1
:100E20000167E014FF900169E0FEC39F5021A3E039
:100E30007017900168E0C3138EF0A4FF900163E087
:100E40002FFFA3E0FD7B20802590016B7401F090C3
:100E50000168E0C313FFA3E0FEEF8EF0A4FF900152
:100E600063E02FFFA3E0FD90016AE02430FB121144
:100E70000A900169E004F0020DE3229000E7E070BF
:100E800002A3E07003020F0F90004674FFF0A374FA
:100E90001FF0A3744BF07B017A0079A5120C5DE979
:100EA0004A4B606B7B017A0079A57D2C1210209053
:100EB00000A2EBF0A3EAF0A3E9F090FFFF12049A7E
:100EC000FF3395E0FE78627C007D019000A2E0FB9C
:100ED000A3E0FAA3E0F912045B90003B74FFF0A3D7
:100EE000741FF0A37477F0A37407F0A374D0F07BA1
:100EF000FF7A1F7959120BBAEF4E7F0070027F0103
:100F0000EF70D61213497B017A00796212138422A2
:100F1000787FE4F6D8FD758121020F57021309E4AA
:100F200093A3F8E493A34003F68001F208DFF48072
:100F300029E493A3F85407240CC8C333C4540F44C2
:100F400020C8834004F456800146F6DFE4800B019C
:100F5000020408102040809013D7E47E019360BC07
:100F6000A3FF543F30E509541FFEE493A360010E34
:100F7000CF54C025E060A840B8E493A3FAE493A35B
:100F8000F8E493A3C8C582C8CAC583CAF0A3C8C57C
:100F900082C8CAC583CADFE9DEE780BE900159EF87
:100FA000F090015BEBF0E4900160F0A3F090015C45
:100FB000E0FF54077008EF131313541F800A9001C9
:100FC0005CE0131313541F04900162F0900162ED72
:100FD000F090015CE0FF900162E0FDC39F50409003
:100FE0000159E0FF120003E0FC90015BE0FFECC35D
:100FF0009F502490015DE0FBA3E0FAA3E0F9A3E495
:1010000075F00112056485F082F58312049AFF7D64
:10101000011212680C80D2900162E004F080B222CA
:10102000900172EBF0A3EAF0A3E9F0A3EBF0A3EADE
:10103000F0A3E9F0900175E0FBA3E0FAA3E0F91258
:101040000481600C900176E475F0011205B880E42B
:10105000900175E0FBA3E0FAA3E0F91204816D7042
:101060000122900172E0FBA3E0FAA3E0F9EBC0E0FB
:10107000EAC0E0E9C0E0A3E0FBA374FFF5F01205CD
:1010800064FAD082D083D0E06B7009E5F06582709D
:1010900003EA658370BAFBFAF922C0E0C0F0C083AE
:1010A000C082C0D075D000C000C006C007309849CB
:1010B000C2989000E5E475F001120564FE74A52560
:1010C000F0F58274003EF583E599F09000E5E0FECE
:1010D000A3E0FF24A4F58274003EF583E0B40A087F
:1010E0009000E7E4F0A304F0EF64404E700B900032
:1010F000E5F0A3F0A3F0A304F0D007D006D000D011
:10110000D0D082D083D0F0D0E032AA07A905AF03B7
:10111000E4FCEF24E0FBEAD3947F4004E4FA0909FD
:10112000AF02AD01120003E4FC75F010EBA42CF546
:1011300082E435F0F583E582244DF582E5833416AB
:101140001212610CECB408E1AF02E904FD120003D5
:10115000E4FC75F010EBA42CF582E435F0F583E5A2
:10116000822455F582E58334161212610CECB40822
:10117000E12290016CEFF0A3EDF0A3EBF0A3EAF015
:10118000A3E9F0E4A3F090016EE0FBA3E0FAA3E092
:10119000F9A3E0F58275830012049AFB60279001A1
:1011A0006CE0FFA3E0FD12110A90016CE02408F04E
:1011B000E0D394784007E4F0A3E02402F0900171BA
:1011C000E004F080C122A907AA05E490017EF01294
:1011D0000003E4FC75F040EBA4243DF582E5F03417
:1011E0001C12125790017EE004F00CECB410E5AF35
:1011F00001EA04FD120003E4FC75F040EBA4245D59
:10120000F582E5F0341C12125790017EE004F00CD8
:10121000ECB410E522E4FBFD7F101211C67B01E463
:10122000FD7F201211C67B02E4FD7F301211C67BC8
:1012300003E4FD7F401211C67B04E4FD7F501211D0
:10124000C67B05E4FD7F601211C67BFF7A1479200E
:101250007D027F20021172F583E5822CF582E43550
:1012600083F583E493FF7D01ED6004D2A38002C285
:10127000A3C2A4E4FEC2A0EF30E704D2A18002C260
:10128000A1D2A0EF25E0FF0EEEB408E9D2A4D2A3CC
:1012900022E4FCEC24B0FFE4FD121268E4FF121219
:1012A000687F10121268E4FB7D01E4FF1212680BE4
:1012B000EBB480F40CECB408DA229000E7E07002A2
:1012C000A3E0601D7B017A0079A5121384E49000ED
:1012D000E5F0A3F0FE7F40FD7B017A0079A51205C1
:1012E0007A22EFB40A07740D1212ED740A309811C5
:1012F000A899B8130CC2983098FDA899C298B81153
:10130000F63099FDC299F59922121397120D1C908F
:10131000000374FFF0A3741FF0A37441F07BFF7A05
:101320001F79381209281212BA80FB90017DEFF064
:10133000A9057F017E00AD0119ED600C90017DE0F3
:10134000FD7C001204C780EE227E007F407D007B82
:10135000017A0079A512057AE49000E5F0A3F0A3E4
:10136000F0A3F022EF4E60157D087C07ED1DAA0466
:1013700070011C4A70F6EF1F70EA1E80E7227BFFA7
:101380007A1E7957120481FF600C12141874012917
:10139000F9E43AFA80EE2275985053890F43892078
:1013A000758BFD758DFDD28ED2ACD2AF22EF1FAC06
:1013B0000670011E4C600A7D027CEFDCFEDDFC80C5
:1013C000EC22E4FFFE120481600C0FEF70010E09A5
:1013D000E970F20A80EF224300A20000004200E51B
:1013E00000004200E7000000E4FD7F8D1212687FDC
:1013F000141212687FAF021268E4FD7F8D1212682A
:101400007F101212687FAE0212689000E7E070024F
:10141000A3E06003120614228F993099FDC299222D
:1014200057463234000000000000000000002F008A
:101430000000000700070000147F147F1400242A16
:101440007F2A120062640813230036495522500097
:10145000000503000000001C224100000041221C86
:10146000000014083E08140008083E0808000000A8
:10147000A060000008080808080000606000000084
:101480002010080402003E5149453E0000427F40C2
:1014900000004261514946002141454B310018147A
:1014A000127F10002745454539003C4A4949300024
:1014B00001710905030036494949360006494929A1
:1014C0001E000036360000000056360000000814EA
:1014D00022410000141414141400004122140800C6
:1014E000020151090600324959513E007C12111285
:1014F0007C007F49494936003E41414122007F41FD
:1015000041221C007F49494941007F090909010026
:101510003E4149497A007F0808087F0000417F4129
:1015200000002040413F01007F08142241007F401D
:10153000404040007F020C027F007F0408107F00C3
:101540003E4141413E007F09090906003E415121CB
:101550005E007F09192946004649494931000101C9
:101560007F0101003F4040403F001F2040201F00FE
:101570003F4038403F0063140814630007087008B8
:101580000700615149454300007F41410000552A51
:10159000552A55000041417F000004020102040069
:1015A00040404040400000010204000020545454D8
:1015B00078007F484444380038444444200038448C
:1015C00044487F00385454541800087E0901020032
:1015D00018A4A4A47C007F080404780000447D4083
:1015E00000004080847D00007F10284400000041FE
:1015F0007F4000007C04180478007C080404780014
:10160000384444443800FC242424180018242418A6
:10161000FC007C0804040800485454542000043F93
:10162000444020003C4040207C001C2040201C0006
:101630003C4030403C004428102844001CA0A0A09E
:101640007C004464544C441414141414140000001A
:10165000000000000000000000000000000000008A
:10166000F800000000000000333000000000100C03
:1016700006100C0600000000000000000040C078CA
:1016800040C0784000043F04043F04040000708818
:10169000FC08300000001820FF211E0000F008F0B8
:1016A00000E018000000211C031E211E0000F008AD
:1016B00088700000001E2123241927211010160E07
:1016C000000000000000000000000000000000001A
:1016D000E018040200000000071820400000020487
:1016E00018E0000000004020180700000040408083
:1016F000F0804040000202010F01020200000000E1
:10170000F0000000000101011F01010100000000C4
:10171000000000000080B070000000000000000029
:1017200000000000000001010101010101000000B2
:101730000000000000003030000000000000000049
:101740000080601804006018060100000000E0102E
:10175000080810E000000F102020100F00001010EB
:10176000F8000000000020203F202000000070084A
:10177000080888700000302824222130000030083A
:1017800088884830000018202020110E000000C07A
:101790002010F8000000070424243F240000F8086B
:1017A00088880808000019212020110E0000E01090
:1017B0008888180000000F112020110E0000380842
:1017C00008C83808000000003F00000000007088D2
:1017D0000808887000001C222121221C0000E01053
:1017E000080810E0000000312222110F0000000064
:1017F000C0C0000000000000303000000000000009
:1018000080000000000000806000000000000080F8
:101810004020100800000102040810200040404051
:101820004040404000040404040404040000081084
:1018300020408000000020100804020100007048D1
:10184000080808F0000000003036010000C030C871
:1018500028E810E0000718272423140B000000C01C
:1018600038E0000000203C23020227382008F888D6
:101870008888700000203F202020110E00C0300812
:101880000808083800071820202010080008F80869
:10189000080810E000203F202020100F0008F888E2
:1018A00088E8081000203F20202320180008F8882E
:1018B00088E8081000203F200003000000C0300826
:1018C000080838000007182020221E020008F80827
:1018D000000008F808203F210101213F20000808EE
:1018E000F8080800000020203F2020000000000829
:1018F00008F8080800C08080807F00000008F88891
:10190000C028180800203F20012638200008F808C9
:101910000000000000203F20202020300008F8F8C0
:1019200000F8F80800203F003F003F200008F83092
:10193000C00008F808203F200007183F00E010080A
:10194000080810E0000F10202020100F0008F808F1
:10195000080808F000203F210101010000E0100804
:10196000080810E0000F18242438504F0008F888A9
:101970008888887000203F2000030C302000708889
:1019800008080838000038202121221C0018080807
:10199000F8080818000000203F2000000008F808A0
:1019A000000008F808001F202020201F0008788869
:1019B0000000C83808000007380E010000F80800D1
:1019C000F80008F800033C0700073C03000818680B
:1019D000808068180820302C03032C30200838C879
:1019E00000C83808000000203F2000000010080850
:1019F00008C83808002038262120201800000000E0
:101A0000FE020202000000007F40404000000C3057
:101A1000C000000000000000010638C00000020203
:101A200002FE000000004040407F00000000000473
:101A3000020202040000000000000000000000009C
:101A40000000000000808080808080808000020292
:101A50000400000000000000000000000000008002
:101A600080808000000019242222223F2008F800F4
:101A70008080000000003F112020110E00000000B7
:101A80008080800000000E11202020110000000046
:101A9000808088F800000E112020103F2000008078
:101AA0008080800000001F222222221300008080FC
:101AB000F0888888180020203F2020000000008047
:101AC0008080808000006B94949493600008F800FC
:101AD0008080800000203F210000203F200080986F
:101AE00098000000000020203F202000000000009F
:101AF000809898000000C08080807F000008F80077
:101B00000080808000203F24022D30200000080843
:101B1000F8000000000020203F202000008080808E
:101B20008080808000203F20003F20003F80800098
:101B30008080800000203F210000203F20000080A6
:101B40008080800000001F202020201F0080800057
:101B5000808000000080FFA12020110E0000000006
:101B60008080808000000E112020A0FF8080808077
:101B7000008080800020203F2120000100000080A4
:101B80008080808000003324242424190000808079
:101B9000E0808000000000001F2020000080800006
:101BA0000000808000001F202020103F20808080C7
:101BB000000080808000010E300806010080800057
:101BC00080008080800F300C030C300F000080807C
:101BD00000808080000020312E0E31200080808027
:101BE000000080808080818E701806010000808057
:101BF00080808080000021302C22213000000000F5
:101C000000807C020200000000003F404000000015
:101C100000FF00000000000000FF000000000202C2
:101C20007C800000000040403F00000000000601F2
:101C30000102020404000000000000000020202037
:101C400020202020FF202020202020200000000035
:101C50000000000000000000000000000080804044
:101C600020100C0300030C102040808000000000B6
:101C70000000000000000000000000000000010162
:101C8000FD55555755555555FD0101000000000003
:101C900000000000000000000000000000809088AC
:101CA000454F55252525554D458080800000000075
:101CB00000000000000000000000000000101010F4
:101CC0001010FF1010F0101116D0101000000000BE
:101CD0000000000000000000000000000080402024
:101CE00018064120103F4442414040780000000067
:101CF000000000000000000000000000000010884C
:101D0000864040202F509008020408000000000088
:101D100000000000000000000000000000010100C1
:101D2000FF555555557F555555554100000000004C
:101D3000000000000000000000000000002424A4B7
:101D4000FEA3220022CC0000FF00000000000000E3
:101D50000000000000000000000000000008060174
:101D6000FF00010404040404FF020202000000005A
:101D70000000000000000000000000000010101033
:101D8000FF109008888888FF888888080000000075
:101D90000000000000000000000000000004448279
:101DA0007F01808040432C10284681800000000085
:101DB0000000000000000000000000000031393287
:101DC0002E3136382E3000524543563A74657374BE
:101DD0002D617070002B2B2B0041540D0A004F4BCE
:101DE0000041542B43574D4F44453D300D0A0041AF
:101DF000542B43574A41503D25732C25730D0A003F
:101E00002B43574A41503A312C0041542B434950FF
:101E10004D4F44453D310D0A0041542B4349505329
:101E2000544152543D5443502C3139322E313638BE
:101E30002E302E3232332C323334370D0A002B43FE
:101E4000495053544152543A310041542B43495064
:101E500053454E440D0A003A436F6E6E65637465D8
:101E6000640D0A0041542B43495053544152543D90
:101E70005544502C3139322E3136382E302E3134F3
:101E8000362C323334352C313131322C300D0A00BE
:101E900041542B4D515454434C45414E0D0A004181
:101EA000542B4D5154544C4F4E47434C49454E547E
:101EB00049443D57462D54455354320D0A00415470
:101EC0002B4D515454434F4E4E3D62726F6B6572B1
:101ED0002E656D71782E696F2C313838332C300DAA
:101EE0000A004D515454434F4E4E45435445443AD5
:101EF0000041542B4D5154545355423D74657374F5
:101F00002D6170702C300D0A0041542B4D515454EA
:101F10005055425241573D746573742D772C3332BE
:101F20002C302C300D0A004D5154545F436F6E6EAF
:101F300065637465640D0A0044582D534D41525435
:101F400000534D4152544036303100524543563AC9
:101F5000746573742D6170700041542B4D5154544D
:101F60005055425241573D746573742D772C33326E
:0A1F70002C302C300D0A004F4B00FE
:00000001FF

View File

@@ -1,7 +0,0 @@
".\Objects\STARTUP.obj",
".\Objects\main.obj",
".\Objects\UART.obj",
".\Objects\oled.obj"
TO ".\Objects\51Project"
PRINT(".\Listings\51Project.map")

View File

@@ -1,198 +0,0 @@
$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

View File

@@ -1,209 +0,0 @@
#include "UART.h"
#include <string.h>
#include "oled.h"
#include <stdio.h>
// 用于存储接收数据的数组
unsigned char rxBuffer[ARRAY_SIZE];
unsigned int rxIndex = 0; // 接收数据的索引
unsigned int rx_flag=0;
extern unsigned int CONNECT_FLEG;//连接标志
// 初始化串口
void Serial_Init() {
SCON = 0x50; // 设置为模式18位数据可变波特率
TMOD &= 0x0F; // 清除定时器1模式位
TMOD |= 0x20; // 设置定时器1为8位自动重装模式
TH1 = TL1 = 256 - (11059200 / 12 / 32) / BAUDRATE; // 设置波特率
TR1 = 1; // 启动定时器1
ES = 1; // 开启串口中断
EA = 1; // 开启全局中断
}
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void buff_memset(void)
{
memset(rxBuffer,0,64);
rxIndex=0;
rx_flag = 0;
}
unsigned int WIFI_CheckAck(char* src, char* dest, int timeout)
{
char *check = NULL;
//清空缓冲
buff_memset();
UART_sentString(src);
timeout=timeout/10;//10ms处理一次
while(timeout--)
{
Delay(10);//延时1ms
if(rx_flag==1)
{
check = strstr(rxBuffer,dest);
if(check != NULL)
{
buff_memset();//数据有误 清空
return 1;
}
}
}
buff_memset();//数据有误 清空
return 0;//超时
}
sbit LED = P2^5;
sbit motor1 = P2^6;
sbit motor2 = P2^7;
void CONNECT_TX_Control(void)
{
char *ptr = NULL;
int number;
if (CONNECT_FLEG)
{
if(rx_flag)
{
if(strstr(rxBuffer,"192.168.0")!=NULL)
{
ptr = strrchr((char*)rxBuffer,','); // 以最后一个,为准后面为数据
if(strlen(ptr)-3==1) //判断接收到为一位数据 ,*\r\n
{
number = ptr[1]-'0';
switch(number)
{
case 1: LED = 0 ; break;
case 2: LED = 1; break;
case 3:OLED_Show(); break;
case 4:OLED_Clear(); break;
case 5:motor1=0;motor2=1; break;
case 6:motor1=1;motor2=0; break;
case 7:motor1=0;motor2=0 ; break;
default: return;
}
}
}
else if(strstr((char *)rxBuffer,"RECV:test-app")!=NULL)
{
ptr = strrchr((char*)rxBuffer,','); // 以最后一个,为准后面为数据
if(strlen(ptr)-3==1) //判断接收到为一位数据 ,*\r\n
{
number = ptr[1]-'0';
switch(number)
{
case 1: LED = 0 ; break;
case 2: LED = 1; break;
case 3:OLED_Show(); break;
case 4:OLED_Clear(); break;
case 5:motor1=0;motor2=1; break;
case 6:motor1=1;motor2=0; break;
case 7:motor1=0;motor2=0 ; break;
default: return;
}
}
}
}
buff_memset();//数据有误 清空
}
}
void CONNECT_TO_TCP(unsigned char* id,unsigned char *password)
{
unsigned char buf[50];
WIFI_CheckAck("+++",id,1500); //确保其退出透传
//while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
while(!WIFI_CheckAck("AT\r\n","OK",1000));
while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000));
sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));
while(!WIFI_CheckAck("AT+CIPMODE=1\r\n","OK",1000)!=0);
while(!WIFI_CheckAck("AT+CIPSTART=TCP,192.168.0.223,2347\r\n","+CIPSTART:1",3000));
while(!WIFI_CheckAck("AT+CIPSEND\r\n","OK",1000));
UART_sentString(":Connected\r\n");
CONNECT_FLEG = 1;
}
void CONNECT_TO_UDP(unsigned char* id,unsigned char *password)
{
unsigned char buf[50];
WIFI_CheckAck("+++",id,1500); //确保其退出透传
//while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
while(!WIFI_CheckAck("AT\r\n","OK",1000));
while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000));
sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));
while(!WIFI_CheckAck("AT+CIPMODE=1\r\n","OK",1000)!=0);
while(!WIFI_CheckAck("AT+CIPSTART=UDP,192.168.0.146,2345,1112,0\r\n","+CIPSTART:1",3000)); //192.168.0.150,2345为IP地址 2345 端口号1112 是模块设置的端口号 0 UDP固定目标模式
while(!WIFI_CheckAck("AT+CIPSEND\r\n","OK",1000));
UART_sentString(":Connected\r\n");
CONNECT_FLEG = 1;
}
void CONNECT_TO_MQTT(unsigned char* id,unsigned char *password)
{
unsigned char buf[50];
while(!WIFI_CheckAck("AT+MQTTCLEAN\r\n","OK",1000));
//while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
while(!WIFI_CheckAck("AT\r\n","OK",1000));
while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000)); //STA模式
sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));//连接WIFI
while(!WIFI_CheckAck("AT+MQTTLONGCLIENTID=WF-TEST2\r\n","OK",1000)!=0);//配置 MQTT 客户端所需的客户端 ID、用户名和密码
while(!WIFI_CheckAck("AT+MQTTCONN=broker.emqx.io,1883,0\r\n","MQTTCONNECTED:",2000)!=0);//连接 MQTT 服务器
while(!WIFI_CheckAck("AT+MQTTSUB=test-app,0\r\n","OK",2000)!=0);//订阅主题 test-app
while(!WIFI_CheckAck("AT+MQTTPUBRAW=test-w,32,0,0\r\n","OK",2000)!=0);
UART_sentString("MQTT_Connected\r\n");
buff_memset();
CONNECT_FLEG = 1;
}
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(!TI);
TI=0;
}
void UART_sentString(char *str)
{
while(*str){
UART_SendByte(*str);
str++;
}
}
// 串口接收中断服务程序
void Serial_ISR() interrupt 4 {
if (RI) {
RI = 0; // 清除接收中断标志
rxBuffer[rxIndex++] = SBUF; // 存储接收到的数据
if(rxBuffer[rxIndex-1]=='\n')
{
rx_flag=1;
}
if(rxIndex==64)
{
rxIndex=0;
rx_flag=1;
}
}
}

View File

@@ -1,16 +0,0 @@
#ifndef _UART_H_
#define _UART_H_
#include <REGX52.H> // STC89C52RC的寄存器定义
#define BAUDRATE 9600 // 波特率
#define ARRAY_SIZE 64 // 数组大小
void Serial_Init();
void Uart_send_String();
void UART_SendByte(unsigned char Byte);
void UART_sentString(char *str);
void Delay(unsigned int xms);
unsigned int WIFI_CheckAck(char* src, char* dest, int timeout);
void CONNECT_TO_TCP(unsigned char* id,unsigned char *password);
void CONNECT_TO_UDP(unsigned char* id,unsigned char *password);
void CONNECT_TO_MQTT(unsigned char* id,unsigned char *password);
void CONNECT_TX_Control(void);
#endif

View File

@@ -1,75 +0,0 @@
//**** 声明 ********************************************************************
/*******************************************************************************
* 下面来自互联开源程序,由深圳市大夏龙雀科技有限公司收集
* 方便用户参考学习,本公司不提供任何技术支持
* 程序仅供测试参考,不能应用在实际工程中,不一定能通过编译
* 公司网站 http://www.szdx-smart.com/
* 淘宝网址 https://shop184598174.taobao.com/?spm=a1z10.5-c-s.w12096189-21564973333.3.547b1176WCCDxR&scene=taobao_shop
*******************************************************************************/
/********************************************************************
* 文件名 WF24-TCP协议应用
* 描述 : 该文件实现WF24和单片机数据透传。
***********************************************************************/
/*
Name: TCP
Created: 2024/8/21
Author: WAM
*/
#include <REGX52.H> // STC89C52RC的寄存器定义
#include "UART.h"
#include "string.h"
#include "stdio.h"
#include "oled.h"
extern unsigned int rxIndex;
extern unsigned char rxBuffer[ARRAY_SIZE];
extern unsigned int rx_flag;
unsigned int CONNECT_FLEG;//连接标志
// 主函数
unsigned char conver[64];
char *ptr = NULL;
void MQTT_CONVER(void);
void TCP_UDP_CONVER(void);
void main() {
Serial_Init(); // 初始化串口
OLED_Init();
CONNECT_TO_TCP("DX-SMART","SMART@601");
while (1) {
// 主循环,可以添加其他任务
TCP_UDP_CONVER();
}
}
void TCP_UDP_CONVER(void)
{
if (rx_flag)
{
UART_sentString(rxBuffer);
// CONNECT_TX_Control();
rxIndex = 0; // 重置索引,准备下一次接收
memset(rxBuffer,0,ARRAY_SIZE); //清空缓冲区
}
}
void MQTT_CONVER(void)
{
if (rx_flag)
{
if(strstr(rxBuffer,"RECV:test-app")!=NULL)
{
ptr = strrchr(rxBuffer,',');
memcpy(conver,ptr,*(ptr-1));
while(!WIFI_CheckAck("AT+MQTTPUBRAW=test-w,32,0,0\r\n","OK",2000)!=0);
buff_memset();//数据有误 清空
UART_sentString(conver);
}
}
}
void MQTT_CONTROL(void)
{
if (rx_flag)
{
CONNECT_TX_Control();
}
}

View File

@@ -1,249 +0,0 @@
#include "oled.h"
#include "oledfont.h"
void delay_ms(unsigned int ms)
{
unsigned int a;
while(ms)
{
a=1800;
while(a--);
ms--;
}
return;
}
void OLED_Show()
{
OLED_ShowCHinese(16,0,0);
OLED_ShowCHinese(32,0,1);
OLED_ShowCHinese(48,0,2);
OLED_ShowCHinese(64,0,3);
OLED_ShowCHinese(80,0,4);
OLED_ShowCHinese(96,0,5);
OLED_ShowString(32,2,"WF24");
}
#if OLED_MODE==1
//向SSD1106写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{
DATAOUT(dat);
if(cmd)
OLED_DC_Set();
else
OLED_DC_Clr();
OLED_CS_Clr();
OLED_WR_Clr();
OLED_WR_Set();
OLED_CS_Set();
OLED_DC_Set();
}
#else
//向SSD1306写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{
u8 i;
if(cmd)
OLED_DC_Set();
else
OLED_DC_Clr();
OLED_CS_Clr();
for(i=0;i<8;i++)
{
OLED_SCLK_Clr();
if(dat&0x80)
{
OLED_SDIN_Set();
}
else
OLED_SDIN_Clr();
OLED_SCLK_Set();
dat<<=1;
}
OLED_CS_Set();
OLED_DC_Set();
}
#endif
void OLED_Set_Pos(unsigned char x, unsigned char y)
{
OLED_WR_Byte(0xb0+y,OLED_CMD);
OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);
}
//开启OLED显示
void OLED_Display_On(void)
{
OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
}
//关闭OLED显示
void OLED_Display_Off(void)
{
OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF
OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF
}
//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
void OLED_Clear(void)
{
u8 i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址0~7
OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址
OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址
for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
} //更新显示
}
//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白显示;1,正常显示
//size:选择字体 16/12
void OLED_ShowChar(u8 x,u8 y,u8 chr)
{
unsigned char c=0,i=0;
c=chr-' ';//得到偏移后的值
if(x>Max_Column-1){x=0;y=y+2;}
if(SIZE ==16)
{
OLED_Set_Pos(x,y);
for(i=0;i<8;i++)
OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
OLED_Set_Pos(x,y+1);
for(i=0;i<8;i++)
OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
}
}
//m^n函数
u32 oled_pow(u8 m,u8 n)
{
u32 result=1;
while(n--)result*=m;
return result;
}
//显示2个数字
//x,y :起点坐标
//len :数字的位数
//size:字体大小
//mode:模式 0,填充模式;1,叠加模式
//num:数值(0~4294967295);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
{
u8 t,temp;
u8 enshow=0;
for(t=0;t<len;t++)
{
temp=(num/oled_pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
OLED_ShowChar(x+(size2/2)*t,y,' ');
continue;
}else enshow=1;
}
OLED_ShowChar(x+(size2/2)*t,y,temp+'0');
}
}
//显示一个字符号串
void OLED_ShowString(u8 x,u8 y,u8 *chr)
{
unsigned char j=0;
while (chr[j]!='\0')
{ OLED_ShowChar(x,y,chr[j]);
x+=8;
if(x>120){x=0;y+=2;}
j++;
}
}
//显示汉字
void OLED_ShowCHinese(u8 x,u8 y,u8 no)
{
u8 t,adder=0;
OLED_Set_Pos(x,y);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
adder+=1;
}
OLED_Set_Pos(x,y+1);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
adder+=1;
}
}
/***********功能描述显示显示BMP图片128×64起始点坐标(x,y),x的范围0127y为页的范围07*****************/
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
{
unsigned int j=0;
unsigned char x,y;
if(y1%8==0) y=y1/8;
else y=y1/8+1;
for(y=y0;y<y1;y++)
{
OLED_Set_Pos(x0,y);
for(x=x0;x<x1;x++)
{
OLED_WR_Byte(BMP[j++],OLED_DATA);
}
}
}
//初始化SSD1306
void OLED_Init(void)
{
OLED_RST_Set();
delay_ms(100);
OLED_RST_Clr();
delay_ms(100);
OLED_RST_Set();
OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
OLED_WR_Byte(0x40,OLED_CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
OLED_WR_Byte(0xCF,OLED_CMD); // Set SEG Output Current Brightness
OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常
OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常
OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
OLED_WR_Byte(0x00,OLED_CMD);//-not offset
OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
OLED_WR_Byte(0x12,OLED_CMD);
OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
OLED_WR_Byte(0x02,OLED_CMD);//
OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7)
OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/
OLED_Clear();
OLED_Set_Pos(0,0);
}

View File

@@ -1,73 +0,0 @@
#ifndef _OLED_H_
#define _OLED_H_
#include <REGX52.H>
#define u8 unsigned char
#define u32 unsigned int
#define OLED_CMD 0 //写命令
#define OLED_DATA 1 //写数据
#define OLED_MODE 0
sbit OLED_CS=P2^4; //片选
sbit OLED_RST =P2^2;//复位
sbit OLED_DC =P2^3;//数据/命令控制
sbit OLED_SCL=P2^0;//时钟 D0SCLK
sbit OLED_SDIN=P2^1;//D1MOSI 数据
#define OLED_CS_Clr() OLED_CS=0
#define OLED_CS_Set() OLED_CS=1
#define OLED_RST_Clr() OLED_RST=0
#define OLED_RST_Set() OLED_RST=1
#define OLED_DC_Clr() OLED_DC=0
#define OLED_DC_Set() OLED_DC=1
#define OLED_SCLK_Clr() OLED_SCL=0
#define OLED_SCLK_Set() OLED_SCL=1
#define OLED_SDIN_Clr() OLED_SDIN=0
#define OLED_SDIN_Set() OLED_SDIN=1
//OLED模式设置
//0:4线串行模式
//1:并行8080模式
#define SIZE 16
#define XLevelL 0x02
#define XLevelH 0x10
#define Max_Column 128
#define Max_Row 64
#define Brightness 0xFF
#define X_WIDTH 128
#define Y_WIDTH 64
//-----------------OLED端口定义----------------
void delay_ms(unsigned int ms);
void OLED_Show();
//OLED控制用函数
void OLED_WR_Byte(u8 dat,u8 cmd);
void OLED_Display_On(void);
void OLED_Display_Off(void);
void OLED_Init(void);
void OLED_Clear(void);
void OLED_DrawPoint(u8 x,u8 y,u8 t);
void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
void OLED_ShowChar(u8 x,u8 y,u8 chr);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2);
void OLED_ShowString(u8 x,u8 y, u8 *p);
void OLED_Set_Pos(unsigned char x, unsigned char y);
void OLED_ShowCHinese(u8 x,u8 y,u8 no);
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
#endif

View File

@@ -1,225 +0,0 @@
//#endif /*_OLEDFONT_H*/
#ifndef __OLEDFONT_H
#define __OLEDFONT_H
//常用ASCII表
//偏移量32
//ASCII字符集
//偏移量32
//大小:12*6
/************************************6*8的点阵************************************/
const unsigned char code F6x8[][6] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '
0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
};
/****************************************8*16的点阵************************************/
const unsigned char code F8X16[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
};
const char code Hzk[][32]={
{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00},
{0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00},/*"大",0*/
{0x00,0x01,0x01,0xFD,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0xFD,0x01,0x01,0x00,0x00},
{0x80,0x90,0x88,0x45,0x4F,0x55,0x25,0x25,0x25,0x55,0x4D,0x45,0x80,0x80,0x80,0x00},/*"夏",1*/
{0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0xF0,0x10,0x11,0x16,0xD0,0x10,0x10,0x00},
{0x80,0x40,0x20,0x18,0x06,0x41,0x20,0x10,0x3F,0x44,0x42,0x41,0x40,0x40,0x78,0x00},/*"龙",2*/
{0x00,0x10,0x88,0x86,0x40,0x40,0x20,0x2F,0x50,0x90,0x08,0x02,0x04,0x08,0x00,0x00},
{0x01,0x01,0x00,0xFF,0x55,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x55,0x41,0x00,0x00},/*"雀",3*/
{0x24,0x24,0xA4,0xFE,0xA3,0x22,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,0x00},
{0x08,0x06,0x01,0xFF,0x00,0x01,0x04,0x04,0x04,0x04,0x04,0xFF,0x02,0x02,0x02,0x00},/*"科",5*/
{0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00},
{0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"技",6*/
};
#endif

View File

@@ -1,233 +0,0 @@
<?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; *.md</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp; *.cc; *.cxx</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>11059200</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>
<Books>
<Book>
<Number>0</Number>
<Title>Data Sheet</Title>
<Path>DATASHTS\ATMEL\AT89C52_DS.PDF</Path>
</Book>
<Book>
<Number>1</Number>
<Title>Instruction Set Manual</Title>
<Path>DATASHTS\ATMEL\AT_C51ISM.PDF</Path>
</Book>
</Books>
<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>User</GroupName>
<tvExp>1</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>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\UART.C</PathWithFileName>
<FilenameWithoutPath>UART.C</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\oled.c</PathWithFileName>
<FilenameWithoutPath>oled.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

View File

@@ -1,405 +0,0 @@
<?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>AT89C52</Device>
<Vendor>Microchip</Vendor>
<Cpu>IRAM(0-0xFF) IROM(0-0x1FFF) CLOCK(24000000)</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>2980</DeviceId>
<RegisterFile>REGX52.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>Atmel\</RegisterFilePath>
<DBRegisterFilePath>Atmel\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>51Project</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>-p52</SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TP51.DLL</TargetDlgDll>
<TargetDlgDllArguments>-p52</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>2</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>0</HadXRAM>
<HadIROM>1</HadIROM>
<Moda2>0</Moda2>
<Moddp2>0</Moddp2>
<Modp2>0</Modp2>
<Mod517dp>0</Mod517dp>
<Mod517au>0</Mod517au>
<Mode2>0</Mode2>
<useCB>0</useCB>
<useXB>0</useXB>
<useL251>1</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>0x2000</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100</Size>
</IRA>
<XRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</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>..\User</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>User</GroupName>
<Files>
<File>
<FileName>STARTUP.A51</FileName>
<FileType>2</FileType>
<FilePath>.\STARTUP.A51</FilePath>
</File>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\main.c</FilePath>
</File>
<File>
<FileName>UART.C</FileName>
<FileType>1</FileType>
<FilePath>..\User\UART.C</FilePath>
</File>
<File>
<FileName>oled.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\oled.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
</Project>

View File

@@ -1,253 +0,0 @@
A51 MACRO ASSEMBLER STARTUP 08/13/2024 16:12:46 PAGE 1
MACRO ASSEMBLER A51 V8.2.7.0
OBJECT MODULE PLACED IN .\Objects\STARTUP.obj
ASSEMBLER INVOKED BY: D:\Keil5\C51\BIN\A51.EXE STARTUP.A51 SET(LARGE) DEBUG PRINT(.\Listings\STARTUP.lst) OBJECT(.\Objec
ts\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 08/13/2024 16:12:46 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 08/13/2024 16:12:46 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 08/13/2024 16:12:46 PAGE 4
190
195 ;</h>
0009 020000 F 196 LJMP ?C_START
197
198 END
A51 MACRO ASSEMBLER STARTUP 08/13/2024 16:12:46 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)

View File

@@ -1,246 +0,0 @@
C51 COMPILER V9.60.7.0 UART 08/13/2024 16:12:46 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\Objects\UART.obj
COMPILER INVOKED BY: D:\Keil5\C51\BIN\C51.EXE ..\User\UART.C LARGE OMF2 OPTIMIZE(8,SPEED) BROWSE INCDIR(..\User) DEBUG P
-RINT(.\Listings\UART.lst) OBJECT(.\Objects\UART.obj)
line level source
1 #include "UART.h"
2 #include <string.h>
3 #include "oled.h"
4 #include <stdio.h>
5
6 // 用于存储接收数据的数组
7 unsigned char rxBuffer[ARRAY_SIZE];
8 unsigned int rxIndex = 0; // 接收数据的索引
9 unsigned int rx_flag=0;
10 extern unsigned int CONNECT_FLEG;//连接标志
11 // 初始化串口
12 void Serial_Init() {
13 1 SCON = 0x50; // 设置为模式18位数据可变波特率
14 1 TMOD &= 0x0F; // 清除定时器1模式位
15 1 TMOD |= 0x20; // 设置定时器1为8位自动重装模式
16 1 TH1 = TL1 = 256 - (11059200 / 12 / 32) / BAUDRATE; // 设置波特率
17 1 TR1 = 1; // 启动定时器1
18 1 ES = 1; // 开启串口中断
19 1 EA = 1; // 开启全局中断
20 1 }
21
22 void Delay(unsigned int xms)
23 {
24 1 unsigned char i, j;
25 1 while(xms--)
26 1 {
27 2 i = 2;
28 2 j = 239;
29 2 do
30 2 {
31 3 while (--j);
32 3 } while (--i);
33 2 }
34 1 }
35
36 void buff_memset(void)
37 {
38 1 memset(rxBuffer,0,64);
39 1 rxIndex=0;
40 1 rx_flag = 0;
41 1 }
42 unsigned int WIFI_CheckAck(char* src, char* dest, int timeout)
43 {
44 1 char *check = NULL;
45 1 //清空缓冲
46 1 buff_memset();
47 1
48 1 UART_sentString(src);
49 1 timeout=timeout/10;//10ms处理一次
50 1 while(timeout--)
51 1 {
52 2 Delay(10);//延时1ms
53 2 if(rx_flag==1)
54 2 {
C51 COMPILER V9.60.7.0 UART 08/13/2024 16:12:46 PAGE 2
55 3 check = strstr(rxBuffer,dest);
56 3 if(check != NULL)
57 3 {
58 4 buff_memset();//数据有误 清空
59 4 return 1;
60 4 }
61 3 }
62 2 }
63 1 buff_memset();//数据有误 清空
64 1 return 0;//超时
65 1 }
66
67 sbit LED = P2^5;
68 sbit motor1 = P2^6;
69 sbit motor2 = P2^7;
70
71 void CONNECT_TX_Control(void)
72 {
73 1 char *ptr = NULL;
74 1 int number;
75 1 if (CONNECT_FLEG)
76 1 {
77 2 if(rx_flag)
78 2 {
79 3 if(strstr(rxBuffer,"192.168.0")!=NULL)
80 3 {
81 4 ptr = strrchr((char*)rxBuffer,','); // 以最后一个,为准后面为数据
82 4
83 4 if(strlen(ptr)-3==1) //判断接收到为一位数据 ,*\r\n
84 4 {
85 5 number = ptr[1]-'0';
86 5 switch(number)
87 5 {
88 6 case 1: LED = 0 ; break;
89 6 case 2: LED = 1; break;
90 6 case 3:OLED_Show(); break;
91 6 case 4:OLED_Clear(); break;
92 6 case 5:motor1=0;motor2=1; break;
93 6 case 6:motor1=1;motor2=0; break;
94 6 case 7:motor1=0;motor2=0 ; break;
95 6 default: return;
96 6 }
97 5 }
98 4 }
99 3 else if(strstr((char *)rxBuffer,"RECV:test-app")!=NULL)
100 3 {
101 4 ptr = strrchr((char*)rxBuffer,','); // 以最后一个,为准后面为数据
102 4
103 4 if(strlen(ptr)-3==1) //判断接收到为一位数据 ,*\r\n
104 4 {
105 5 number = ptr[1]-'0';
106 5 switch(number)
107 5 {
108 6 case 1: LED = 0 ; break;
109 6 case 2: LED = 1; break;
110 6 case 3:OLED_Show(); break;
111 6 case 4:OLED_Clear(); break;
112 6 case 5:motor1=0;motor2=1; break;
113 6 case 6:motor1=1;motor2=0; break;
114 6 case 7:motor1=0;motor2=0 ; break;
115 6 default: return;
116 6 }
C51 COMPILER V9.60.7.0 UART 08/13/2024 16:12:46 PAGE 3
117 5 }
118 4 }
119 3 }
120 2 buff_memset();//数据有误 清空
121 2 }
122 1 }
123 void CONNECT_TO_TCP(unsigned char* id,unsigned char *password)
124 {
125 1 unsigned char buf[50];
126 1 WIFI_CheckAck("+++",id,1500); //确保其退出透传
127 1 //while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
128 1 while(!WIFI_CheckAck("AT\r\n","OK",1000));
129 1 while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000));
130 1 sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
131 1 while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));
132 1 while(!WIFI_CheckAck("AT+CIPMODE=1\r\n","OK",1000)!=0);
133 1 while(!WIFI_CheckAck("AT+CIPSTART=TCP,192.168.0.146,2347\r\n","+CIPSTART:1",3000));
134 1 while(!WIFI_CheckAck("AT+CIPSEND\r\n","OK",1000));
135 1 UART_sentString(":Connected\r\n");
136 1 CONNECT_FLEG = 1;
137 1 }
138 void CONNECT_TO_UDP(unsigned char* id,unsigned char *password)
139 {
140 1 unsigned char buf[50];
141 1
142 1 WIFI_CheckAck("+++",id,1500); //确保其退出透传
143 1 //while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
144 1 while(!WIFI_CheckAck("AT\r\n","OK",1000));
145 1 while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000));
146 1 sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
147 1 while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));
148 1 while(!WIFI_CheckAck("AT+CIPMODE=1\r\n","OK",1000)!=0);
149 1 while(!WIFI_CheckAck("AT+CIPSTART=UDP,192.168.0.146,2345,1112,0\r\n","+CIPSTART:1",3000)); //192.168.0.15
-0,2345为IP地址 2345 端口号1112 是模块设置的端口号 0 UDP固定目标模式
150 1 while(!WIFI_CheckAck("AT+CIPSEND\r\n","OK",1000));
151 1 UART_sentString(":Connected\r\n");
152 1 CONNECT_FLEG = 1;
153 1 }
154 void CONNECT_TO_MQTT(unsigned char* id,unsigned char *password)
155 {
156 1 unsigned char buf[50];
157 1 while(!WIFI_CheckAck("AT+MQTTCLEAN\r\n","OK",1000));
158 1 //while(!WIFI_CheckAck("AT+RESTORE\r\n","OK",5000));
159 1 while(!WIFI_CheckAck("AT\r\n","OK",1000));
160 1 while(!WIFI_CheckAck("AT+CWMODE=0\r\n","OK",2000)); //STA模式
161 1 sprintf((char *)buf,"AT+CWJAP=%s,%s\r\n",id,password);
162 1 while(!WIFI_CheckAck((char *)buf,"+CWJAP:1,",5000));//连接WIFI
163 1 while(!WIFI_CheckAck("AT+MQTTLONGCLIENTID=WF-TEST2\r\n","OK",1000)!=0);//配置 MQTT 客户端所需的客户端 ID<49>
-⒂没<E29282><E6B2A1>兔苈<E58594>
164 1 while(!WIFI_CheckAck("AT+MQTTCONN=broker.emqx.io,1883,0\r\n","MQTTCONNECTED:",2000)!=0);//连接 MQTT 服务<E69C8D>
-<2D>
165 1 while(!WIFI_CheckAck("AT+MQTTSUB=test-app,0\r\n","OK",2000)!=0);//订阅主题 test-app
166 1 while(!WIFI_CheckAck("AT+MQTTPUBRAW=test-w,32,0,0\r\n","OK",2000)!=0);
167 1 UART_sentString("MQTT_Connected\r\n");
168 1 buff_memset();
169 1 CONNECT_FLEG = 1;
170 1 }
171
172 void UART_SendByte(unsigned char Byte)
173 {
174 1 SBUF=Byte;
175 1 while(!TI);
C51 COMPILER V9.60.7.0 UART 08/13/2024 16:12:46 PAGE 4
176 1 TI=0;
177 1 }
178
179 void UART_sentString(char *str)
180 {
181 1
182 1 while(*str){
183 2 UART_SendByte(*str);
184 2 str++;
185 2 }
186 1 }
187 // 串口接收中断服务程序
188 void Serial_ISR() interrupt 4 {
189 1 if (RI) {
190 2 RI = 0; // 清除接收中断标志
191 2
192 2
193 2 rxBuffer[rxIndex++] = SBUF; // 存储接收到的数据
194 2 if(rxBuffer[rxIndex-1]=='\n')
195 2 {
196 3 rx_flag=1;
197 3 }
198 2 if(rxIndex==64)
199 2 {
200 3 rxIndex=0;
201 3 rx_flag=1;
202 3 }
203 2
204 2 }
205 1 }
206
207
208
209
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1827 ----
CONSTANT SIZE = 379 ----
XDATA SIZE = 68 184
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

View File

@@ -1,89 +0,0 @@
C51 COMPILER V9.60.7.0 MAIN 08/13/2024 16:12:46 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Objects\main.obj
COMPILER INVOKED BY: D:\Keil5\C51\BIN\C51.EXE ..\User\main.c LARGE OMF2 OPTIMIZE(8,SPEED) BROWSE INCDIR(..\User) DEBUG P
-RINT(.\Listings\main.lst) OBJECT(.\Objects\main.obj)
line level source
1 #include <REGX52.H> // STC89C52RC的寄存器定义
2 #include "UART.h"
3 #include "string.h"
4 #include "stdio.h"
5 #include "oled.h"
6 extern unsigned int rxIndex;
7 extern unsigned char rxBuffer[ARRAY_SIZE];
8 extern unsigned int rx_flag;
9 unsigned int CONNECT_FLEG;//连接标志
10 // 主函数
11 unsigned char conver[64];
12 char *ptr = NULL;
13 void MQTT_CONVER(void);
14 void TCP_UDP_CONVER(void);
15 void main() {
16 1 Serial_Init(); // 初始化串口
17 1 OLED_Init();
18 1 CONNECT_TO_UDP("DX-SMART","SMART@601");
19 1 while (1) {
20 2
21 2 // 主循环,可以添加其他任务
22 2 TCP_UDP_CONVER();
23 2 }
24 1 }
25
26 void TCP_UDP_CONVER(void)
27 {
28 1 if (rx_flag)
29 1 {
30 2 UART_sentString(rxBuffer);
31 2 // CONNECT_TX_Control();
32 2 rxIndex = 0; // 重置索引,准备下一次接收
33 2 memset(rxBuffer,0,ARRAY_SIZE); //清空缓冲区
34 2 }
35 1 }
36 void MQTT_CONVER(void)
37 {
38 1 if (rx_flag)
39 1 {
40 2 if(strstr(rxBuffer,"RECV:test-app")!=NULL)
41 2 {
42 3 ptr = strrchr(rxBuffer,',');
43 3 memcpy(conver,ptr,*(ptr-1));
44 3 while(!WIFI_CheckAck("AT+MQTTPUBRAW=test-w,32,0,0\r\n","OK",2000)!=0);
45 3 buff_memset();//数据有误 清空
*** WARNING C206 IN LINE 45 OF ..\User\main.c: 'buff_memset': missing function-prototype
46 3 UART_sentString(conver);
47 3
48 3 }
49 2
50 2 }
51 1 }
52 void MQTT_CONTROL(void)
53 {
C51 COMPILER V9.60.7.0 MAIN 08/13/2024 16:12:46 PAGE 2
54 1 if (rx_flag)
55 1 {
56 2 CONNECT_TX_Control();
57 2 }
58 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 237 ----
CONSTANT SIZE = 66 ----
XDATA SIZE = 69 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)

View File

@@ -1,287 +0,0 @@
C51 COMPILER V9.60.7.0 OLED 08/13/2024 16:12:46 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE OLED
OBJECT MODULE PLACED IN .\Objects\oled.obj
COMPILER INVOKED BY: D:\Keil5\C51\BIN\C51.EXE ..\User\oled.c LARGE OMF2 OPTIMIZE(8,SPEED) BROWSE INCDIR(..\User) DEBUG P
-RINT(.\Listings\oled.lst) OBJECT(.\Objects\oled.obj)
line level source
1 #include "oled.h"
2 #include "oledfont.h"
3
4 void delay_ms(unsigned int ms)
5 {
6 1 unsigned int a;
7 1 while(ms)
8 1 {
9 2 a=1800;
10 2 while(a--);
11 2 ms--;
12 2 }
13 1 return;
14 1 }
15 void OLED_Show()
16 {
17 1 OLED_ShowCHinese(16,0,0);
18 1 OLED_ShowCHinese(32,0,1);
19 1 OLED_ShowCHinese(48,0,2);
20 1 OLED_ShowCHinese(64,0,3);
21 1 OLED_ShowCHinese(80,0,4);
22 1 OLED_ShowCHinese(96,0,5);
23 1 OLED_ShowString(32,2,"WF24");
24 1
25 1 }
26 #if OLED_MODE==1
//向SSD1106写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{
DATAOUT(dat);
if(cmd)
OLED_DC_Set();
else
OLED_DC_Clr();
OLED_CS_Clr();
OLED_WR_Clr();
OLED_WR_Set();
OLED_CS_Set();
OLED_DC_Set();
}
#else
44 //向SSD1306写入一个字节。
45 //dat:要写入的数据/命令
46 //cmd:数据/命令标志 0,表示命令;1,表示数据;
47 void OLED_WR_Byte(u8 dat,u8 cmd)
48 {
49 1 u8 i;
50 1 if(cmd)
51 1 OLED_DC_Set();
52 1 else
53 1 OLED_DC_Clr();
54 1 OLED_CS_Clr();
C51 COMPILER V9.60.7.0 OLED 08/13/2024 16:12:46 PAGE 2
55 1 for(i=0;i<8;i++)
56 1 {
57 2 OLED_SCLK_Clr();
58 2 if(dat&0x80)
59 2 {
60 3 OLED_SDIN_Set();
61 3 }
62 2 else
63 2 OLED_SDIN_Clr();
64 2 OLED_SCLK_Set();
65 2 dat<<=1;
66 2 }
67 1 OLED_CS_Set();
68 1 OLED_DC_Set();
69 1 }
70 #endif
71 void OLED_Set_Pos(unsigned char x, unsigned char y)
72 {
73 1 OLED_WR_Byte(0xb0+y,OLED_CMD);
74 1 OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
75 1 OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);
76 1 }
77 //开启OLED显示
78 void OLED_Display_On(void)
79 {
80 1 OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
81 1 OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
82 1 OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
83 1 }
84 //关闭OLED显示
85 void OLED_Display_Off(void)
86 {
87 1 OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
88 1 OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF
89 1 OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF
90 1 }
91 //清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
92 void OLED_Clear(void)
93 {
94 1 u8 i,n;
95 1 for(i=0;i<8;i++)
96 1 {
97 2 OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址0~7
98 2 OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址
99 2 OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址
100 2 for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
101 2 } //更新显示
102 1 }
103
104
105 //在指定位置显示一个字符,包括部分字符
106 //x:0~127
107 //y:0~63
108 //mode:0,反白显示;1,正常显示
109 //size:选择字体 16/12
110 void OLED_ShowChar(u8 x,u8 y,u8 chr)
111 {
112 1 unsigned char c=0,i=0;
113 1 c=chr-' ';//得到偏移后的值
114 1 if(x>Max_Column-1){x=0;y=y+2;}
115 1 if(SIZE ==16)
116 1 {
C51 COMPILER V9.60.7.0 OLED 08/13/2024 16:12:46 PAGE 3
117 2 OLED_Set_Pos(x,y);
118 2 for(i=0;i<8;i++)
119 2 OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
120 2 OLED_Set_Pos(x,y+1);
121 2 for(i=0;i<8;i++)
122 2 OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
123 2 }
124 1
125 1 }
126 //m^n函数
127 u32 oled_pow(u8 m,u8 n)
128 {
129 1 u32 result=1;
130 1 while(n--)result*=m;
131 1 return result;
132 1 }
133 //显示2个数字
134 //x,y :起点坐标
135 //len :数字的位数
136 //size:字体大小
137 //mode:模式 0,填充模式;1,叠加模式
138 //num:数值(0~4294967295);
139 void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
140 {
141 1 u8 t,temp;
142 1 u8 enshow=0;
143 1 for(t=0;t<len;t++)
144 1 {
145 2 temp=(num/oled_pow(10,len-t-1))%10;
146 2 if(enshow==0&&t<(len-1))
147 2 {
148 3 if(temp==0)
149 3 {
150 4 OLED_ShowChar(x+(size2/2)*t,y,' ');
151 4 continue;
152 4 }else enshow=1;
153 3
154 3 }
155 2 OLED_ShowChar(x+(size2/2)*t,y,temp+'0');
156 2 }
157 1 }
158 //显示一个字符号串
159 void OLED_ShowString(u8 x,u8 y,u8 *chr)
160 {
161 1 unsigned char j=0;
162 1 while (chr[j]!='\0')
163 1 { OLED_ShowChar(x,y,chr[j]);
164 2 x+=8;
165 2 if(x>120){x=0;y+=2;}
166 2 j++;
167 2 }
168 1 }
169 //显示汉字
170 void OLED_ShowCHinese(u8 x,u8 y,u8 no)
171 {
172 1 u8 t,adder=0;
173 1 OLED_Set_Pos(x,y);
174 1 for(t=0;t<16;t++)
175 1 {
176 2 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
177 2 adder+=1;
178 2 }
C51 COMPILER V9.60.7.0 OLED 08/13/2024 16:12:46 PAGE 4
179 1 OLED_Set_Pos(x,y+1);
180 1 for(t=0;t<16;t++)
181 1 {
182 2 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
183 2 adder+=1;
184 2 }
185 1 }
186 /***********功能描述显示显示BMP图片128×64起始点坐标(x,y),x的范围0127y为页的范围07****************
-*/
187 void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[
-])
188 {
189 1 unsigned int j=0;
190 1 unsigned char x,y;
191 1
192 1 if(y1%8==0) y=y1/8;
193 1 else y=y1/8+1;
194 1 for(y=y0;y<y1;y++)
195 1 {
196 2 OLED_Set_Pos(x0,y);
197 2 for(x=x0;x<x1;x++)
198 2 {
199 3 OLED_WR_Byte(BMP[j++],OLED_DATA);
200 3 }
201 2 }
202 1 }
203
204
205 //初始化SSD1306
206 void OLED_Init(void)
207 {
208 1
209 1
210 1
211 1 OLED_RST_Set();
212 1 delay_ms(100);
213 1 OLED_RST_Clr();
214 1 delay_ms(100);
215 1 OLED_RST_Set();
216 1 OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
217 1 OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
218 1 OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
219 1 OLED_WR_Byte(0x40,OLED_CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
220 1 OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
221 1 OLED_WR_Byte(0xCF,OLED_CMD); // Set SEG Output Current Brightness
222 1 OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常
223 1 OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常
224 1 OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
225 1 OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
226 1 OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
227 1 OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
228 1 OLED_WR_Byte(0x00,OLED_CMD);//-not offset
229 1 OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
230 1 OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
231 1 OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
232 1 OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
233 1 OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
234 1 OLED_WR_Byte(0x12,OLED_CMD);
235 1 OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
236 1 OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
237 1 OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
238 1 OLED_WR_Byte(0x02,OLED_CMD);//
C51 COMPILER V9.60.7.0 OLED 08/13/2024 16:12:46 PAGE 5
239 1 OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
240 1 OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
241 1 OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
242 1 OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7)
243 1 OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
244 1
245 1 OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/
246 1 OLED_Clear();
247 1 OLED_Set_Pos(0,0);
248 1 }
249
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1037 ----
CONSTANT SIZE = 2461 ----
XDATA SIZE = ---- 27
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

Some files were not shown because too many files have changed in this diff Show More