串行口自发自收实验 实验内容: 根据电路如图1所示编写程序。实现当键1按下,单片机串行口应用方式1连续向外发送“0、1、2、3”四字节数据,通过串行口单片机自发自收改信号,将接受的数据显示出来;当键2按下,单片机串行口应用方式1连续向外发送“4、5、6、7”四字节数据,通过串行口单片机自发自收改信号,将接受的数据显示出来;当键3按下单片机串行口应用方式1连续向外发送“8、9、a、b”四字节数据,通过串行口单片机自发自收改信号,将接受的数据显示出来;当键4按下,单片机串行口应用方式1连续向外发送“c、d、e、f”四字节数据,通过串行口单片机自发自收改信号,将接受的数据显示出来。
图2 静态显示电路图
图3 波形脉冲宽度测试原理
评分表 序号 | | | | | | | |
| | | | |
| 1、电路图的理解 2、显示的准确性 3、显示数据的处理 | | | |
| 1、串行口的设置 2、串行口的发送 3、串行口的接收 |
- #include<reg51.h>
- unsigned char code led_code[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,
- 0x11,0xc1,0x63,0x85,0x61,0x71,0xff};
- unsigned char dis_buf[4];
- sbit led_clk= P1^6 ;
- sbit led_data = P1^7 ;
- sbit key1=P2^0;
- sbit key2=P2^1;
- sbit key3=P2^2;
- sbit key4=P2^3;
- unsigned char read_flag ;
- unsigned char flag=0;
- unsigned char TT[4],num;
- unsigned char i,j;
- void led_display ( )
- {
- unsignedchar t,i;
- unsignedchar input_code;
- for(i=0;i<4;i++)
- {
- input_code=dis_buf[ i];
- for(t=0;t<8;t++)
- {
- if(input_code & 0x01 )
- {
- led_data=1;
- }
- else
- {
- led_data=0;
- }
- led_clk=0;
- input_code>>=1;
- led_clk=1;
- }
- }
- }
- void Send(unsigned char dat)
- {
- SBUF=dat;
- while(TI==0);
- TI=0;
- }
- void recive(void) interrupt 4
- {
- if(RI)
- {
- RI=0;
- TT[num]=SBUF;
- num++;
- if(num>=4)
- {
- num=0;
- read_flag=1;
- }
- }
- }
- void delay_ms(unsigned int x)
- {
- unsigned int i;
- unsigned char j;
- for(i=x;i>0; i--)
- for(j=110;j>0;j--);
- }
- void main(void)
- {
- TMOD=0x20;
- SCON=0x50;
- PCON=0x00;
- TH1=0xfd;
- TL1=0xfd;
- EA=1;
- ES=1;
- TR1=1;
- dis_buf[0]=led_code[16];
- dis_buf[1]=led_code[16];
- dis_buf[2]=led_code[16];
- dis_buf[3]=led_code[16];
- led_display();
- while(1)
- {
- if(key1==0)
- {
- delay_ms(10);
- if(key1==0)
- {
- i=0;flag=1;
- }
- }
- else if(key2==0)
- {
- delay_ms(10);
- if(key2==0)
- {
- i=4;flag=1;
- }
- }
- else if(key3==0)
- {
- delay_ms(10);
- if(key3==0)
- {
- i=8;flag=1;
- }
- }
- else if(key4==0)
- {
- delay_ms(10);
- if(key4==0)
- {
- i=12;flag=1;
- }
- }
- if(flag)
- {
- for(j=i;i<j+4;i++)
- {
- Send(led_code);
- }
- flag=0;
- }
- if(read_flag==1)
- {
- read_flag=0;
- dis_buf[0]=TT[3];
- dis_buf[1]=TT[2];
- dis_buf[2]=TT[1];
- dis_buf[3]=TT[0];
- led_display();
- }
- }
- }
复制代码
|