📄 main.lst
字号:
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //***********************************************************
2 //***********12864LCD多功能液晶时钟********************
3 //*本系统采用4个按键,人性化的菜单显示.
4 //主界面显示的参数:阳历,阴历干支年,星期,时分秒,闹钟,温度,公共节日,节气;
5 //功能参数:密码,232通信输出,红外控制,阳历,阴历,读U盘;
6 //作者:陈志伟
7 //设计日期:2007年11月~2007年12月;
8 //交流QQ:871993824
9
10 /***************************************************************/
11 #include <sfr.h>
12 #include <Calendar.h>
13 //typedef unsigned char uchar; //自定义关键字
14 //typedef unsigned int uint;
15 //LCD接口定义
16 sbit BUSY_FLAG=P2^7; //液晶模块忙标志
17 sbit RS =P0^0; //模式位,为0输入指令,为1输入数据
18 sbit RW =P0^1; //读写位,为0读,为1写
19 sbit E =P0^2; //使能位
20 sbit PSB=P0^3;
21 #define LCD_DATA P2 //液晶数据口
22 //LCD指令集定义
23 #define ClearDisplay 0x01 //清显示指令
24 #define EntryModeSet 0x06 //设置输入模式
25 #define DisplayOnCtrl 0x0c //设置开显控制
26 #define FunctionSetB 0x30 //功能设定(基本指令)
27 #define FunctionSetE 0x34 //功能设定(扩充指令)
28 #define FuncDrawOn 0x36 //设置绘图功能
29 //内存定义
30 uchar lcdPosX, lcdPosY; //X,Y坐标
31 uchar halfScr, halfLineCnt, basicBlock; //半屏,半屏行数,N*8块
32 uchar yy,mo,dd,xq,hh,mm,ss; //定义时间映射全局变量
33 uchar keys,state,cishu; //键值keys,状态state,次数time
34 bit setting;
35 //定义累加器A中的各位
36 sbit a7 = ACC ^ 7;
37 //键盘引脚定义
38 sbit key_1 =P1^0; //功能:设置兼返回
39 sbit key_2 =P1^1; //功能:调整位加1
40 sbit key_3 =P1^2; //功能:指向下一项
41 sbit key_4 =P1^3; //功能:确定当前操作
42 //定义DS1302时钟接口
43 sbit clock_clk = P3^1; //ds1302_clk(时钟线)
44 sbit clock_dat = P3^0; //ds1302_dat(数据线)
45 sbit clock_Rst = P1^4; //ds1302_Rst(复位线
46 //温度传感器定义
47 sbit DQ = P1^5; //ds18B20)
48 //灯与扬声器定义
49 sbit led_secd =P3^3; //秒闪烁灯
50 sbit BEEP =P1^6; //扬声器
51 //表格2的格式:键码+次态+执行模块
52 uchar fun_zero[4]={1,1,0,0};
53 uchar fun_one[7]={1,1,0,0};
54 /***************************************************************/
55 //功能:延时ms毫秒
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 2
56 void delayMs (uchar ms)
57 { uchar i;
58 1 while (--ms)
59 1 { for(i=0; i<125; i++);}
60 1 }
61 /***************************************************************/
62 //功能:蜂鸣器响一声
63 void beepBl (void)
64 {
65 1 uchar i;
66 1 for(i=0; i<100; i++)
67 1 { delayMs(2);BEEP = !BEEP; }
68 1 BEEP = 1;
69 1 }
70 /***************************************************************/
71 //功能:延时sec秒
72 void delaySec (uchar sec)
73 {
74 1 uchar i;
75 1 while(--sec)
76 1 { for(i=0; i<200; i++)
77 2 {delayMs(6);}
78 2 }
79 1 }
80 /***************************************************************/
81 //功能:LCD检测忙信号
82 void checkLcdBusy (void)
83 { LCD_DATA = 0xff;
84 1 RS = 0;
85 1 RW= 1;
86 1 E = 1;
87 1 while (BUSY_FLAG);
88 1 E= 0;
89 1 }
90 /***************************************************************/
91 //功能:LCD写命令
92 //输入参数:控制命令Command
93 void lcdWriteCommand (uchar Command)
94 { checkLcdBusy();
95 1 RS = 0;
96 1 RW = 0;
97 1 LCD_DATA = Command;
98 1 E = 1;
99 1 delayMs(1);
100 1 E = 0;
101 1 }
102 /***************************************************************/
103 //功能:清除液晶屏幕
104 void lcdClear (void)
105 { lcdWriteCommand(ClearDisplay); }
106 /***************************************************************/
107 //功能:液晶初始化
108 void lcdInit (void)
109 { lcdWriteCommand(FunctionSetE);
110 1 lcdWriteCommand(FunctionSetB);
111 1 lcdClear();
112 1 lcdWriteCommand(EntryModeSet);
113 1 lcdWriteCommand(DisplayOnCtrl);
114 1 }
115 /***************************************************************/
116 //功能:LCD写数据
117 //输入参数:显示的单个字节Data
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 3
118 void lcdWriteData (uchar Data)
119 { checkLcdBusy();
120 1 RS = 1;
121 1 RW= 0;
122 1 LCD_DATA = Data;
123 1 E= 1;
124 1 delayMs(1);
125 1 E= 0;
126 1 }
127 /***************************************************************/
128 //功能:向LCD写入坐标
129 void wrPosition (void)
130 { lcdWriteCommand(FunctionSetE);
131 1 lcdWriteCommand(lcdPosY);
132 1 lcdWriteCommand(lcdPosX);
133 1 lcdWriteCommand(FunctionSetB);
134 1 }
135 /***************************************************************/
136 //功能:显示自定义的图形
137 //输入参数:图形数据bmp,Cls=清除图形屏幕选项(OFF为不清屏,即显示图形,ON为清屏)
138 void displayPhoto (uchar *bmp, uchar bmpCls)
139 {
140 1 lcdPosX = 0x80;
141 1 halfScr = 2;
142 1
143 1 for (;halfScr != 0; halfScr--)
144 1 { lcdPosY = 0x80; halfLineCnt = 32;
145 2 for (;halfLineCnt != 0; halfLineCnt--)
146 2 { basicBlock = 16; wrPosition ();
147 3 for (; basicBlock != 0; basicBlock--)
148 3 { if (bmpCls == 0) { lcdWriteData (*bmp++);}
149 4 else if(bmpCls==1){ lcdWriteData (0x00);}
150 4 }
151 3 lcdPosY++;
152 3 }
153 2 lcdPosX = 0x88;
154 2 }
155 1 lcdWriteCommand(FuncDrawOn);
156 1 lcdWriteCommand(FunctionSetB);
157 1 }
158 /***************************************************************/
159 //功能:字符反白显示
160 //输入参数:反白字符的行cx,列cy,长度width
161 void convertChar (uchar CX, CY, width)
162 {
163 1 displayPhoto(0,1);
164 1 lcdPosY = 0x80;
165 1
166 1 if (CX == 0)
167 1 { CX = 0x80;halfLineCnt = 16; }
168 1 else if (CX == 1){CX = 0x80;halfLineCnt = 32;}
169 1 else if (CX == 2){CX = 0x88;halfLineCnt = 16;}
170 1 else if (CX == 3){CX = 0x88;halfLineCnt = 32;}
171 1 lcdPosX = CX + CY;
172 1
173 1 for (; halfLineCnt != 0; halfLineCnt--)
174 1 { basicBlock = width;
175 2 wrPosition();
176 2 for (;basicBlock != 0; basicBlock--)
177 2 { if (halfLineCnt > 16) {lcdWriteData(0x00); }
178 3 else {lcdWriteData (0xff);}
179 3 }
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 4
180 2 lcdPosY++;
181 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -