📄 340_lcd.lst
字号:
C51 COMPILER V8.05a 340_LCD 05/16/2009 15:36:50 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE 340_LCD
OBJECT MODULE PLACED IN 340_lcd.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\C51.EXE 340_lcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************************************
2 由于LV595芯片片选引脚与以太网控制芯片CP2200中断引脚复用因些在此例程中加入了将
3 CP2200芯片中断关闭的代码。还要在建立工程文件时将CP220X_REG.C文件包含到工程中.
4 ******************************************************************************/
5
6
7 #include "C8051F340.h"
8 #include "INTRINS.H"
9 #include "cp220x_reg.h"
10 //#include "DS1302.h"
11
12 #define uchar unsigned char
13 #define uint unsigned int
14 #define BASE_ADDRESS 0x10
15 #define EMIF_TIMING 0x9E
16 //***************DS1302*******************************
17 //**************************************************
18
19 sbit LcdCs=P0^3;
20 sbit led=P2^4;
21 bit SPI_BUSY;
22
23
24
25
26 uchar xdata virt_port;
27 uchar xdata discode;//开关显示、光标、闪烁的命令字暂存单元
28 uint Count1ms;
29
30
31 //signed char xdata tab1[16]={0x20,0x20,0x42,0x54,0x20,0x46,0x33,0x34,0x30,0x20,0x56,0x31,0x2e,0x30,0x20,0
-x20};
32 unsigned char xdata Netdata[16]={0x77,0x77,0x77,0x2e,0x78,0x68,0x6c,0x2e,0x63,0x6f,0x6d,0x2e,0x63,0x6e,0x2
-0,0x20};
33 //void delay(uint timer);
34 void writelcd(uchar spi_data);
35 void writecode(uchar ins);
36 void writedata(uchar d);
37 void lcdinit();
38 void lcdchar (void);
39 void lcdaddr(uchar DDRAM);
40 void cursoropen(uchar position);//开光标,关闪烁
41 void displayopen(void); //开显示,光标、闪烁不变
42 void ether_reset_low();
43 void ether_reset_high (void);
44 void Delay1ms(uint T);
45 void EMIF_Init (void);
46
47 uint da;
48 void delay1us(void)
49 {
50 1 uchar xdata i;
51 1 for(i=10;i>0;i--);
52 1 }
53
C51 COMPILER V8.05a 340_LCD 05/16/2009 15:36:50 PAGE 2
54 #define NOP _nop_()
55 #define uchar unsigned char
56 sbit IO=P3^1;
57 sbit SCLK=P3^2;
58 sbit RSTB=P3^3;
59
60 void delay(uchar i)
61 {
62 1 while (--i);
63 1 }
64
65 //*****************************RESET FUNCTION///////////////
66 void reset()
67 {
68 1 RSTB=0;
69 1 SCLK=0;
70 1 delay(100);
71 1 RSTB=1;
72 1 delay(100);
73 1 }
74 //***************************BYTE WRITE************//
75 void wbyte(uchar w_byte)
76 {
77 1 uchar i;
78 1 for(i=0;i<8;++i)
79 1 {
80 2 IO=0;
81 2 if(w_byte&0x01) IO=1;
82 2 SCLK=0;
83 2 delay(20);
84 2 SCLK=1;
85 2 delay(20);
86 2 w_byte>>=1;
87 2
88 2 }
89 1 }
90 //*********************** BYTE READ******************//
91 uchar rbyte()
92 {
93 1 uchar i;
94 1 uchar R_BYTE;
95 1 uchar TMPBYTE;
96 1 R_BYTE=0X00;
97 1 IO=1;
98 1 for(i=0;i<8;++i)
99 1 {
100 2
101 2 SCLK=1;
102 2 delay(20);
103 2 SCLK=0;
104 2 TMPBYTE=(uchar)IO;
105 2 TMPBYTE<<=7;
106 2 R_BYTE>>=1;
107 2 R_BYTE|=TMPBYTE;
108 2 delay(20);
109 2 }
110 1 return(R_BYTE);
111 1 }
112
113 uchar time_data[8]={0,0,1,1,1,1,1,1};//sec,min,hrs,dte,mon,day,yr
114 uchar time_diplay[14]={0x31,0x35,0x38,0x32,0x39,0x33,0x34,0x33,0x32,0x37,0x31};
115
C51 COMPILER V8.05a 340_LCD 05/16/2009 15:36:50 PAGE 3
116 //*********************时间初始校准与初始化**************************************//
117 void time_int_DS1302() //24小时模式
118 {
119 1 uchar time[8]={0,0,0x12,1,1,1,0,0};//sec,min,hrs,dte,mon,day,yr
120 1 // uchar i;
121 1 reset();
122 1 wbyte(0x8e);//写保护控制寄存器
123 1 wbyte(0);//允许写入
124 1 reset();
125 1 wbyte(0x90); //涓流充电控制寄存器
126 1 wbyte(0); //禁止充电
127 1 reset();
128 1 wbyte(0x80); //秒 //2000年1月1日12点0分13秒 星期一
129 1 wbyte(0x13);
130 1 reset();
131 1 wbyte(0x82); //分
132 1 wbyte(0x00);
133 1 reset();
134 1 wbyte(0x84); //HR
135 1 wbyte(0x12);
136 1 reset();
137 1 wbyte(0x86); //DATA
138 1 wbyte(0x00);
139 1 reset();
140 1 wbyte(0x88); //MOUTH
141 1 wbyte(0x00);
142 1 reset();
143 1 wbyte(0x8A); //DAY
144 1 wbyte(0x00);
145 1 reset();
146 1 wbyte(0x8C); //YEAR
147 1 wbyte(0x20);
148 1 reset();
149 1 // for(i=0;i<8;i++)
150 1 // wbyte(time[i]);
151 1 // reset();
152 1 }
153 //****************************************************************************
154 //****************DS1302显示数据 ASCII码数字转化 ***********************/
155 //******************************************************************************
156
157 /*void display_xlat()
158 {
159 uchar i,j=0,num1,num2;
160 for(i=0;i<7;i++)
161 {
162 num1=time_data[i]&0x0F;
163 num2=time_data[i];
164 num2>>=4;
165 time_diplay[j]=num1+0x30;
166 time_diplay[j+1]=num2+0x30;
167 j+=2;
168 }
169 }
170 */uchar time_sec=0;
171 //**********************时间显示***************************************
172 void time_display_DS1302()
173 {
174 1
175 1 reset();
176 1 wbyte(0x81);
177 1 time_sec=rbyte();
C51 COMPILER V8.05a 340_LCD 05/16/2009 15:36:50 PAGE 4
178 1 reset();
179 1 time_data[0]=(time_sec>>4)+0x30;
180 1 time_data[1]=(time_sec&0x0f)+0x30;
181 1
182 1 }
183
184 void SPI_Init()
185 {
186 1 SPI0CFG = 0x70;
187 1 SPI0CN = 0x01;
188 1 SPI0CKR = 0x3B;
189 1
190 1
191 1 }
192
193 void writelcd(uchar spi_data) //向LV595写数据以SPI方式
194 {
195 1
196 1 uint xdata i,j;
197 1 for(i=0;i<3;i++)
198 1 LcdCs=0;
199 1 SPI_BUSY=1;
200 1 delay1us();
201 1 SPI0DAT=spi_data;
202 1 for(j=0;j<500;j++)
203 1 {
204 2 if(!SPI_BUSY)break;
205 2 }
206 1 delay1us();
207 1 LcdCs=1;
208 1 delay1us();
209 1 delay1us();
210 1 delay1us();
211 1 delay1us();
212 1 delay1us();
213 1 delay1us();
214 1 delay1us();
215 1 // for(j=0;j<5000;j++);
216 1
217 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -