Msc51 single-chip serial port problems for help

Source: Internet
Author: User

Receiving procedure:

# Include <reg52.h>
# Include <intrins. h>
# Include <string. h>

Unsigned char num;
Sbit rs = P2 ^ 0;
Sbit RW = P2 ^ 1;
Sbit en = P2 ^ 2;

Void delayms (ms int)
{
Char I;
While (MS --)
{
For (I = 0; I <120; I ++ );
}
}

Char read_ LCD _state ()
{
Char state;
Rs = 0; RW = 1; en = 1; delayms (1 );
State = P0;
En = 0; delayms (1 );
Return state;
}

Void LCD _busy_wait ()
{
While (read_ LCD _state () & 0x80) = 0x80 );
Delayms (5 );
}

Void write_ LCD _data (char dat)
{
LCD _busy_wait ();
Rs = 1; RW = 0; en = 0; p0 = dat; en = 1; delayms (1); en = 0;
}

Void write_ LCD _command (char cmd)
{
LCD _busy_wait ();
Rs = 0; RW = 0; en = 0; p0 = cmd; en = 1; delayms (1); en = 0;
}

Void init_ LCD ()
{
Write_ LCD _command (0x38 );
Delayms (1 );
Write_ LCD _command (0x01 );
Delayms (1 );
Write_ LCD _command (0x06 );
Delayms (1 );
Write_ LCD _command (0x0c );
Delayms (1 );
}

Void set_ LCD _pos (char P)
{
Write_ LCD _command (p | 0x80 );
}

Void display_ LCD _string (char P, char * s)
{
Char I;
Set_ LCD _pos (P );
For (I = 0; I <16; I ++)
{
Write_ LCD _data (s [I]);
Delayms (1 );
}
}

Void main ()
{
Tmod = 0x20;
Th1 = 0x0f3;
TL1 = 0x0f3;
Scon = 0x50;
Pcon = 0x00;
Tr1 = 1;
Ea = 1;
Es = 1;
Init_ LCD ();

While (1)
{
Display_ LCD _string (0x00, & num );
}
}

Void intrr () interrupt 4
{
 
Ri = 0;
While (Ri = 0)
{
;
}
Num = sbuf;
}

 

 

 

Program:

# Include <reg52.h>
# Include <intrins. h>
# Include <string. h>
# Define scanport p3
// # Define lcdport P0
Sbit rs = P2 ^ 0;
Sbit RW = P2 ^ 1;
Sbit E = P2 ^ 2;

Void delayms ()
{
Int I;
For (I = 0; I <1000; I ++ );
}
Char writelcddata (char dat)
{
Rs = 1; RW = 0; E = 0; p0 = dat; E = 1; delayms (); E = 0;
Return dat;
}
Void writelcdcommand (char cmd)
{
Rs = 0; RW = 0; E = 0; p0 = cmd; E = 1; delayms (); E = 0;
}

Unsigned char linescan [4] = {0xef, 0xdf, 0xbf, 0x7f}; // The scanning voltage of the column line, which is divided into column 1, 2, 3, and 4.
// It is a low level, and others are a high level.
Unsigned char uckeyscan ()
{
Unsigned char temp = 0; // The scan status is temporarily saved.
Unsigned char ROW = 0, line = 0; // row number, column number.

For (line = 0; line <4; line ++) // column Scan
{
Scanport = linescan [Line]; // output scan potential.
Temp = scanport & 0x0f; // input scanning potential, and shielded 4-digit High.
If (temp! = 0x0f)
{// Determines whether a key is pressed for this column.
Switch (temp)
{
Case 0x0e: ROW = 10; break; // If yes, the row number is determined.
Case 0x0d: ROW = 20; break;
Case 0x0b: ROW = 30; break;
Case 0x07: ROW = 40; break;
Default: ROW = 50; break;
}
Break;
}
}
// <Before scanning, the initial status >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Scanport = 0x0f; // restore the P2 Port
Return row + LINE + 1; // return the key encoding. The format is 2-digit, the high is the row number, and the low is the column number.
}

Void showonechar (unsigned char chartemp)
{
Switch (chartemp)
{
Case '': writelcddata (0x20); break;
Case '! ': Writelcddata (0x21); break;
Case '"': writelcddata (0x22); break;
Case '#': writelcddata (0x23); break;
Case '$': writelcddata (0x24); break;
Case '%': writelcddata (0x25); break;
Case '&': writelcddata (0x26); break;
Case '>': writelcddata (0x27); break;
Case '(': writelcddata (0x28); break;
Case ')': writelcddata (0x29); break;
Case '*': writelcddata (0x2a); break;
Case '+': writelcddata (0x2b); break;
Case '-': writelcddata (0x2d); break;
Case '.': writelcddata (0x2e); break;
Case '/': writelcddata (0x2f); break;
Case '=': writelcddata (0x3d); break;
Case '<': writelcddata (0x3e); break;
Case '? ': Writelcddata (0x3f); break;
Case '^': writelcddata (0x5e); break;
Case ': writelcddata (0x3a); break;

Case '0': writelcddata (0x30); break;
Case '1': writelcddata (0x31); break;
Case '2': writelcddata (0x32); break;
Case '3': writelcddata (0x33); break;
Case '4': writelcddata (0x34); break;
Case '5': writelcddata (0x35); break;
Case '6': writelcddata (0x36); break;
Case '7': writelcddata (0x37); break;
Case '8': writelcddata (0x38); break;
Case '9': writelcddata (0x39); break;

Case 'A': writelcddata (0x41); break;
Case 'B': writelcddata (0x42); break;
Case 'C': writelcddata (0x43); break;
Case 'D': writelcddata (0x44); break;
Case 'E': writelcddata (0x45); break;
Case 'F': writelcddata (0x46); break;
Case 'G': writelcddata (0x47); break;
Case 'H': writelcddata (0x48); break;
Case 'I': writelcddata (0x49); break;
Case 'J': writelcddata (0x4a); break;
Case 'K': writelcddata (0x4b); break;
Case 'l': writelcddata (0x4c); break;
Case 'M': writelcddata (0x4d); break;
Case 'N': writelcddata (0x4e); break;
Case 'O': writelcddata (0x4f); break;
Case 'p': writelcddata (0x50); break;
Case 'q': writelcddata (0x51); break;
Case 'r': writelcddata (0x52); break;
Case's ': writelcddata (0x53); break;
Case 'T': writelcddata (0x54); break;
Case 'U': writelcddata (0x55); break;
Case 'V': writelcddata (0x56); break;
Case 'W': writelcddata (0x57); break;
Case 'X': writelcddata (0x58); break;
Case 'y': writelcddata (0x59); break;
Case 'Z': writelcddata (0x5a); break;

Case 'A': writelcddata (0x61); break;
Case 'B': writelcddata (0x62); break;
Case 'C': writelcddata (0x63); break;
Case 'D': writelcddata (0x64); break;
Case 'E': writelcddata (0x65); break;
Case 'F': writelcddata (0x66); break;
Case 'G': writelcddata (0x67); break;
Case 'H': writelcddata (0x68); break;
Case 'I': writelcddata (0x69); break;
Case 'J': writelcddata (0x6a); break;
Case 'K': writelcddata (0x6b); break;
Case 'l': writelcddata (0x6c); break;
Case 'M': writelcddata (0x6d); break;
Case 'N': writelcddata (0x6e); break;
Case 'O': writelcddata (0x6f); break;
Case 'p': writelcddata (0x70); break;
Case 'q': writelcddata (0x71); break;
Case 'r': writelcddata (0x72); break;
Case's ': writelcddata (0x73); break;
Case 'T': writelcddata (0x74); break;
Case 'U': writelcddata (0x75); break;
Case 'V': writelcddata (0x76); break;
Case 'W': writelcddata (0x77); break;
Case 'X': writelcddata (0x78); break;
Case 'y': writelcddata (0x79); break;
Case 'Z': writelcddata (0x7a); break;

Default: break;
}
}

Void showchar (unsigned char char1 [])
{
Unsigned char count;
For (COUNT = 0; count ++)
{
Showonechar (char1 [count]);
If (char1 [count + 1] = '/0 ')
Break;
}
}

Void keyprocess (unsigned char keycode)
{
Writelcdcommand (0xc7 );

Switch (keycode)
{
Case 11: showonechar ('7'); break; // '7'
Case 12: showonechar ('8'); break; // '8'
Case 13: showonechar ('9'); break; // '9'
Case 21: showonechar ('4'); break; // '4'
Case 22: showonechar ('5'); break; // '5'
Case 23: showonechar ('6'); break; // '6'
Case 31: showonechar ('1'); break; // '1'
Case 32: showonechar ('2'); break; // '2'
Case 33: showonechar ('3'); break; // '3'
Case 42: showonechar ('0'); break; // '0'

Case 14: showonechar ('/'); break ;//'/'
Case 24: showonechar ('*'); break ;//'*'
Case 34: showonechar ('-'); break ;//'-'
Case 44: showonechar ('+'); break; // '+'

Case 43: showonechar ('='); break; // '='

Case 41: showonechar ('C'); break; // 'on/C'

Default: break;
}
}

 

Char lcdbusystatus ()
{
Char status;
Rs = 0; RW = 1; E = 1;
P0 = status;
Delayms ();
E = 0;
Return status;
}

Void lcdbusywait ()
{
While (lcdbusystatus () & 0x80 = 0x80 );
Delayms ();
}

Void setlcdpos (char P)
{
Writelcdcommand (p | 0x80 );
}

Void writelcdstring (char P, char * s)
{
Int I;
Setlcdpos (P );
For (I = 0; I <10; I ++)
{
Writelcddata (s [I]);
}
}
Void lcdinit ()
{
Writelcdcommand (0x38 );
Delayms ();
Writelcdcommand (0x01 );
Delayms ();
Writelcdcommand (0x06 );
Delayms ();
Writelcdcommand (0x0c );
Delayms ();
}
Void main ()
{
Unsigned char count;
Lcdinit ();
Scanport = 0x0f;

While (1)
{
If (scanport! = 0x0f)
{
For (COUNT = 0; count <200; count ++ );

If (scanport! = 0x0f)
Keyprocess (uckeyscan ());
}
}

}

There is a circuit diagram in the photo. If it is a 51 single-chip microcomputer, then I know how to get it. My Keyboard Scan program will be sent to the slave machine through the serial port after scanning, I scanned the keyboard from lm1602 on the machine, but there was a problem with my serial port. I don't know whether it was a sending problem or a receiving problem or both of them had a problem. I asked for help because I was not deeply touched, hope you can get help.

Secondly, I want to discuss the effectiveness and Stability of the 51 single-chip microcomputer. Thank you. How can we achieve this. my qq76211822, MCU technology group: 42088422, also hope to help me solve the problem. grateful

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.