单片机能够将0-255之间的一个数通过串口通信发送给计算机,计算机有isp程序接收该数据。单片机发送的数据由4*4矩阵键盘输入按键分为数字键0-9和功能键(发送键)。输入的数据(0-255)应显示在数码管上。当发送键按下时,将输入的数据0-255发送给计算机。STC89C52RC C语言代码
时间: 2024-02-22 20:59:29 浏览: 87
stc-isp,51程序下载,串口软件
5星 · 资源好评率100%
好的,我可以提供一些参考代码,供您参考。请注意,以下代码仅供参考,您需要根据您的具体硬件和需求进行适当的修改和调整。
```
#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit LATCH = P2^3;
sbit SCLK = P2^4;
sbit DIN = P2^5;
uchar code ledChar[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
uchar keyValue = 0;
uchar dataToSend = 0;
bit sendFlag = 0;
void delay(uint t) {
while(t--);
}
void sendByte(uchar dat) {
uchar i;
for(i = 0; i < 8; i++) {
DIN = dat >> 7;
dat <<= 1;
SCLK = 0;
SCLK = 1;
}
}
void sendCommand(uchar cmd) {
LATCH = 0;
sendByte(cmd);
LATCH = 1;
}
void display(uchar dat) {
uchar i;
for(i = 0; i < 4; i++) {
sendCommand(i);
sendCommand(ledChar[dat % 10]);
dat /= 10;
}
}
void init() {
TMOD = 0x20;
TH1 = 0xFD;
TL1 = TH1;
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
sendCommand(0x8C);
}
void sendSerial(uchar dat) {
SBUF = dat;
while(!TI);
TI = 0;
}
void main() {
init();
while(1) {
switch(keyValue) {
case 0x70: dataToSend = 0; break;
case 0x71: dataToSend = 1; break;
case 0x72: dataToSend = 2; break;
case 0x73: dataToSend = 3; break;
case 0x74: dataToSend = 4; break;
case 0x75: dataToSend = 5; break;
case 0x76: dataToSend = 6; break;
case 0x77: dataToSend = 7; break;
case 0x78: dataToSend = 8; break;
case 0x79: dataToSend = 9; break;
case 0x7C: sendFlag = 1; break;
default: break;
}
if(sendFlag) {
sendSerial(dataToSend);
sendFlag = 0;
}
display(dataToSend);
delay(1000);
}
}
void serialInterrupt() interrupt 4 {
if(RI) {
keyValue = SBUF;
RI = 0;
}
}
```
上述代码使用了一个4位数码管来显示输入的数值,并通过串口将输入的值发送给计算机。具体实现步骤如下:
1. 初始化串口和数码管,设置串口为接收模式,并设置数码管亮度。
2. 在主循环中,读取矩阵键盘的输入值,并将其转换为数值。
3. 如果按下了发送键,则将输入的数值通过串口发送给计算机。
4. 将输入的数值显示在数码管上,并添加适当的延迟以保证显示效果。
5. 当串口接收到数据时,触发串口中断,并读取接收到的数据。
请注意,以上代码仅供参考,您需要根据您的具体硬件和需求进行适当的修改和调整。
阅读全文