📄 12864lcd显示.lst
字号:
C51 COMPILER V7.02b 12864LCD_允_ 04/06/2009 00:17:44 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE 12864LCD_允_
OBJECT MODULE PLACED IN 12864LCD显示.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12864LCD显示.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //12864LCD显示温度&时钟程序
2
3
4
5 #include <AT89X52.h>
6
7 sbit Bell_Out = P1^0;//闹钟管脚输出,低有效
8
9 sbit DQ = P1^4;//ds1820data//温感数据口
10 sbit clock_clk = P3^5;//ds1302_clk//时钟同步
11 sbit clock_dat = P3^6;//ds1302_dat//时钟数据
12 sbit clock_Rst = P3^7;//ds1302_Rst//时钟复位
13
14 //键盘扫描
15 sbit Add_Key = P1^1;//加1键
16 sbit Dec_Key = P1^2;//减1键
17 sbit OK_Key = P1^3;//确定键
18
19 //引脚定义
20 sbit CS = P3^0; //片选 高电平有效 单片LCD使用时可固定高电平
21 sbit SID = P3^1; //数据
22 sbit SCLK = P3^2; //时钟
23
24 //为了编程方便定义的位变量
25 sbit a0 = ACC ^ 0;
26 sbit a1 = ACC ^ 1;
27 sbit a2 = ACC ^ 2;
28 sbit a3 = ACC ^ 3;
29 sbit a4 = ACC ^ 4;
30 sbit a5 = ACC ^ 5;
31 sbit a6 = ACC ^ 6;
32 sbit a7 = ACC ^ 7;
33
34 bit flag, Bell_Swh,Hourb,Minb,Kgb; //闹钟调时闪烁标志位
35 bit sec=0,min=0,hour=0,year=0,mon=0,day=0,weekk=0; //光标闪烁标志位
36 unsigned char id; //调时钟闪烁变量
37 unsigned char id2; //调闹钟闪烁变量
38 unsigned char d; //温度传送高4位字节
39 unsigned char e; //温度传送低4位字节
40 unsigned char S_1302; //读取小时寄存器数据
41 unsigned char H_1302; //读取分钟寄存器数据
42 unsigned char H_Bell; //读取闹钟RAM小时数据
43 unsigned char S_Bell; //读取闹钟RAM分钟数据
44
45
46 //Function Definition 函数声明
47 void Delay(int num); //延迟uM
48
49 void Init_DS18B20(void); //初始化温度感应器
50 unsigned char ReadOneChar(void); //读取温度传感器字节
51 void WriteOneChar(unsigned char dat); //发送指令到温度传感器
52 unsigned int ReadTemperature(void); //读取温度数据并转换为10进制
53
54 void clock_out(unsigned char dd); //1302时钟接收一个字节
55 unsigned char clock_in(void); //1302时钟发送一个字节
C51 COMPILER V7.02b 12864LCD_允_ 04/06/2009 00:17:44 PAGE 2
56 unsigned char read_clock(unsigned char ord); //读取1302时钟时间寄存器
57 void write_clock(unsigned char ord, unsigned char dd); //写数据或指令到1302
58
59 void Disp(void); //时间界面光标闪烁
60 void id_case1_key(void); //时间界面上下按键判别
61 void id_case2_key(void); //闹钟界面上下按键判别
62 void Set_time(unsigned char sel,bit sel_1); //判别时间光标位置,加或减
63 void Init_1302(void); //初始化时钟IC
64 void Timer0_Init(void); //TO中断初始化
65 void Set_Bell(unsigned char sel, bit sel_1); //判别闹钟时间光标位置,家或减
66 void Bell(void); //驱动蜂鸣器
67
68 //12864函数
69 void Write_char(bit start, unsigned char ddata); //写数据或者指令
70 void Send_byte(unsigned char bbyte); //发送一个字节
71 void Delaynms(unsigned int di); //延迟uM
72 void Lcd_init(void); //初始化LCD屏幕
73 void Disp_img(unsigned char *img); //插入LOGO 128*64
74 void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s);//指定LCD位置写字符
75 void LCD_set_xy( unsigned char x, unsigned char y ); //指定LCD位置
76
77 unsigned char code num[]={"0123456789 :."};
78 unsigned char code yi[]={"一"};
79 unsigned char code er[]={"二"};
80 unsigned char code san[]={"三"};
81 unsigned char code si[]={"四"};
82 unsigned char code wu[]={"五"};
83 unsigned char code liu[]={"六"};
84 unsigned char code ri[]={"日"};
85 unsigned char code guan[]={"关"};
86 unsigned char code kai[]={"开"};
87 unsigned char code bt[]={"电子万年历"};
88 unsigned char code nian[]={"年"};
89 unsigned char code yue[]={"月"};
90 unsigned char code xq[]={"星期"};
91 unsigned char code sw[]={"室温"};
92 unsigned char code ssd[]={"℃"};
93 unsigned char code nzbz []={"ON"};
94 unsigned char code nzsd []={"闹钟设定"};
95 unsigned char code colon []={":"};
96 unsigned char code nzsjd []={"闹钟时候到!"};
97 unsigned char code xsfz[]={"H : M"};
98 unsigned char code space_c[]={" "};
99
100 //插入图片
101 unsigned char code logo[]={
102 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
103 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
104 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
105 0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
106 0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
107 0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
108 0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
109 0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
110 0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
111 0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
112 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,
113 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
114 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
115 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
116 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
117 0x10,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
C51 COMPILER V7.02b 12864LCD_允_ 04/06/2009 00:17:44 PAGE 3
118 0x10,0x06,0x00,0x00,0x30,0x00,0x00,0x37,0xF8,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
119 0x30,0x06,0x00,0x01,0x20,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
120 0x30,0x06,0x00,0x02,0x60,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
121 0x38,0x06,0x00,0x16,0x40,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
122 0x3C,0x06,0x00,0x24,0x00,0x3F,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
123 0x3C,0x0F,0x00,0x64,0x01,0xFF,0xF0,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
124 0x3F,0x1F,0x00,0x60,0x0F,0xFF,0xFC,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
125 0x17,0xBF,0xE0,0x60,0x3F,0xFF,0xFE,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
126 0x00,0x7F,0x80,0x80,0xFF,0x00,0x3F,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x01,0x80,0x00,
127 0x00,0x7E,0x01,0x81,0xF8,0x00,0x0F,0x01,0xE0,0x00,0x00,0x00,0x00,0x01,0xE6,0x00,
128 0x00,0x0E,0x03,0x43,0xEF,0xFC,0x0F,0x80,0xC0,0x00,0x00,0x00,0x00,0x03,0x7F,0x00,
129 0x00,0x0E,0x03,0x07,0xCF,0xFE,0x0F,0x80,0xC0,0x00,0x00,0x00,0x00,0x06,0x19,0x80,
130 0x00,0x0E,0x06,0x0F,0xBF,0xFE,0x0F,0x80,0xC0,0x00,0x3F,0x80,0x00,0x06,0x00,0xC0,
131 0x60,0x0E,0x06,0x1F,0x3F,0xBE,0x0F,0x00,0xC0,0x00,0xFF,0xC0,0x00,0x04,0x00,0xC0,
132 0x60,0x0E,0x0E,0x3C,0x7F,0x9E,0x0F,0x10,0xC0,0x81,0x80,0x60,0x01,0x84,0x00,0xC0,
133 0x60,0x0E,0x0C,0x38,0xFF,0xFE,0x1E,0x10,0xC1,0x83,0x00,0x21,0xC6,0x8C,0x00,0x60,
134 0x38,0x1E,0x18,0x70,0xFF,0xFE,0x3C,0x30,0xC3,0x0E,0x00,0x63,0x2C,0x8C,0xE0,0x30,
135 0x7F,0x9E,0x18,0x71,0xFF,0xFC,0x78,0x70,0xC3,0x18,0x00,0x62,0x29,0x8D,0xF8,0x18,
136 0x3E,0xBF,0x18,0xE1,0xFF,0xFC,0xF0,0x7C,0xC2,0x10,0x01,0xC2,0x25,0xF9,0x1E,0x08,
137 0x30,0x76,0x18,0xC1,0xFF,0xF1,0xE0,0xEC,0xC0,0x30,0x03,0x02,0x24,0xF9,0x03,0x8C,
138 0x20,0x66,0x11,0xC0,0xFF,0xE7,0x80,0x82,0x60,0x10,0x02,0x06,0x64,0x19,0x00,0x84,
139 0x20,0xC6,0x11,0x80,0xFF,0x9F,0x00,0x00,0xF0,0x19,0xC2,0x06,0x64,0x1F,0x10,0xCC,
140 0x01,0xC4,0x09,0x80,0x7F,0x7C,0x00,0x00,0xF8,0x0F,0x63,0x06,0x2C,0x1E,0x38,0xC8,
141 0x01,0x84,0x01,0x80,0x00,0xF8,0x0C,0x00,0xD8,0x00,0x23,0x06,0x38,0x12,0x01,0x98,
142 0x01,0x04,0x01,0x80,0x07,0xE0,0x18,0x00,0xCC,0x00,0x31,0x03,0x19,0xF6,0x01,0xF0,
143 0x00,0x04,0x01,0x98,0x7F,0x00,0x30,0x00,0x86,0x00,0x11,0x01,0x18,0x37,0x81,0x80,
144 0x00,0x04,0x01,0xC7,0xFC,0x00,0xE0,0x00,0x87,0x00,0x19,0x81,0x98,0x1D,0x9F,0x00,
145 0x00,0x04,0x01,0xC0,0x00,0x01,0x80,0x01,0x83,0x80,0x18,0xF0,0x98,0x18,0x03,0x00,
146 0x03,0x04,0x00,0xE0,0x00,0x07,0x00,0x01,0x01,0xC0,0xF8,0xD8,0x98,0xA8,0x03,0x00,
147 0x07,0x04,0x00,0xF0,0x00,0x1E,0x00,0x03,0x00,0xE0,0xC0,0x08,0x99,0xEF,0x3E,0x00,
148 0x0E,0x04,0x00,0x7C,0x00,0x7C,0x00,0x06,0x00,0x60,0xC0,0x08,0x99,0x12,0x36,0x00,
149 0x1C,0x04,0x00,0x3F,0xCF,0xF0,0x00,0x0C,0x00,0x30,0x40,0x0C,0x99,0x10,0x02,0x00,
150 0x3C,0x04,0x00,0x0F,0xFF,0xC0,0x00,0x38,0x00,0x18,0x7F,0xF8,0xFF,0x18,0x06,0x00,
151 0x3C,0x04,0x00,0x03,0xFF,0x00,0x00,0x60,0x00,0x00,0x3F,0xF0,0x66,0x1F,0xFC,0x00,
152 0x3C,0x04,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
153 0x3C,0x0C,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
154 0x3C,0x0C,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
155 0x3C,0x0C,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
156 0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
157 0x18,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
158 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
159 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
160 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
161 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
162 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
163 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
164 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
165 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
166 };
167
168
169 void Lcd_init(void) //初始化LCD
170 {
171 1 Delaynms(10); //启动等待,等LCD进入工作状态
172 1 CS=1;
173 1 Write_char(0,0x30); //8 位数据,基本指令集
174 1 Write_char(0,0x0c); //显示打开,光标关,反白关
175 1 Write_char(0,0x01); //清屏,将DDRAM的地址计数器归零
176 1 }
177
178
179 void Write_char(bit start, unsigned char ddata) //发送指令或者数据
C51 COMPILER V7.02b 12864LCD_允_ 04/06/2009 00:17:44 PAGE 4
180 {
181 1 unsigned char start_data,Hdata,Ldata;
182 1 if(start==0)
183 1 start_data=0xf8; //写指令
184 1 else
185 1 start_data=0xfa; //写数据
186 1
187 1 Hdata=ddata&0xf0; //取高四位
188 1 Ldata=(ddata<<4)&0xf0; //取低四位
189 1 Send_byte(start_data); //发送起始信号
190 1 Delaynms(5); //延时420u秒是必须的
191 1 Send_byte(Hdata); //发送高四位
192 1 Delaynms(1); //延时72u秒是必须的
193 1 Send_byte(Ldata); //发送低四位
194 1 Delaynms(1); //延时72u秒是必须的
195 1 }
196
197
198 void Send_byte(unsigned char bbyte) //串口发送一个字节(底层函数)
199 {
200 1 unsigned char i;
201 1 for(i=0;i<8;i++) //循环8位(一个字节)
202 1 {
203 2 SID=bbyte&0x80; //取出最高位
204 2 SCLK=1;
205 2 SCLK=0;
206 2 bbyte<<=1; //左移1位
207 2 }
208 1 }
209
210
211 void Delaynms(unsigned int di)
212 {
213 1 unsigned int i,db;
214 1 for(i=0;i<di;i++)
215 1 for(db=0;db<10;db++); //延迟72u秒左右以12MHz晶振
216 1 }
217
218
219
220 void Disp_img(unsigned char *img) //插入LOGO函数
221 {
222 1 unsigned char i,j;
223 1 unsigned int k = 0;
224 1
225 1 Write_char(0,0x36); //图形方式LCD指令
226 1 for(i=0;i<32;i++) //循环上半屏填充点
227 1 {
228 2 Write_char(0,0x80+i); //指定上半屏横坐标位置
229 2 Write_char(0,0x80); //指定上半屏纵坐标位置
230 2 for(j=0;j<16;j++)
231 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -