基于stc15f2k60s2单片机,74hc595,编写C语言程序实现当按下ADC分压键盘时,将相应的键号(01-16)通过UART发送到PC显示;
时间: 2023-11-30 22:03:02 浏览: 96
基于stc15f2k60s2芯片单片机编程(AD加串口)
好的,根据您的要求,我为您提供一个基于stc15f2k60s2单片机的ADC分压键盘,通过UART发送键号到PC的C语言程序。
首先,我们需要在程序中引入头文件和定义一些宏变量:
```c
#include <STC15F2K60S2.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA=P3^4;
sbit SCL=P3^5;
sbit Key1 = P1^4;
sbit Key2 = P1^5;
sbit Key3 = P1^6;
sbit Key4 = P1^7;
sbit DIO = P3^6;
sbit RCK = P3^7;
sbit SCK = P3^3;
uchar code LedChar[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
```
接下来,我们编写一个初始化函数,用于初始化ADC、UART以及GPIO口:
```c
void Init()
{
P1 = 0xFF;
P3 = 0xFF;
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
SCON = 0x50;
TR1 = 1;
EA = 1;
ES = 1;
P1 = 0x0F;
P3 &= ~(1<<3);
SCK = 0;
DIO = 0;
RCK = 0;
}
```
接着,我们编写一个函数用于发送数据到UART:
```c
void SendData(uchar dat)
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
```
然后,我们编写一个函数用于读取ADC分压键盘的状态,并返回相应的键号:
```c
uchar ReadKey()
{
uchar key = 0;
if (Key1 == 0) key = 1;
else if (Key2 == 0) key = 2;
else if (Key3 == 0) key = 3;
else if (Key4 == 0) key = 4;
return key;
}
```
最后,我们在主函数中编写一个死循环,不断检测ADC分压键盘的状态,如果检测到按键被按下,则读取相应的键号并通过UART发送到PC:
```c
void main()
{
Init();
while (1) {
uchar key = ReadKey();
if (key != 0) {
SendData(key + 48);
SendData('\n');
SendData('\r');
}
}
}
```
这样,我们就实现了当按下ADC分压键盘时,将相应的键号(01-16)通过UART发送到PC显示的功能。需要注意的是,这里发送的键号是ASCII码,需要加上48才能得到对应的字符。
阅读全文