STC89C51项目源码
目录嵌入式 / 51单片机 / 基础练习格式ZIP大小17.0 KB
在线预览
16 个文件3 个目录56.6 KB 解压后大小
H5C4YML2JSON1UVOPT1UVPROJ1TXT1A511
查看完整目录 · 16 个文件
1.5 KB .eide/eide.yml
689 B .eide/files.options.yml
50 B .eide/stc.flash.json
3.5 KB driver/dht22.c
452 B driver/dht22.h
409 B driver/hardware.c
240 B driver/hardware.h
9.0 KB driver/OLED_Font.h
7.4 KB driver/oled.c
692 B driver/oled.h
7.1 KB main.uvopt
14.6 KB main.uvproj
299 B README.txt
6.2 KB STARTUP.A51
4.5 KB user/main.c
138 B user/main.h可读文件预览
README.txt299 B
STC89C51项目源码
本压缩包由开源协会知识库从学习目录中自动精选生成。
已排除安装包、视频、编译缓存、目标文件、可执行文件、私钥和大型第三方依赖。
部分工程需要通过对应 IDE、SDK 或配置文件重新生成依赖后再编译。driver/dht22.c3.5 KB
#include "dht22.h"
#include <intrins.h>
sbit DHT_IO = DHT_PIN;
int DHT_Temperature = 0;
int DHT_Humidity = 0;
// 毫秒延时
void DHT_DelayMs(unsigned int ms) {
unsigned int i, j;
for (i = ms; i > 0; i--)
for (j = 90; j > 0; j--);
}
void DHT22_Init(void) {
DHT_IO = 1;
DHT_DelayMs(1000);
}
unsigned char DHT22_Read(void) {
unsigned char i, idx;
unsigned char U8comdata;
unsigned char Data[5] = {0};
unsigned char check_sum;
// 计数器,使用 char 类型让循环跑得更快
unsigned char count = 0;
// 关中断!防止中断打断敏感时序
bit EA_SAVE = EA;
EA = 0;
// --- 1. 主机发送起始信号 ---
DHT_IO = 0;
DHT_DelayMs(20); // 拉低 >18ms
DHT_IO = 1;
// 延时 30us 等待
_nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();
// --- 2. 握手阶段 (防死机) ---
// 每一个 while 里面都加了简单的防死机计数 (count)
// 250次循环对于 8MHz 来说大约是 1-2ms,足够了
// 等待变低 (响应开始)
count = 0;
while (DHT_IO) { if (++count > 250) { EA = EA_SAVE; return 1; } }
// 等待变高 (响应结束)
count = 0;
while (!DHT_IO) { if (++count > 250) { EA = EA_SAVE; return 1; } }
// 等待变低 (准备传输)
count = 0;
while (DHT_IO) { if (++count > 250) { EA = EA_SAVE; return 1; } }
// --- 3. 读取 40 位数据 ---
for (idx = 0; idx < 5; idx++) {
U8comdata = 0;
for (i = 0; i < 8; i++) {
// 1. 等待上一位低电平结束 (也就是等待位开始)
// 正常应该是 50us
count = 0;
while (!DHT_IO) {
// 如果这里超时,说明传感器不发数据了
if (++count > 250) { EA = EA_SAVE; return 2; }
}
// 2. 核心:测量高电平长度
// 0: 26us
// 1: 70us
// 我们通过数循环次数来判断
count = 0;
while (DHT_IO) {
count++;
// 30是安全上限,防止卡死
if (count > 30) { EA = EA_SAVE; return 3; }
}
// 3. 判定逻辑 (针对 8MHz 调校)
// 在 8MHz 下,C语言的 while 循环跑一圈很慢 (约10-12us)
// '0' (26us) -> count 大约是 2
// '1' (70us) -> count 大约是 6-7
// 所以我们把阈值设为 4
U8comdata <<= 1;
if (count > 4) {
U8comdata |= 1;
}
}
Data[idx] = U8comdata;
}
// 恢复中断
EA = EA_SAVE;
DHT_IO = 1;
// --- 4. 校验 ---
check_sum = Data[0] + Data[1] + Data[2] + Data[3];
// 为了方便调试,如果校验错,我们依然把读到的值放进去,
// 这样你能在屏幕上看到一个“奇怪”的数值,而不是 Err 4
// 这一步在正式产品中不要,但现在调试很有用!
DHT_Humidity = (Data[0] << 8) | Data[1];
DHT_Temperature = ((Data[2] & 0x7F) << 8) | Data[3];
if (Data[2] & 0x80) DHT_Temperature = -DHT_Temperature;
if (check_sum == Data[4]) {
return 0; // 成功
} else {
// 如果校验失败,返回 4
// 但此时全局变量里已经有值了,你可以看看是多少,帮我判断阈值
return 4;
}
}user/main.c4.5 KB
#include "main.h"
#include <stdlib.h> // 引入 abs 函数
#include <stdio.h>
#include "hardware.h"
#include "oled.h"
#include "dht22.h"
sbit PWM_PIN = P2^0;
// 全局变量
uint8_t timer_count = 0; // 0.1ms 计数器
uint8_t duty_cycle = 15; // 占空比值:5对应0度,15对应90度,25对应180度
uint32_t time1s=0;
uint32_t time2s=0;
void Timer0_Init(void) //1毫秒@8MHz
{
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xC0; //设置定时初始值
TH0 = 0xE0; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
EA = 1;
}
/******LED使用********/
bit led_flag=0;
uint8_t led_time=0;
/********BEEP使用*********/
bit beep_flag=0;
uint32_t beep_time=0;
unsigned char status=0;
/**
* @brief 定时器1初始化函数 (针对 8MHz 晶振)
* 目标:约 0.1ms (100.5us) 中断一次
*/
void InitTimer1()
{
TMOD &= 0x0F; // 清除T1配置
TMOD |= 0x10; // 模式1 (16位)
// 8MHz 晶振下的初值: 0xFFBD
TH1 = 0xFF;
TL1 = 0xBD;
ET1 = 1; // 开启定时器1中断
EA = 1; // 开启总中断
TR1 = 1; // 启动定时器1
}
void main(void)
{
Timer0_Init();
P1_7 = 0;
P2_3 = 0;
OLED_Init();
OLED_Clear();
OLED_ShowString(1, 1, "Hello, CDUT!");
DHT22_Init();duty_cycle = 15;
InitTimer1();
duty_cycle = 5; // 设置初始占空比为 5 (0度)
while(1)
{
P2_3 = 0;
if(time1s>=500)
{
time1s = 0; // 立即清零,防止重复进入
if(duty_cycle>=25)
{
duty_cycle=5;
}
else
{
duty_cycle+=5;
}
if(led_flag == 0) // 阶段1:逐个点亮 (P1.0 -> P1.6)
{
led_time++;
if(led_time <= 7)
{
// 0xFF << 1 = 1111 1110 (P1.0 亮)
// 0xFF << 7 = 1000 0000 (P1.0-P1.6 亮)
P1 &= (0xFF << led_time);
}
else
{
led_time = 0;
led_flag = 1; // 切换到熄灭模式
}
}
else // 阶段2:逐个熄灭 (P1.0 -> P1.6)
{
led_time++;
if(led_time <= 7)
{
// 0xFF << 1 = 1111 1110; 取反 = 0000 0001 (P1.0 灭)
// 0xFF << 7 = 1000 0000; 取反 = 0111 1111 (P1.0-P1.6 灭)
P1 |= ~(0xFF << led_time);
}
else
{
led_time = 0;
led_flag = 0; // 切换回点亮模式
}
}
}
if(beep_time>=250)
{
beep_flag=0;
beep_time=0;
}
// 强制控制 P1.7,覆盖上方 LED 逻辑对 P1.7 的潜在影响
if(beep_flag==1)
P1_7 = 1;
else
P1_7 = 0;
if(time2s>=500)
{
status = DHT22_Read(); // 获取返回值
if (status == 0 || status == 4)
{
char buffer[16];
int temp_int = DHT_Temperature / 10;
int temp_frac = abs(DHT_Temperature % 10);
int humi_int = DHT_Humidity / 10;
int humi_frac = abs(DHT_Humidity % 10);
sprintf(buffer, "T:%d.%d %s", temp_int, temp_frac, (status==4)?"*":" ");
OLED_ShowString(2, 1, buffer); // 如果有*号,说明校验错但有数据
sprintf(buffer, "H:%d.%d%%", humi_int, humi_frac);
OLED_ShowString(3, 1, buffer);
}
else
{
char err_buf[16];
sprintf(err_buf, "Err: %d", (int)status);
OLED_ShowString(2, 1, err_buf);
}
time2s=0;
}
}
}
void Timer0_Isr(void) interrupt 1
{
// 必须重装载初值,否则定时器周期不正确
TL0 = 0xC0;
TH0 = 0xE0;
time1s++;
time2s++;
key_scan();
if(key_value!=0&&beep_flag==0)
{
beep_flag=1;
}
if(beep_flag==1)
{
beep_time++;
}
}
/**
* @brief 定时器1中断服务程序 (针对 8MHz 晶振)
*/
void Timer1_ISR() interrupt 3
{
// === 必须在这里也修改初值 ===
TH1 = 0xFF;
TL1 = 0xBD;
timer_count++;
if(timer_count >= 200) // 约 20ms 周期
{
timer_count = 0;
}
if(timer_count < duty_cycle)
{
PWM_PIN = 1;
}
else
{
PWM_PIN = 0;
}
}driver/hardware.c409 B
#include "hardware.h"
uint8_t key_value=0;
uint8_t key_state=0;
void key_scan(void)
{
if(P0_0==0)
{
key_value=key1;
key_state++;
}
else if(P0_1 == 0)
{
key_value=key2;
key_state++;
}
else if(P0_2 == 0)
{
key_value = key3;
key_state++;
}
else if (P3_2 == 1)
{
key_value = key4;
key_state++;
}
else
{
key_value = nokey;
key_state = 0;
}
}
driver/oled.c7.4 KB
#include "OLED_Font.h"
#include "oled.h"
/*引脚配置*/
sbit OLED_SCL = P0^5;
sbit OLED_SDA = P0^6;
#define OLED_W_SCL OLED_SCL
#define OLED_W_SDA OLED_SDA
/**
* @brief I2C开始
* @param 无
* @retval 无
*/
void OLED_I2C_Start(void)
{
OLED_W_SDA=1;
OLED_W_SCL=1;
OLED_W_SDA=0;
OLED_W_SCL=0;
}
/**
* @brief I2C停止
* @param 无
* @retval 无
*/
void OLED_I2C_Stop(void)
{
OLED_W_SDA=0;
OLED_W_SCL=1;
OLED_W_SDA=1;
}
void IIC_Wait_Ack()
{
OLED_W_SCL=1;
OLED_W_SCL=0;
}
/**
* @brief I2C发送一个字节
* @param Byte 要发送的一个字节
* @retval 无
*/
void OLED_I2C_SendByte(unsigned char Byte)
{
unsigned char i;
OLED_W_SCL=0;
for (i = 0; i < 8; i++)
{
OLED_W_SDA=Byte & (0x80 >> i);
OLED_W_SCL=1;
OLED_W_SCL=0;
}
}
/**
* @brief OLED写命令
* @param Command 要写入的命令
* @retval 无
*/
void OLED_WriteCommand(unsigned char Command)
{
OLED_I2C_Start();
OLED_I2C_SendByte(0x78); //从机地址
IIC_Wait_Ack();
OLED_I2C_SendByte(0x00); //写命令
IIC_Wait_Ack();
OLED_I2C_SendByte(Command);
IIC_Wait_Ack();
OLED_I2C_Stop();
}
/**
* @brief OLED写数据
* @param Data 要写入的数据
* @retval 无
*/
void OLED_WriteData(unsigned char Data)
{
OLED_I2C_Start();
OLED_I2C_SendByte(0x78); //从机地址
IIC_Wait_Ack();
OLED_I2C_SendByte(0x40); //写数据
IIC_Wait_Ack();
OLED_I2C_SendByte(Data);
IIC_Wait_Ack();
OLED_I2C_Stop();
}
/**
* @brief OLED设置光标位置
* @param Y 以左上角为原点,向下方向的坐标,范围:0~7
* @param X 以左上角为原点,向右方向的坐标,范围:0~127
* @retval 无
*/
void OLED_SetCursor(unsigned char Y, unsigned char X)
{
OLED_WriteCommand(0xB0 | Y); //设置Y位置
OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4)); //设置X位置高4位
OLED_WriteCommand((X & 0x0F)); //设置X位置低4位
}
/**
* @brief OLED清屏
* @param 无
* @retval 无
*/
void OLED_Clear(void)
{
unsigned char i, j;
for (j = 0; j < 8; j++)
{
OLED_SetCursor(j, 0);
for(i = 0; i < 128; i++)
{
OLED_WriteData(0x00);
}
}
}
/**
* @brief OLED显示一个字符
* @param Line 行位置,范围:1~4
* @param Column 列位置,范围:1~16
* @param Char 要显示的一个字符,范围:ASCII可见字符
* @retval 无
*/
void OLED_ShowChar(unsigned char Line, unsigned char Column, char Char)
{
unsigned char i;
OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8); //设置光标位置在上半部分
for (i = 0; i < 8; i++)
{
OLED_WriteData(OLED_F8x16[Char - ' '][i]); //显示上半部分内容
}
OLED_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 8); //设置光标位置在下半部分
for (i = 0; i < 8; i++)
{
OLED_WriteData(OLED_F8x16[Char - ' '][i + 8]); //显示下半部分内容
}
}
/**
* @brief OLED显示字符串
* @param Line 起始行位置,范围:1~4
* @param Column 起始列位置,范围:1~16
* @param String 要显示的字符串,范围:ASCII可见字符
* @retval 无
*/
void OLED_ShowString(unsigned char Line, unsigned char Column, char *String)
{
unsigned char i;
for (i = 0; String[i] != '\0'; i++)
{
OLED_ShowChar(Line, Column + i, String[i]);
}
}
/**
* @brief OLED次方函数
* @retval 返回值等于X的Y次方
*/
unsigned int OLED_Pow(unsigned int X, unsigned int Y)
{
unsigned int Result = 1;
while (Y--)
{
Result *= X;
}
return Result;
}
/**
* @brief OLED显示数字(十进制,正数)
* @param Line 起始行位置,范围:1~4
* @param Column 起始列位置,范围:1~16
* @param Number 要显示的数字,范围:0~4294967295
* @param Length 要显示数字的长度,范围:1~10
* @retval 无
*/
void OLED_ShowNum(unsigned char Line, unsigned char Column, unsigned int Number, unsigned char Length)
{
unsigned char i;
for (i = 0; i < Length; i++)
{
OLED_ShowChar(Line, Column + i, Number / OLED_Pow(10, Length - i - 1) % 10 + '0');
}
}
/**
* @brief OLED显示数字(十进制,带符号数)
* @param Line 起始行位置,范围:1~4
* @param Column 起始列位置,范围:1~16
* @param Number 要显示的数字,范围:-2147483648~2147483647
* @param Length 要显示数字的长度,范围:1~10
* @retval 无
*/
void OLED_ShowSignedNum(unsigned char Line, unsigned char Column, int Number, unsigned char Length)
{
unsigned char i;
unsigned int Number1;
if (Number >= 0)
{
OLED_ShowChar(Line, Column, '+');
Number1 = Number;
}
else
{
OLED_ShowChar(Line, Column, '-');
Number1 = -Number;
}
for (i = 0; i < Length; i++)
{
OLED_ShowChar(Line, Column + i + 1, Number1 / OLED_Pow(10, Length - i - 1) % 10 + '0');
}
}
/**
* @brief OLED显示数字(十六进制,正数)
* @param Line 起始行位置,范围:1~4
* @param Column 起始列位置,范围:1~16
* @param Number 要显示的数字,范围:0~0xFFFFFFFF
* @param Length 要显示数字的长度,范围:1~8
* @retval 无
*/
void OLED_ShowHexNum(unsigned char Line, unsigned char Column, unsigned int Number, unsigned char Length)
{
unsigned char i, SingleNumber;
for (i = 0; i < Length; i++)
{
SingleNumber = Number / OLED_Pow(16, Length - i - 1) % 16;
if (SingleNumber < 10)
{
OLED_ShowChar(Line, Column + i, SingleNumber + '0');
}
else
{
OLED_ShowChar(Line, Column + i, SingleNumber - 10 + 'A');
}
}
}
/**
* @brief OLED显示数字(二进制,正数)
* @param Line 起始行位置,范围:1~4
* @param Column 起始列位置,范围:1~16
* @param Number 要显示的数字,范围:0~1111 1111 1111 1111
* @param Length 要显示数字的长度,范围:1~16
* @retval 无
*/
void OLED_ShowBinNum(unsigned char Line, unsigned char Column, unsigned int Number, unsigned char Length)
{
unsigned char i;
for (i = 0; i < Length; i++)
{
OLED_ShowChar(Line, Column + i, Number / OLED_Pow(2, Length - i - 1) % 2 + '0');
}
}
/**
* @brief OLED初始化
* @param 无
* @retval 无
*/
void OLED_Init(void)
{
OLED_WriteCommand(0xAE); //关闭显示
OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率
OLED_WriteCommand(0x80);
OLED_WriteCommand(0xA8); //设置多路复用率
OLED_WriteCommand(0x3F);
OLED_WriteCommand(0xD3); //设置显示偏移
OLED_WriteCommand(0x00);
OLED_WriteCommand(0x40); //设置显示开始行
OLED_WriteCommand(0xA1); //设置左右方向,0xA1正常 0xA0左右反置
OLED_WriteCommand(0xC8); //设置上下方向,0xC8正常 0xC0上下反置
OLED_WriteCommand(0xDA); //设置COM引脚硬件配置
OLED_WriteCommand(0x12);
OLED_WriteCommand(0x81); //设置对比度控制
OLED_WriteCommand(0xCF);
OLED_WriteCommand(0xD9); //设置预充电周期
OLED_WriteCommand(0xF1);
OLED_WriteCommand(0xDB); //设置VCOMH取消选择级别
OLED_WriteCommand(0x30);
OLED_WriteCommand(0xA4); //设置整个显示打开/关闭
OLED_WriteCommand(0xA6); //设置正常/倒转显示
OLED_WriteCommand(0x8D); //设置充电泵
OLED_WriteCommand(0x14);
OLED_WriteCommand(0xAF); //开启显示
OLED_Clear(); //OLED清屏
}
driver/dht22.h452 B
#ifndef __DHT22_H__
#define __DHT22_H__
#include "main.h"
// ================= 配置区 =================
// 确认你的硬件接在哪里!这里设为 P2.7
#define DHT_PIN P2^7
// =========================================
extern int DHT_Temperature;
extern int DHT_Humidity;
void DHT22_Init(void);
// 返回值:0=成功, 1=无响应, 2=数据0超时, 3=数据1超时, 4=校验错误
unsigned char DHT22_Read(void);
#endifuser/main.h138 B
#ifndef __MAIN_H__
#define __MAIN_H__
#include <REGX51.H>
typedef unsigned char uint8_t;
typedef unsigned int uint32_t;
#endifdriver/hardware.h240 B
#ifndef __HARDWARE_H__
#define __HARDWARE_H__
#include "main.h"
#define key1 1
#define key2 2
#define key3 3
#define key4 4
#define nokey 0
extern uint8_t key_value;
extern uint8_t key_state;
void key_scan(void);
#endif.eide/eide.yml1.5 KB
version: "4.1"
name: main
type: C51
deviceName: null
packDir: null
srcDirs: []
virtualFolder:
name: <virtual_root>
files: []
folders:
- name: user
files:
- path: STARTUP.A51
- path: user/main.c
folders: []
- name: driver
files:
- path: driver/hardware.c
- path: driver/hardware.h
- path: driver/oled.c
- path: driver/oled.h
- path: driver/OLED_Font.h
- path: driver/dht22.c
- path: driver/dht22.h
folders: []
dependenceList: []
outDir: build
miscInfo:
uid: 16c090c82adaa02ac30f30ffa3154440
targets:
Target 1:
cppPreprocessAttrs:
defineList: []
incList:
- d:/KEIL_MDK/mdk/C51/INC/Atmel
- driver
- user
libList: []
excludeList: []
toolchain: Keil_C51
toolchainConfigMap:
Keil_C51:
options:
version: 2
afterBuildTasks: []
asm-compiler: {}
beforeBuildTasks: []
c/cpp-compiler:
optimization-level: level-8
optimization-type: SPEED
global:
ram-mode: SMALL
rom-mode: LARGE
linker:
misc-controls: ""
output-format: elf
remove-unused: true
uploadConfigMap:
Custom:
bin: ""
commandLine: ""
eraseChipCommand: ""
stcgal:
bin: ""
eepromImgPath: "null"
extraOptions: ""
options: .eide/stc.flash.json
uploader: stcgal
.eide/files.options.yml689 B
##########################################################################################
# Append Compiler Options For Source Files
##########################################################################################
# syntax:
# <your pattern>: <compiler options>
# For get pattern syntax, please refer to: https://www.npmjs.com/package/micromatch
#
# examples:
# 'main.cpp': --cpp11 -Og ...
# 'src/*.c': -gnu -O2 ...
# 'src/lib/**/*.cpp': --cpp11 -Os ...
# '!Application/*.c': -O0
# '**/*.c': -O2 -gnu ...
version: "2.1"
options:
Target 1:
files: {}
virtualPathFiles: {}
driver/OLED_Font.h9.0 KB
#ifndef __OLED_FONT_H
#define __OLED_FONT_H
/*OLED字模库,宽8像素,高16像素*/
const unsigned char code OLED_F8x16[][16]=
{
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
};
#endif
.eide/stc.flash.json50 B
{
"device": "auto",
"baudrate": "115200"
}driver/oled.h692 B
#ifndef __OLED_H
#define __OLED_H
#include "main.h"
void OLED_Init(void);
void OLED_Clear(void);
void OLED_ShowChar(unsigned char Line, unsigned char Column, char Char);
void OLED_ShowString(unsigned char Line, unsigned char Column, char *String);
void OLED_ShowNum(unsigned char Line, unsigned char Column, unsigned int Number, unsigned char Length);
void OLED_ShowSignedNum(unsigned char Line, unsigned char Column, int Number, unsigned char Length);
void OLED_ShowHexNum(unsigned char Line, unsigned char Column, unsigned int Number, unsigned char Length);
void OLED_ShowBinNum(unsigned char Line, unsigned char Column, unsigned int Number, unsigned char Length);
#endif
