要求:
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;//清除發送完成標志位
- }
-
- }
復制代碼 |