yn.c

来自「通过计算机串口传入单片机的数字,单片机将数字编码,以led方式显示出来」· C语言 代码 · 共 123 行

C
123
字号
#include <reg51.h>
/*unsigned char DATA_7SEG[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};*/
	 /*unsigned char DAT[11]={0xfd,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x00};*/
	unsigned char DAT[11]=   {0xbc,0xb5,0x4d,0xf4,0xfc,0xc1,0xfd,0xdd,0xf1,0x00};
/* a-15
b-7
c-1
d-2
e-3
f-4
g-5
h-6

11111101  abcdefg	  fd
01000001  bc      41
10110101  abdeg b5
11100101  abcdg	 e5
01001101   bcfg	  4d
11110100  acdeg	   f4
11111100  acdefg	fc
11000001  abc		 c1
11111101  abcdefg	  fd
11011101  abcefg	   dd
11111001  abcdef		f1
*/

     unsigned char DIG[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
void delay(int ) ;
void out_disp(unsigned char);
void init_rs232();
void tx_char( char );
unsigned char rx_char();

void main()
{
   char dat1,dat2;
  int i;
  
   delay(1000);
   init_rs232();
   out_disp(~DAT[1]);
   out_disp(~DAT[1]);
   
   P11=0; P11=1;

   while (1){
   
       dat1=rx_char();
       dat2=rx_char();
      
    for (i=0;i<10;i++){
    if (dat1==DIG[i]) break;}
         out_disp(DAT[i]);
    for (i=0;i<10;i++){
    if (dat2==DIG[i]) break;}
         out_disp(DAT[i]);
    
        
      P11=0; P11=1;

      tx_char(dat1);
      tx_char(dat2);
    }
    
}

void init_rs232()
{	/*PCON=0x80;	 波特率加倍					*/
	SCON=0x50;
	TMOD=0x20;
	TH1=0xfd;
	TL1=0xfd;
    TR1=1;
	TI=1;
    //TCON.6=1;
	//SCON.1=1;

/*	TH1=0xfa;*/
/*	TL1=0xfa;*/
/*    TR1=1;*/
/*	TI=1;*/
	}

unsigned char rx_char()
{
	while(1)
	if((SCON & 0x01)==0x01)	 break;
	
//	SCON.0=0;
	RI=0;
	return SBUF;
}
	
void tx_char( char c)
{
	while(1)
	if((SCON & 0x02)==0x02) break;
	
//	SCON.1=0;
	TI=0;
	SBUF=c;
}

 

void delay(int time) {
int i,j;
for (i=0;i<time;i++) 
{
	for (j= 0;j<10;j++) ;} 
}

void out_disp(unsigned char dd) {
	unsigned char i,k;
	for (i=0;i<8;i++) {  k=dd & 0x01;P10=k;P12=1;dd=dd>>1;P12=0;	}
               }



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?