要求:
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;//清除发送完成标志位
- }
-
- }
复制代码 |