📄 t.lst
字号:
C51 COMPILER V8.08 T 04/20/2007 20:29:50 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE T
OBJECT MODULE PLACED IN t.OBJ
COMPILER INVOKED BY: D:\Keil_ARM\C51\BIN\C51.EXE t.c COMPACT BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<ks0108.h>
3 #include<lib.h>
4 //===========================函数声明=====================================//
5 void SendData(unsigned char Serial_data) ;
6 unsigned char ReadCode();
7 unsigned char DisplayUART();
8 void ChangCode();
9 //==========================================================================//
10 sbit key0=P3^2;//=======确认键
11 sbit key1=P3^3;//=======选择键
12 sbit key2=P3^4;//=======确认键2
13 sbit Inf=P3^5;//15pin
14 sbit LED=P0^0;
15 sbit LED2=P0^5;
16 unsigned char SerialBuf[100];
17 unsigned char SerialBufCount;
18 unsigned char Flag=0;
19 //=====================================================================//
20
21 //====================主程序======================//
22 main()
23 {
24 1 TMOD=0x21;
25 1 TH1=0xE8; //波特率1200时,定时器/计数器T1自动重装初值
26 1 TL1=0xE8;
27 1 PCON=0x00; //SMOD为0不倍增模式
28 1 SCON=0xc0; //串行口设置为模式3,//
29 1 //REN=1; //允许接收
30 1 //ES=0; //串行口允许中断
31 1 EA=1;
32 1 IT1=1;
33 1 IT0=1; //键盘中断
34 1 EX0=1;EX1=1;
35 1 Initialize();
36 1 ClearScr(0,0,8,128);
37 1 DisplayListChar(0,0,Tip,0);
38 1 DisplayPic(1,1,2,16,wu,1);DisplayPic(1,17,2,16,zhi,1);DisplayPic(1,33,2,16,bin,1);//汉字测试
39 1 DisplayPic(3,1,2,16,hzk[0],1);DisplayPic(3,17,2,16,hzk[1],1);DisplayPic(3,33,2,16,hzk[2],1);//汉字测试
40 1 Delay(200);
41 1 while(1)
42 1 {if (key2==0){Delay(2000);while(key2==0);Flag=3;}
43 2 switch (Flag)
44 2 {case 1:LED=0;ClearScr(0,0,8,128);DisplayListChar(0,0,Rec,0);
45 3 ReadCode();LED2=0;DisplayListChar(0,0,End,0);Flag=0;break;
46 3 case 2:ClearScr(0,0,8,128);DisplayUART();Flag=0;break;
47 3 case 3:ClearScr(0,0,8,128);DisplayListChar(0,0,Cod,0);ChangCode();Flag=0;break;
48 3 }
49 2 }
50 1 }
51 //=============================================================================//
52 void Key_1() interrupt 2
53 {
54 1 Delay(2000);
55 1 while(key1==0);
C51 COMPILER V8.08 T 04/20/2007 20:29:50 PAGE 2
56 1 Flag=1;
57 1 }
58 //==============================================================================//
59
60 //KEY0确认键处理子程序==============================================================//
61 void Key_0() interrupt 0
62 {
63 1 Delay(2000);
64 1 while(key0==0);
65 1 Flag=2;
66 1 }
67
68 //UART中断程序
69 void Uart() interrupt 4
70 {RI=0;
71 1 SerialBuf[SerialBufCount]= SBUF;
72 1 SerialBufCount++;
73 1 }
74 //==============================================================================//
75 unsigned char DisplayUART()
76 {
77 1 unsigned char i,x=0,y=0;
78 1 TR1=1;//ES=1;
79 1 for (i=0;i<SerialBufCount;i++)
80 1 {
81 2 SendData(SerialBuf[i]);
82 2 if (y>120)y=0,x++;
83 2 if (SerialBufCount>100)return(1);
84 2 DisplayListChar(x,y,&Number[SerialBuf[i]],0);y+=14;
85 2 }
86 1 SerialBufCount=0;LED2=1;LED=1;
87 1 TR1=0;//ES=0;
88 1 }
89 //---------------------------------------------*/
90 void SendData(unsigned char Serial_data)
91 {
92 1 ACC=Serial_data;
93 1 TB8=P;TI=0;
94 1 SBUF=Serial_data;
95 1 while(!TI);
96 1 TI=0;
97 1 }
98
99 //---------------------------------------------
100 unsigned char ReadCode()
101 {
102 1 unsigned char i;
103 1 SerialBufCount=0;
104 1 while(Inf==1);// 等待信号
105 1 TH0=0x00;
106 1 TL0=0x00;
107 1 TR0=1; // 如果有信号开定时器(这时的信号为引导码)
108 1 //--------------------------------
109 1 for (i=0;i<100;i++)//读值
110 1 {
111 2 while(Inf==0);TR0=0;
112 2 //读值时先等待低电平可以省去判断引导码的过程(引导码过后的第一个低电平表示数据开始)
113 2 SerialBuf[SerialBufCount]= TH0;
114 2 SerialBufCount++; TH0=0x00;TL0=0x00;TR0=1;//只需取个大概值所以省略TL0
115 2
116 2 while(Inf==1);
117 2 if (TH0>0x4e) {SerialBufCount--;return 0;}
C51 COMPILER V8.08 T 04/20/2007 20:29:50 PAGE 3
118 2 //如果所有的数据接收完了就返回(当接收端出现大于0x4e时间的高电平就表示结束)
119 2 TR0=0;
120 2 SerialBuf[SerialBufCount]= TH0;
121 2 SerialBufCount++; TH0=0x00;TL0=0x00;TR0=1;
122 2 }
123 1 }
124
125 //--------------------------------
126 void ChangCode()
127 {
128 1 unsigned char temp=0,i,k=3,x,Code[4];
129 1 for (x=0;x<4;x++)
130 1 {
131 2 for (i=0;i<8;i++)
132 2 {
133 3 temp=temp>>1;
134 3 if (SerialBuf[i+k]>0x04){temp=temp|0x80;k++;}
135 3 else if (SerialBuf[i+k]<0x04){temp=temp&0x7f;k++;}
136 3 }
137 2
138 2 Code[x]=temp;k=k+8;
139 2 }
140 1 i=30;
141 1 TR1=1;
142 1 for (x=0;x<4;x++)
143 1 {SendData(Code[x]);DisplayListChar(2,i,&Number[Code[x]],0);i+=14;}
144 1 TR1=0;LED2=1;LED=1;
145 1 }
146
147
148
149
150
151
152
153
154
155
156
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 938 ----
CONSTANT SIZE = 1044 ----
XDATA SIZE = ---- ----
PDATA SIZE = 102 9
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -