怎样制作手机视频教程,seo是指什么职位,破解版手游app平台,搜狗搜索网一.实验目的
1. 掌握 51 单片机串口工作原理。
2. 掌握 51 单片机串口初始化编程。
3. 掌握 51 单片机串口的软硬件编程。
二.实验设备和器件
1.KEIL软件
2.PROTEUS仿真软件
3.伟福实验箱
三#xff0e;实验内容
#xff08;1#xff09;编程实现#xff1a…一.实验目的
1. 掌握 51 单片机串口工作原理。
2. 掌握 51 单片机串口初始化编程。
3. 掌握 51 单片机串口的软硬件编程。
二.实验设备和器件
1.KEIL软件
2.PROTEUS仿真软件
3.伟福实验箱
三实验内容
1编程实现编程实现甲、乙双机串行通信双机的 RXD
和 TXD 相互交叉相连甲机的 P0 口接 8 个开关乙机的 P0口接 8 个发光二极管。甲机设置为只发不收的单工方式。要求甲机读入 P0口的 8 个开关的状态后通过串行口发送到乙机乙机将接收到的甲机的 8 个开关的状态数据送入 P0 口
电路图代码
/*甲机接开关代码*/
#include reg51.h
#define uchar unsigned char
#define uint unsigned int
void main()
{uchar temp0;
TMOD0x20; /*设置定时器T1为方式2*/
TH10xfd; /*波特率9600*/
TL10xfd;
SCON0x40; /*方式1只发送不接收*/
PCON0x00; /*波特率为9600SMOD0*/
TR11; /*启动T1*/
P00xff; /* P1口为输入*/
while(1)
{tempP0; /*读入P0口开关的状态数据*/
SBUFtemp; /*数据送串行口发送*/
while(TI0); /*如果TI0未发送完循环等待*/
TI0;}}/*已发送完再把TI清0*/
/*乙机接灯代码*/
#include reg51.h
#define uchar unsigned char
#define uint unsigned int
void main()
{uchar temp0;
TMOD0x20; /*设置定时器T1为方式2*/
TH10xfd; /*波特率9600*/
TL10xfd;
SCON0x50; /*方式1接收REN1*/
PCON0x00; /*波特率为9600SMOD0*/
TR11; /*启动T1*/
P00xff; /* P0口为输入*/
while(1)
{while(RI0); /* 若RI为0未接收到数据*/
RI0; /* 接收到数据则把RI清0*/
tempSBUF; /* 读取数据存入temp中*/
P0temp; /* 接收的数据送P0口控制8个LED的亮与灭*/
}}
分析
串口工作于方式1或方式3已知波特率计算初值的公式则波特率为9600bps,方式1接收和发送SMOD0则初值256-11059200/(384*9600)253fdH
REN为允许接收控制位REN1则允许接收REN0则禁止接收允许发送在该题中最开始将乙机的SCON也设置为40H及REN0此时不管开关怎么变换灯都不会亮原因是乙机现在无法接收串口数据当开关闭合是串口传送的数据为低电平数据protuse仿真中灯即为低电平亮则不需要取反eg当第一个开关闭合时传送的数据为01111111则乙机收到数据后第D0位为低电平则第一盏灯亮2参考实验 1将乙机的显示改为 LED 数码管将按键输入显示到数码管上按键输入范围0~F
电路图代码
/*甲机接开关代码*/
#include reg51.h
#define uchar unsigned char
#define uint unsigned int
void main()
{uchar temp0;
TMOD0x20; /*设置定时器T1为方式2*/
TH10xfd; /*波特率9600*/
TL10xfd;
SCON0x40; /*方式1只发送不接收*/
PCON0x00; /*串行口初始化为方式0*/
TR11; /*启动T1*/
P00x0f; /* P0口为输入*/
while(1)
{tempP0; /*读入P0口开关的状态数据*/
SBUFtemp; /*数据送串行口发送*/
while(TI0); /*如果TI0未发送完循环等待*/
TI0;/*已发送完再把TI清0*/
}}
/*乙机接数码管代码*/
#include reg51.h
#include absacc.h
#define uchar unsigned char
#define uint unsigned int
void delay(unsigned int time)
{int j 150;
for(;time0;time--)
for(;j0;j--);}
void main( )
{Code uchar codevalue[16]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar temp0;
TMOD0x20;
TH10xfd;
TL10xfd;
SCON 0x50;
PCON 0x00;
TR11;
while(1)
{while(RI0);
RI0;
tempSBUF;
P0codevalue[temp];
}}
分析
数码管共阴极发光二极管的正级接地要接一个排阻才可以正常使用共阳极单片机可以直接驱动发光二极管的正级接电源在该题中数码管只能显示到F乙机P0显示的值是codevalue[16]数组中的数所以只需要4个开关控制则甲机P0的初始值为0x0f初始值不能大于0f,如果大于则超过了数组的范围则数码管无法显示。 3编写程序控制 LCD1602 输出显示数字和英文字符显示内容为 2 行第一行学号第二行英文姓名拼音
电路图代码
#include reg51.h
#define uchar unsigned char
sbit RSP1^7;/*数据命令选择端*/
sbit RWP1^6;/*读/写选择端*/
sbit EP1^5;/*使能端*/
void init(void);
void wc51r(uchar i);
void wc51ddr(uchar i);
void fbusy(void);
void main()
{SP0x50;init();
wc51r(0x80);wc51ddr(1);wc51ddr(5);wc51ddr(0);wc51ddr(4);wc51ddr(0);
wc51ddr(1);wc51ddr(0);wc51ddr(1);wc51ddr(0);wc51ddr(7);
wc51r(0xc0);wc51ddr(j);wc51ddr(i);wc51ddr(a);wc51ddr(n);
wc51ddr(g);wc51ddr( );wc51ddr(z);wc51ddr(h);wc51ddr(e);wc51ddr(n);
while(1);}
/*初始化函数*/
void init()
{wc51r(0x01);//清屏命令
wc51r(0x38);//设置16*2,5*7点阵8位数据接口
wc51r(0x0c);//显示控制开关命令:D1,显示;c0,光标不显示B0,字符不闪烁
wc51r(0x06);}//输入方式设置命令字符不动光标自动向右移动
/*检查忙函数*/
void fbusy()
{P20xff;RS0;RW1;//忙标志和地址计数器读出
E0;E1;
while (P20x80)
{E0;E1;}//忙等待
}
/*写命令函数*/
void wc51r(uchar j)
{fbusy();
E0;RS0;RW0;//指令寄存器写入
E1;P2j;E0;}
/*写数据函数*/
void wc51ddr(uchar j)
{
fbusy();
E0;RS1;RW0;//数据寄存器写入
E1;P2j;E0;} 分析
sp其实是一个寄存器其中只能保存一个指针而这个指针就指向了栈空间中的最高层即栈顶LCD第一行第一个字符地址为80H,第二行第一个字符地址为C0HE使能端为高电平时读取液晶模块信息当E端由高电平跳变成低电平时液晶模块执行写操作