📄 serial.lst
字号:
C51 COMPILER V6.23a SERIAL 08/24/2003 16:21:16 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE serial.c OPTIMIZE(6,SPEED) BROWSE ORDER DEBUG OBJECTEXTEND LISTINCLUDE TABS
-(8)
stmt level source
1 //************************************************************************
2 //文件原作者:"51单片机世界" 斑竹丁丁(聂小猛)
3 //由液晶汉显模块demo程序修改而成。
4 //*************************************************************************
5 //本函数集来自“51单片机世界”,作者斑竹丁丁(聂小猛)。
6 //主页地址http://www.mcu51.com
7 //串口中断服务程序,仅需做简单调用即可完成串口输入输出的处理
8 //出入均设有缓冲区,大小可任意设置。
9 //可供使用的函数名:
10 /*
11 extern char getbyte(void);//从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
12 extern putbyte(char c);//放入一个字节到发送缓冲区
13 extern putstring(uchar *puts);//发送一个定义在程序存储区的字符串到串口
14 extern puthex(uchar c);//发送一个字节的hex码,分成两个字节发。
15 extern bit inbufsign;
16 #define CR putstring("\r\n")//发送一个回车换行
17 extern void serial_init (void);
18 */
19
20 //*************************************************************************
21 #pragma small
22 #include <reg51.h>
1 =1 /*--------------------------------------------------------------------------
2 =1 REG51.H
3 =1
4 =1 Header file for generic 80C51 and 80C31 microcontroller.
5 =1 Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc.
6 =1 All rights reserved.
7 =1 --------------------------------------------------------------------------*/
8 =1
9 =1 /* BYTE Register */
10 =1 sfr P0 = 0x80;
11 =1 sfr P1 = 0x90;
12 =1 sfr P2 = 0xA0;
13 =1 sfr P3 = 0xB0;
14 =1 sfr PSW = 0xD0;
15 =1 sfr ACC = 0xE0;
16 =1 sfr B = 0xF0;
17 =1 sfr SP = 0x81;
18 =1 sfr DPL = 0x82;
19 =1 sfr DPH = 0x83;
20 =1 sfr PCON = 0x87;
21 =1 sfr TCON = 0x88;
22 =1 sfr TMOD = 0x89;
23 =1 sfr TL0 = 0x8A;
24 =1 sfr TL1 = 0x8B;
25 =1 sfr TH0 = 0x8C;
26 =1 sfr TH1 = 0x8D;
27 =1 sfr IE = 0xA8;
28 =1 sfr IP = 0xB8;
29 =1 sfr SCON = 0x98;
30 =1 sfr SBUF = 0x99;
31 =1
32 =1
C51 COMPILER V6.23a SERIAL 08/24/2003 16:21:16 PAGE 2
33 =1 /* BIT Register */
34 =1 /* PSW */
35 =1 sbit CY = 0xD7;
36 =1 sbit AC = 0xD6;
37 =1 sbit F0 = 0xD5;
38 =1 sbit RS1 = 0xD4;
39 =1 sbit RS0 = 0xD3;
40 =1 sbit OV = 0xD2;
41 =1 sbit P = 0xD0;
42 =1
43 =1 /* TCON */
44 =1 sbit TF1 = 0x8F;
45 =1 sbit TR1 = 0x8E;
46 =1 sbit TF0 = 0x8D;
47 =1 sbit TR0 = 0x8C;
48 =1 sbit IE1 = 0x8B;
49 =1 sbit IT1 = 0x8A;
50 =1 sbit IE0 = 0x89;
51 =1 sbit IT0 = 0x88;
52 =1
53 =1 /* IE */
54 =1 sbit EA = 0xAF;
55 =1 sbit ES = 0xAC;
56 =1 sbit ET1 = 0xAB;
57 =1 sbit EX1 = 0xAA;
58 =1 sbit ET0 = 0xA9;
59 =1 sbit EX0 = 0xA8;
60 =1
61 =1 /* IP */
62 =1 sbit PS = 0xBC;
63 =1 sbit PT1 = 0xBB;
64 =1 sbit PX1 = 0xBA;
65 =1 sbit PT0 = 0xB9;
66 =1 sbit PX0 = 0xB8;
67 =1
68 =1 /* P3 */
69 =1 sbit RD = 0xB7;
70 =1 sbit WR = 0xB6;
71 =1 sbit T1 = 0xB5;
72 =1 sbit T0 = 0xB4;
73 =1 sbit INT1 = 0xB3;
74 =1 sbit INT0 = 0xB2;
75 =1 sbit TXD = 0xB1;
76 =1 sbit RXD = 0xB0;
77 =1
78 =1 /* SCON */
79 =1 sbit SM0 = 0x9F;
80 =1 sbit SM1 = 0x9E;
81 =1 sbit SM2 = 0x9D;
82 =1 sbit REN = 0x9C;
83 =1 sbit TB8 = 0x9B;
84 =1 sbit RB8 = 0x9A;
85 =1 sbit TI = 0x99;
86 =1 sbit RI = 0x98;
23 //#include "w77e58.h"
24 #define uchar unsigned char
25 #define uint unsigned int
26
27 #define ILEN 36 //32 /* size of serial receiving buffer */
28 idata uchar inbuf[ILEN];
29 data uchar idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置
30 data uchar idata *getlast=inbuf; //最后取走的字节位置
C51 COMPILER V6.23a SERIAL 08/24/2003 16:21:16 PAGE 3
31 bit inbufsign; //接收缓冲区非空标志 有=1
32 bit inbufful; //输入缓冲区满标志 满=1
33 //#define CR putstring("\r\n") //CR=回车换行
34
35 //*****************************
36 /*串口2接收一个字节数据
37 uchar getchar(void)
38 {
39 uchar c;
40 RI_1 = 0;
41 while(!RI_1);
42 c= SBUF1;
43 SBUF1 = c;
44 RI_1 = 0;
45 return c;
46 }
47 */
48 /********************************************************************
49 程序功能:扫描4*4小键盘得到key[4][4]中的一个字符 *
50 键盘安排:这是一个编辑输入的小键盘 *
51 ┌┬──┐┌┬──┐┌┬──┐┌┬──┐ *
52 ││ 1 │┆│ 2 │┆│ 3 │┆│ 4 │ *
53 ││,.;?│┆│abc │┆│def │┆│ghi │ *
54 │└──┤┆└──┤┆└──┤┆└──┤ *
55 │ └────┴────┴────┴──┐ *
56 ├┬──┐├┬──┐├┬──┐├┬──┐ │ *
57 ││ 5 │┆│ 6 │┆│ 7 │┆│ 8 │ │ *
58 ││jkl │┆│mno │┆│pqrs│┆│tuv │ │ *
59 │└──┤┆└──┤┆└──┤┆└──┤ │ *
60 │ └────┴────┴────┴─┐│ *
61 ├┬──┐├┬──┐├┬──┐├┬──┐ ││ *
62 ││ 9 │┆│ 0 │┆│前移│┆│后移│ ││ *
63 ││WXYZ│┆│空格│┆│(英)│┆│(数)│ ││ *
64 │└──┤┆└──┤┆└──┤┆└──┤ ││ *
65 │ └────┴────┴────┴┐││ *
66 ├┬──┐├┬──┐├┬──┐├┬──┐│││ *
67 ││前页│┆│后页│┆│取消│┆│确定│││└─P1.0 行 *
68 ││(拼)│┆│ │┆│ ← ┆││ ? ││└──P1.1 行 *
69 │└──┤┆└──┤┆└──┤┆└──┤└───P1.2 行 *
70 │ └────┴────┴────┴────P1.3 行 *
71 │ ┆ ┆ └────────P1.4 列 *
72 │ │ └─────────────P1.5 列 *
73 │ └──────────────────P1.6 列 *
74 └───────────────────────P1.7 列 *
75 行: P1.0~P1.3 *
76 列: P1.7~P1.4 *
77 扫描原理: 从P1.7到P1.4逐位清0,然后检测P1.0~P1.3那个被拉低 *
78 参考例程: 51单片机世界->汉显液晶主页 http://www.hzlcd.com *
79 斑竹丁丁 的 DEMO程序 并得到诸位大侠的指点而作成的 *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -