stc32g12k128的简单代码
时间: 2023-07-03 07:04:45 浏览: 339
以下是STC32G12K128的简单代码示例,包括LED闪烁和按键检测:
```c
#include <STC32.h>
sbit LED = P1^4;
sbit KEY = P3^2;
void delay(unsigned int t) { // 延时函数,t为延时时间
unsigned int i, j;
for(i = 0; i < t; i++) {
for(j = 0; j < 120; j++);
}
}
void main() {
while(1) {
if(KEY == 0) { // 按键检测
LED = ~LED; // LED闪烁
delay(500);
}
}
}
```
在这个例子中,LED在P1.4引脚上,按键在P3.2引脚上。当按下按键时,LED会闪烁。
相关问题
hc-05与stc32g12k128的连接代码
您可以使用以下代码将HC-05与STC32G12K128连接起来:
```c
#include "STC15F2K60S2.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit LED = P1^0; // 定义一个LED引脚
void Delay_ms(uint ms)
{
uint i, j;
for (i = ms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void UART_Init()
{
TMOD = 0x20; // 设置定时器1的工作模式为8位自动重装载模式
TL1 = 0xfd; // 设置定时器1的初值,用于波特率的设定(对应9600波特率)
TH1 = 0xfd; // 设置定时器1的初值,用于波特率的设定(对应9600波特率)
PCON = 0x00; // 不加倍波特率
SCON = 0x50; // 设置串口工作在方式1,允许接收
TR1 = 1; // 启动定时器1
TI = 0; // 清除发送标志位
RI = 0; // 清除接收标志位
}
void UART_SendByte(uchar dat)
{
SBUF = dat;
while (!TI); // 等待发送完成
TI = 0; // 清除发送标志位
}
void UART_SendString(uchar *str)
{
while (*str)
{
UART_SendByte(*str++);
}
}
void main()
{
uchar i;
LED = 0; // 初始化LED引脚为低电平
UART_Init(); // 初始化串口
while (1)
{
if (RI) // 判断是否接收到数据
{
i = SBUF; // 读取接收到的数据
RI = 0; // 清除接收标志位
if (i == '1') // 若接收到的数据为字符'1'
{
LED = 1; // 点亮LED
UART_SendString("LED ON\r\n"); // 发送字符串
}
else if (i == '0') // 若接收到的数据为字符'0'
{
LED = 0; // 熄灭LED
UART_SendString("LED OFF\r\n"); // 发送字符串
}
}
}
}
```
这段代码通过串口与HC-05模块进行通信。当接收到字符'1'时,点亮LED并发送字符串"LED ON\r\n";当接收到字符'0'时,熄灭LED并发送字符串"LED OFF\r\n"。您可以根据自己的需求进行修改和扩展。
STC32G12K128的超声波测距代码
STC32G12K128的超声波测距代码示例如下:
```
#include <reg52.h>
#include <intrins.h>
#define TRIG P1_0
#define ECHO P1_1
typedef unsigned char uint8;
typedef unsigned int uint16;
void delay_us(uint16 us) // 微秒级延时函数
{
while (us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void delay_ms(uint16 ms) // 毫秒级延时函数
{
uint16 i;
while (ms--)
{
i = 1000;
while (i--)
{
delay_us(1);
}
}
}
void send_pulse(void) // 发送超声波脉冲信号
{
TRIG = 1;
delay_us(10);
TRIG = 0;
}
uint16 measure_distance(void) // 测量距离
{
uint16 distance;
uint16 time;
ECHO = 0;
delay_us(2);
ECHO = 1; // 发送触发信号
delay_us(10);
ECHO = 0;
while (!ECHO); // 等待回波信号
TMOD |= 0x01;
TH0 = 0;
TL0 = 0;
TR0 = 1; // 启动定时器0
while (ECHO); // 等待回波结束
TR0 = 0; // 停止定时器0
time = (TH0 << 8) | TL0; // 计算时间
distance = time * 0.017; // 计算距离
return distance;
}
void main(void)
{
uint16 distance;
while (1)
{
send_pulse(); // 发送超声波脉冲信号
distance = measure_distance(); // 测量距离
if (distance < 50) // 如果距离小于50cm,亮灯
{
P1_2 = 1;
}
else
{
P1_2 = 0;
}
delay_ms(100); // 延时100ms
}
}
```
上述代码中,使用P1_0引脚控制超声波模块的触发信号,使用P1_1引脚接收超声波模块的回波信号。在测量过程中,先发送超声波脉冲信号,然后启动定时器0计时,等待接收到回波信号后停止计时,计算出时间,然后根据声速和时间计算出距离。最后根据测量结果控制P1_2引脚输出高低电平,从而控制LED灯的亮灭。
阅读全文