实验(九)串口-数码管综合实验

一.实验目的、内容、仪器

实验目的:1.  掌握 51 单片机串口工作原理。

                    2.  掌握 51 单片机串口初始化编程。

                    3.  掌握 51 单片机串口的软硬件编程。

实验内容:从串口接收6个字符(0-F),并将其显示到六位数码管上。

实验仪器:7SEG-MPX8-CC:八位数码管共阴极,74HC573:锁存器,AT89C52:52单片机,RESPACK-8:排阻,led:灯,VIRTUAL TERMINAL:虚拟串口监视器,COMPIN:串口设备。

二.硬件原理

 

 

三.程序流程图

 

 四.代码实现

#include <reg52.h>
typedef unsigned int u16;//对系统默认数据类型进行重定义 
typedef unsigned char u8;
int i,j,N=0;
sbit dula=P2^6;
sbit wela=P2^7;
int zhhcc[8];
char code table[]={ 0x3f,0x06,0x5b,0x4f,
                0x66,0x6d,0x7d,0x07,
				       0x7f,0x6f,0x77,0x7c,
				       0x39,0x5e,0x79,0x71}; 
//0~f十六个数字数组
void uart_init(u8 baud) 
{ 
TMOD|=0X20; //设置计数器工作方式 2 
SCON=0X50; //设置为工作方式 1 
PCON=0X80; //波特率加倍 
TH1=baud; //计数器初始值设置 
TL1=baud; 
ES=1; //打开接收中断 
EA=1; //打开总中断 
TR1=1; //打开计数器 
}
void delay(x)
{
  int i,j;
  for(i=x;i>0;i--)
  for(j=110;j>0;j--);
  }

void main() 
{ 
	uart_init(0XFA);//波特率为 9600 
	
	while(1)					  //进入显示循环
						{	while(1)
							{	P0=0xfe; wela=1; wela=0;
							
							 P0=zhhcc[0];dula=1;dula=0;	  //显示第一位
							 P0=0xff;
							 delay(5); 
							 if(N==1)			  
							 break;
							 P0=0xfd; wela=1; wela=0;
							
							 P0=zhhcc[1];dula=1;dula=0;P0=0xff;	  //显示第二位
							 delay(5);
							 if(N==2)
							 break;
							 P0=0xfb; wela=1; wela=0;
							 
							 P0=zhhcc[2];dula=1;dula=0;P0=0xff;		 //显示第三位
							 delay(5);
							 if(N==3)
							 break;
							 P0=0xf7; wela=1; wela=0;
							 ;
							 P0=zhhcc[3];dula=1;dula=0;	P0=0xff; //显示第四位
							 delay(5);
							 if(N==4)
							 break;
							 P0=0xef; wela=1; wela=0;
						
							 P0=zhhcc[4];dula=1;dula=0;P0=0xff;	 //显示第五位
							 delay(10);
							 if(N==5)
				             break;
							  P0=0xdf; wela=1; wela=0;
						 
							 P0=zhhcc[5];dula=1;dula=0;P0=0xff;	 //显示第六位
							 delay(5);
							 if(N==6)
				             break;
							 P0=0xbf; wela=1; wela=0;
						 
							 P0=zhhcc[6];dula=1;dula=0;P0=0xff;	 //显示第七位
							 delay(5);
							 if(N==7)
				             break;
							 P0=0x7f; wela=1; wela=0;
						 
							 P0=zhhcc[7];dula=1;dula=0;P0=0xff;	 //显示第八位
							 delay(5);
							 if(N==8){N=0;};

				             break;
							} 
 }
}

void uart() interrupt 4 //串口通信中断函数 
{ 
u8 rec_data;

if(RI==1)
{  
RI = 0; //清除接收中断标志位 
rec_data=SBUF; //存储接收到的数据 
SBUF=rec_data; //将接收到的数据放入到发送寄存器
switch(SBUF)
			{
				case '0':zhhcc[N]=table[0];N++;break;
				case '1':zhhcc[N]=table[1];N++;break;
				case '2':zhhcc[N]=table[2];N++;break;
				case '3':zhhcc[N]=table[3];N++;break;
				case '4':zhhcc[N]=table[4];N++;break;
			    case '5':zhhcc[N]=table[5];N++;break;
				case '6':zhhcc[N]=table[6];N++;break;
				case '7':zhhcc[N]=table[7];N++;break;
				case '8':zhhcc[N]=table[8];N++;break;
				case '9':zhhcc[N]=table[9];N++;break;
			}
				
while(!TI); //等待发送数据完成 
TI=0; //清除发送完成标志位 

}
}

 

五.实验步骤

(1)了解译码器的功能,以及数码管动态显示原理

(2)搭建仿真电路,勾选debug,建立keil工程,选择单片机型号

(3)给工程创建源码文件,并以.c结尾,添加文件到源组里

(4)生成hex文件,点击魔术棒,在output中勾选Create HRX_File

(5)对代码进行编译,调试debug,点击USE,在下拉菜单里选中“Proteus VSM Monitor 一 51 ”进行设置

(6)将程序导入到单片机中运行,双击单片机,选择生成的hex文件

(7)在keil中启动调试,开始运行,观察proteus中的电路

六.结果及讨论

串口是一种通信方式。

不同型号单片机串口数量不一样,比较高级的单片机有多个串口。下图中的单片机有2个串口资源。

串口对于单片机而言就是指2个引脚进行通信,如下图,一根引脚是RXD,代表接收数据引脚;一根引脚是TXD,代表发送数据引脚。注意串口引脚的名字取名方式。单片机想发送数据,是用TXD发出去。想接收数据,是用RXD接收。

单片机和电脑通信需要有一个中间芯片,起到中间桥梁作用,一方面接受单片机信息,一方面将信息发送到电脑;或者一方面接受电脑信息,一方面将信息发送到单片机。是双工通信,互不影响,可同时进行。

中间桥梁芯片一般是CH340、PL2303这些芯片。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值