项目:用按键控制单片机与电脑通信。用计数器0,工作方式1:每按下一次按键,计数值加1,当按下3次之后,单片机向电脑端的串行软件发送一次0xaa。 接线方式:将单片机的P3.0、P3.1连接到J32:用RS232转 USB这根线,将实验箱主板上的RS232接口与电脑连接:P3.4接按键K1。,写出适配于stc8a8k64s4a12的代码
时间: 2024-03-02 17:50:25 浏览: 60
这个项目是为了微芯杯比赛而建立的,(题目B大一组),使用32单片机作为基础,外围模块包括TFT,无线模块,按键等.zip
以下是适配于STC8A8K64S4A12的代码,实现了用按键控制单片机与电脑通信的功能:
```
#include <STC8.H>
#define FOSC 24000000UL // 定义工作频率为24MHz
#define BAUD 9600 // 定义波特率为9600
unsigned char cnt = 0; // 定义计数器初值为0
void delay_ms(unsigned int n) // 延时函数
{
unsigned int i;
while(n--)
{
i = 12000;
while(i--);
}
}
void serial_init() // 串口初始化函数
{
SCON = 0x50; // 设置串口工作方式为8位异步收发模式
AUXR |= 0x40; // 定时器1时钟为FOSC
TMOD &= 0x0f; // 设置计数器为工作方式1
TL1 = TH1 = -(FOSC/12/32/BAUD); // 设置计数器初值,实现波特率控制
TR1 = 1; // 启动计数器1
ES = 1; // 使能串口中断
EA = 1; // 使能总中断
}
void send_data(unsigned char dat) // 发送数据函数
{
SBUF = dat; // 将数据存入发送缓存区
while(!TI); // 等待数据发送完毕
TI = 0; // 清除发送完成标志
}
void main()
{
P3M0 = P3M1 = 0x00; // 将P3.0、P3.1、P3.4设置为输入模式
serial_init(); // 初始化串口
while(1)
{
if(P3_4 == 0) // 如果按键K1被按下
{
delay_ms(10); // 延时去抖动
if(P3_4 == 0) // 再次检测按键状态
{
cnt++; // 计数器加1
if(cnt == 3) // 如果计数器值为3
{
cnt = 0; // 计数器清零
send_data(0xaa); // 发送0xaa
}
}
while(!P3_4); // 等待按键释放
}
}
}
void serial_isr() interrupt 4 using 1 // 串口中断服务函数
{
if(RI) // 如果接收到数据
{
RI = 0; // 清除接收中断标志
}
}
```
以上代码使用了定时器1和串口中断实现了按键控制单片机与电脑通信的功能。在按键被按下后,计数器值加1,当计数器值为3时,发送数据0xaa给电脑端。同时,使用了延时去抖动的方法,避免按键抖动造成误触发。
阅读全文