标题:
51单片机A/D转换及串行通信程序
[打印本页]
作者:
1130718845
时间:
2022-6-9 15:13
标题:
51单片机A/D转换及串行通信程序
要求:
1.硬件选择通道,转换结果显示在LED上
2.利用串口助手与单片机就行串行通信,收到大写字母转换成小写字母发回,反之亦然,但数字不变。
单片机源程序如下:
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar D,VAR,H4,L4;
uchar cod[] = {0xC0, 0xF9, 0xA4, 0xB0,
0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83,
0xC6, 0xA1, 0x86, 0x8E
}; //16进制
void delay(int n)
{
int i,j;
for(i=n;i>0;i--)
{
for(j=28;j>0;j--);
}
}
void display()
{
H4=D/16;
L4=D%16;
P2=cod[L4];
P1=0xfe;
delay(1);
P2=0xff;
delay(10);
P2=cod[H4];
P1=0xfd;
delay(1);
P2=0xff;
delay(10);
}
void main()
{
while(1)
{
XBYTE[0x8000]=0x00;
delay(50);
D=XBYTE[0x8000];
display();
}
}
复制代码
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar D,VAR,H4,L4;
uchar cod[] = {0xC0, 0xF9, 0xA4, 0xB0,
0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83,
0xC6, 0xA1, 0x86, 0x8E
}; //16进制
void delay(int n)
{
int i,j;
for(i=n;i>0;i--)
{
for(j=28;j>0;j--);
}
}
void display()
{
H4=D/16;
L4=D%16;
P2=cod[L4];
P1=0xfe;
delay(1);
P2=0xff;
delay(10);
P2=cod[H4];
P1=0xfd;
delay(1);
P2=0xff;
delay(10);
}
void main()
{
PCON=0x80;//SMOD置1,波特率加倍
SCON=0x50;//设置为工作方式1:SCON:SMO SM1 SM2 REN TB8 RB8 TI(0101 0000)
TMOD=0x20;//设置计数器工作方式2
TH1=0xfa;//计数器赋初值
TL1=0xfa;
TR1=1;//打开计数器
while(1)
{
while(!RI){display();}
D=SBUF;
VAR=D;
RI=0;//清除接收中断标志位
display();
if(0x40<D&&D<0x5b){VAR=D+0x20;}//大写变小写
else if(0x60<D&&D<0x7b){VAR=D-0x20;}//小写变大写
SBUF=VAR;
while(!TI){display();}
TI=0;//清除发送完成标志位
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1