📄 sz.lst
字号:
C51 COMPILER V8.02 SZ 04/29/2008 22:19:33 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SZ
OBJECT MODULE PLACED IN sz.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sz.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 //20060921晚 含温度 一个闹钟 可调时间
3
4 //P1。0~P1。7接DB0~DB7 P1。7即接BF位 LCD_RS=P2^6 LCD_RW=P2^5 LCD_EN=P2^4 ;
5 //1地 2VCC 3对比 4 RS 5 RW 6 EN 7~14 DB0~DB7
6
7
8 #include<at89x51.h>
9 #include <intrins.h>
10 #include <string.h>
11 #define uchar unsigned char
12 #define uint unsigned int
13
14 sbit DQ=P1^7;
15 sbit DQ1=P1^6;
16
17 sbit T_CLK = P1^2; /*实时时钟时钟线引脚 */
18 sbit T_IO = P1^1; /*实时时钟数据线引脚 */
19 sbit T_RST = P1^0; /*实时时钟复位线引脚 */
20
21 //按键 P1-0 P1-1 P1-2
22 //#define LCD_DATA P0 //液晶数据口
23 //#define BUSY_FLAG P0_7 //液晶模块忙标志
24 //#define MPU_RS_CH P2_0 //寄存器选择输入-----------------4
25 //#define MPU_RW_CH P2_1 //读写控制--------------------------5
26 //#define MPU_ENABLE P2_2 //使能控制----------------------- 6
27 //#define MPU_RESET P2_3 //液晶复位控制----------------17
28
29 #define sure P2_0
30 #define up P2_1
31 #define down P2_2
32
33 sbit ACC0=ACC^0;
34 sbit ACC7=ACC^7;
35 uint n=0;
36 sbit LCD_RS=P2^7 ;
37 sbit LCD_RW=P2^6 ;
38 sbit LCD_EN=P2^5 ;// 0123456789
39 unsigned char data xian0[16]={"2006-09-18 WEEK1"};//显示用
40 unsigned char data xian2[16]={"22:23:45 L-22:24"};//显示用22:23:45 ∩22
41
42 uchar mid[7]={0x00,0x00,0x00,0x01,0x01,0x06,0x00 };
43 // 秒 分 时 日 月 星期 年 实际上不是16进制
44
45 int i, zhi=1;
46 int ci=0,k;
47 int mi=0;
48 int zhou;
49 /*
50 unsigned char xian2[16]={"22:23:45 22:23"};
51 unsigned char xian0[16]={"公2006年09月18日"};
52 unsigned char xian1[16]={"农2006年08月18日"};
53 unsigned char xian[16]={"T:29.3`C 星期 6"};
54 */
55 #define nianshi xian0[2]//0
C51 COMPILER V8.02 SZ 04/29/2008 22:19:33 PAGE 2
56 #define niange xian0[3]//6
57
58 #define yueshi xian0[5]//0
59 #define yuege xian0[6]//9
60
61 #define rishi xian0[8]//1
62 #define rige xian0[9]//8
63
64 #define shishi xian2[0]//2
65 #define shige xian2[1]//2
66 #define fenshi xian2[3]//2
67 #define fenge xian2[4]//3
68 #define miaoshi xian2[6]//4
69 #define miaoge xian2[7]//5
70
71 #define nshishi xian2[11]//2
72 #define nshige xian2[12]//2
73 #define nfenshi xian2[14]//2
74 #define nfenge xian2[15]//4
75
76
77 int nshi,nfen,nshishi_1,nshige_1,nfenshi_1,nfenge_1;
78
79 //#define wenshi xian[2]
80 //#define wenge xian[3]
81 //#define wenxiao xian[5]
82
83 #define week xian0[15] // 6
84
85 void xianshi();
86
87 #define delayNOP(); { _nop_(); _nop_(); _nop_(); _nop_(); } ; //延时 宏定义
88 void delay(int t) {while(t){t--;}}
89 void delayMs (unsigned char ms) {unsigned char i;while (--ms){for (i = 0; i < 250; i++);}}
90
91
92
93
94 /*************************************************************/
95 /*
96 /*以下函数为检查LCD忙状态
97 /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据
98 /*
99 /*************************************************************/
100 bit lcd_busy() //BIT类型的函数 不是0就是1
101 {
102 1 bit result ; //BIT 类型的返回值
103 1
104 1 LCD_RS = 0 ;LCD_RW = 1 ; LCD_EN = 1 ; //RS=0,R/W=1,在E高电瓶的作用下,BF和AC6~AC0被读到DB7~DB0的相应
-位
105 1 delayNOP() ; //短暂延时
106 1
107 1 result =(bit)(P0&0x80) ;// 0x80=1000 0000,取出DB7位 强制位BIT型的变量:(bit) !!%%%%%%%!!*****
-%%%%%
108 1 LCD_EN = 0 ;
109 1 return(result) ; //带回BIT类型的返回值
110 1 }
111
112 /*******************************************************************/
113 /*
114 /*写指令数据到LCD
115 /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 !! 写指令数据 !!
C51 COMPILER V8.02 SZ 04/29/2008 22:19:33 PAGE 3
116 /*
117 /*******************************************************************/
118 void lcd_wcmd(uchar cmd)
119 {
120 1 while(lcd_busy()) ; //LCD繁忙就等 直到读取到的BF位为0
121 1
122 1 LCD_RS = 0 ; //RS=0,指向指令寄存器 //RS=1,指向数据寄存器
123 1 LCD_RW = 0 ; //RW=0,写操作 //RW=1,读操作
124 1 LCD_EN = 0 ;
125 1 _nop_() ; _nop_() ; //短暂延时
126 1 P0=cmd ; //将控制指令数据放到P0口输出
127 1 delayNOP() ; //短暂延时
128 1
129 1 LCD_EN = 1 ;
130 1 delayNOP() ;
131 1 LCD_EN = 0 ;
132 1 }
133
134 /*******************************************************************/
135 /*
136 /*写显示数据到LCD
137 /*RS=H,RW=L,E=高脉冲,D0-D7=数据。
138 /*
139 /*******************************************************************/
140 void lcd_wdat(uchar dat)
141 {
142 1 while(lcd_busy()) ;
143 1 LCD_RS = 1 ;
144 1 LCD_RW = 0 ;
145 1 LCD_EN = 0 ;
146 1 P0= dat;
147 1 delayNOP() ;
148 1 LCD_EN = 1 ;
149 1 delayNOP() ;
150 1 LCD_EN = 0 ;
151 1 }
152
153 /*************************************************************/
154 /*
155 /* LCD初始化设定
156 /*
157 /*************************************************************/
158 void lcd_init() //LCD初始化设定
159 {
160 1 delay(15) ;
161 1
162 1 lcd_wcmd(0x38) ; //6功能设定:16*2行显示,5*7点阵,8位数据总线
163 1 delay(5) ;
164 1 lcd_wcmd(0x38) ; //0x38= 0011(DL=1即8位数据总线,0为4位数据总线)
165 1 //1(N=1即双行显示,0为单行显示)0(F=0为5*7显示,1为5*10显示)00
166 1 delay(5) ;
167 1 lcd_wcmd(0x38) ;
168 1 delay(5) ;
169 1
170 1
171 1 lcd_wcmd(0x0f) ; //4:显示开关控制:显示开,关光标,光标不闪烁
172 1 delay(5) ;
173 1
174 1 lcd_wcmd(0x06) ; //设置输入模式:I/D=1:完成一个字符码后AC自动加1;移动光标
175 1 delay(5) ; ////设置输入模式:S=0:显示不发生移位
176 1
177 1 lcd_wcmd(0x01) ; //清除LCD的显示内容
C51 COMPILER V8.02 SZ 04/29/2008 22:19:33 PAGE 4
178 1 delay(5) ;
179 1 }
180
181 /*************************************************************/
182 /*
183 /* 设定显示位置
184 /*
185 /*************************************************************/
186 void lcd_pos(uchar pos)
187 {
188 1 lcd_wcmd(pos | 0x80) ; //数据指针=80+地址变量
189 1 } //因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入
190 //的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)
191
192
193
194
195
196
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -