?? text2.lst
字號:
C51 COMPILER V8.02 TEXT2 01/01/2008 22:16:01 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3 sbit dc=0xa0; /*P2.0 LCD 的RS 21*/
4 sbit rw=0xa1; /*P2.1 LCD 的R/W 22*/
5 sbit cs=0xa4; /*P2.4 LCD 的E 25*/
6 sfr lcdbus=0x80; /*p0LCD 數(shù)據(jù) D0=P0.0*/
7 unsigned int sys10mscounter;
8 unsigned char syslimitcounter;
9 char path1[8]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};/*自定義符號橫1*/
10 char path2[8]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};/*自定義符號橫2*/
11 char pats1[8]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};/*自定義符號豎1*/
12 char pats2[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};/*自定義符號豎2*/
13 void soft_nop(){}
14 void soft_10ms()/***********12MHZ 提供10MS 軟件延時************/
15 { register int i;
16 1 for(i=0;i<711;i++);
17 1 }
18 void soft_20ms()/***********12MHZ 提供20MS 軟件延時************/
19 { soft_10ms();
20 1 soft_10ms();
21 1 }
22
23 void hard_10ms(unsigned int delaytime) /*基于10MS 的硬件延時*/
24 { sys10mscounter=delaytime;
25 1 while(sys10mscounter);
26 1 }
27 unsigned char data lcdcounter;
28 bit lcdusing1,lcdusing2;
29 bit lcd_checkbusy()/*檢查LCD 忙*/
30 { register lcdstate;
31 1 dc=0; /*dc=1為數(shù)據(jù),=0 為命令.*/
32 1 rw=1; /*rw=1為讀,=0為寫.*/
33 1 cs=1; /*cs=1選通.*/
34 1 soft_nop();
35 1 lcdstate=lcdbus;
36 1 cs=0;
37 1 return((bit)(lcdstate&0x80));
38 1 }
39 void lcd_wrcmd(unsigned char lcdcmd) /*寫LCD命令*/
40 { lcdusing1=1;
41 1 while(lcd_checkbusy());
42 1 lcdbus=lcdcmd;
43 1 dc=0; /*dc=1為數(shù)據(jù),=0 為命令.*/
44 1 rw=0; /*rw=1為讀,=0為寫.*/
45 1 cs=1; /*cs=1選通.*/
46 1 soft_nop();
47 1 cs=0;
48 1 lcdbus=0xff;
49 1 lcdusing1=0;
50 1 }
51 void lcd_moveto(char position) /*移動光標(biāo)到指定位.0-79*/
52 { register cmd=0x80;
53 1 lcdcounter=position;
54 1 if (position > 59)
55 1 position += 0x18;
C51 COMPILER V8.02 TEXT2 01/01/2008 22:16:01 PAGE 2
56 1 else
57 1 { if (position > 39)position -= 0x14;
58 2 else
59 2 { if (position > 19)position += 0x2c;
60 3 }
61 2 }
62 1 cmd=cmd|position;
63 1 lcd_wrcmd(cmd);
64 1 }
65 void lcd_wrdata(char lcddata) /*在當(dāng)前顯示位置顯示數(shù)據(jù)*/
66 { char i;
67 1 lcdusing2=1;
68 1 while(lcd_checkbusy());
69 1 if(lcdcounter==20){
70 2 lcd_moveto(20);
71 2 while(lcd_checkbusy());
72 2 }
73 1 if(lcdcounter==40){
74 2 lcd_moveto(40);
75 2 while(lcd_checkbusy());
76 2
77 2 }
78 1 if(lcdcounter==60){
79 2 lcd_moveto(60);
80 2 while(lcd_checkbusy());
81 2 }
82 1 if(lcdcounter==80){
83 2 lcd_moveto(0);
84 2 while(lcd_checkbusy());
85 2 lcdcounter=0;
86 2 } /*為通用而如此*/
87 1 lcdcounter++;
88 1 lcdbus=lcddata;
89 1 dc=1; /*dc=1為數(shù)據(jù),=0 為命令.*/
90 1 rw=0; /*rw=1為讀,=0為寫.*/
91 1 cs=1; /*cs=1選通.*/
92 1 soft_nop();
93 1 cs=0;
94 1 lcdbus=0xff;
95 1 lcdusing2=0;
96 1 }
*** WARNING C280 IN LINE 66 OF TEXT2.C: 'i': unreferenced local variable
97 void lcd_string(char *strpoint) /*在當(dāng)前顯示位置顯示LCD 字符串*/
98 { register i=0;
99 1 while(strpoint[i]!=0){
100 2 lcd_wrdata(strpoint[i]);
101 2 i++;
102 2 }
103 1 }
104 void lcd_init()/*初始化*/
105 { lcd_wrcmd(0x38); /*設(shè)置8 位格式,2行,5*7*/
106 1 lcd_wrcmd(0x0c); /*整體顯示,關(guān)光標(biāo),不閃爍*/
107 1 lcd_wrcmd(0x06); /*設(shè)定輸入方式,增量不移位*/
108 1 lcd_wrcmd(0x01); /*清除顯示*/
109 1 lcdcounter=0;
110 1 }
111 void lcd_cls()/*清除顯示*/
112 { lcd_wrcmd(0x01);
113 1 lcdcounter=0;
114 1 }
115 void timer0(void) interrupt 1 /*T0中斷*/
116 { TH0=0xd8; /*12M,10ms*/
C51 COMPILER V8.02 TEXT2 01/01/2008 22:16:01 PAGE 3
117 1 TL0=0xf6;
118 1 TR0=1;
119 1 if(sys10mscounter!=0)sys10mscounter--; /*定時器10ms*/
120 1 if(syslimitcounter!=0)syslimitcounter--; /*定時器10ms*/
121 1 }
122 main()
123 {
124 1 unsigned char j;
125 1 IE=0;P0=0xff;P1=0xff;P2=0xff;P3=0xff; /*初始化T*/
126 1 lcd_init();soft_20ms();
127 1 TMOD=0x51;
128 1 TH0=0xd8; /*12M,10ms*/
129 1 TL0=0xf6;
130 1
131 1 TR0=1;ET0=1;EA=1;
132 1 while(1)
133 1 {
134 2 /*全黑橫一橫二豎一豎二U Q ABCD... */
135 2 lcd_init(); /*全黑*/
136 2 for(j=0;j<80;j++){lcd_wrdata(0xff);}
137 2 hard_10ms(50);
138 2 lcd_init(); /*橫一可參考自行設(shè)計(jì)符號*/
139 2 lcd_wrcmd(0x40);
140 2 for(j=0;j<8;j++)lcd_wrdata(path1[j]);
141 2 for(j=0;j<100;j++)lcd_wrdata(0);
142 2 hard_10ms(50);
143 2 lcd_init(); /*橫二*/
144 2 lcd_wrcmd(0x40);
145 2 for(j=0;j<8;j++)lcd_wrdata(path2[j]);
146 2 for(j=0;j<100;j++)lcd_wrdata(0);
147 2 hard_10ms(50);
148 2 lcd_init(); /*豎一*/
149 2 lcd_wrcmd(0x40);
150 2 for(j=0;j<8;j++)lcd_wrdata(pats1[j]);
151 2 for(j=0;j<100;j++)lcd_wrdata(0);
152 2 hard_10ms(50);
153 2 lcd_init(); /*豎二*/
154 2 lcd_wrcmd(0x40);
155 2 for(j=0;j<8;j++)lcd_wrdata(pats2[j]);
156 2 for(j=0;j<100;j++)lcd_wrdata(0);
157 2 hard_10ms(50);
158 2 lcd_init();
159 2 lcd_string("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU");
160 2 hard_10ms(50);
161 2 lcd_init();
162 2 lcd_string("QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ");
163 2 hard_10ms(50);
164 2 lcd_init();
165 2 lcd_string("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz0123456789+-!#$%&?");
166 2 hard_10ms(50);
167 2 }
168 1 }
169 //*以上C51 程序僅為測試使用僅供參考請自行斷定不同的驅(qū)動CPU 和不同的語言
170 //參考時序圖請自行編寫程式
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 566 ----
CONSTANT SIZE = 243 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 36 6
C51 COMPILER V8.02 TEXT2 01/01/2008 22:16:01 PAGE 4
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -