📄 9.lst
字号:
C51 COMPILER V7.20 9 04/25/2008 10:19:15 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE 9
OBJECT MODULE PLACED IN 9.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 9.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*=======da5667按键显示=======*/
2 //8255cs接Y0,控制液晶的377的E接Y1, AD677的CS接Y7 A0(A0,A1)接P2.0;A1(A2,A3)接P2.1
3 #include <stdio.h>
4 #include<intrins.h>
5 #include<reg51.h>
6 #include<absacc.h>
7 //#define uchar unsigned char
8 //#define uint unsigned int
9 #define D8255 XBYTE[0x1C00] //8255状态/数据口地址
10 #define D8255C XBYTE[0x1800] //8255 PC口地址
11 #define Dlcd XBYTE[0x2FFF]//显示的地址
12 #define DDAH XBYTE[0xFDFF]// 667的高4位地址
13 #define DDAL XBYTE[0xFEFF]// 667的低8位地址
14 //#define DDA XBYTE[0xEFFF] //启动转换
15 unsigned int y;
16 sbit rs = P1^0; //1=数据; 0=指令;
17 sbit rw = P1^1; //1=读; 0=写;
18 sbit e = P1^2; //1=使能?
19 sbit clk=P1^7; //DA控制端
20 //sbit da=P2^4;
21 unsigned int tab[]={0x0EE,0x0ED,0x0EB,0x0E7,0x0DE,0x0DD,0x0DB,0x0D7,0x0BE,0x0BD,
22 0x0BB,0x0B7,0x7E,0x7D,0x7B,0x77 }; /*键码表*/
23 unsigned char tab1[]={"1234567890ABCDEF"}; /*段码表*/
24 unsigned char tab2[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x00,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
25 unsigned char lt[]={0x7f,0x0bf,0x0df,0x0ef}; /*行扫描码*/
26 //*************************延时函数*********************************
27 void delay(unsigned char DelayTime) //延时1ms*DelayTime
28 {unsigned int j=0;
29 1 for(;DelayTime>0;DelayTime--)
30 1 { for(j=0;j<125;j++)
31 2 {;}
32 2 }
33 1 }
34
35 /*---------------写指令------------------------*/
36 write_comm(unsigned char c)
37 {
38 1 delay(2);
39 1 //e1=0;
40 1 rs=0;
41 1 rw=0;
42 1 XBYTE[0x2FFF]=c;
43 1 e=1;
44 1 _nop_();
45 1 e=0;
46 1 }
47
48 /*------------------初始化-----------------*/
49 void init_lcd (void)
50 {
51 1
52 1 write_comm (0x30); //基本指令集
53 1 write_comm (0x01); //清屏,地址指针指向00H
54 1 write_comm (0x06); //光标的移动方向
55 1 write_comm (0x0c); //开显示,关游标
C51 COMPILER V7.20 9 04/25/2008 10:19:15 PAGE 2
56 1 }
57 /*------------------显示-----------------*/
58 void display(unsigned int i)
59 {
60 1 delay(2);
61 1 rs=1;
62 1 rw=0;
63 1 XBYTE[0x2FFF]=tab1[i];
64 1 e=1;
65 1 _nop_();
66 1 e=0;
67 1 return;
68 1 }
69 /*------------------DA转换-----------------*/
70 void DA(unsigned int m)
71 {
72 1
73 1
74 1 DDAL=0xff&m;
75 1 //_nop_();
76 1 DDAH=(0x0f00&m)>>8;
77 1 //_nop_();
78 1
79 1 }
80 /*------------------功能键-----------------*/
81
82 void able(unsigned int c)
83 {
84 1 if(c==0x7B)
85 1 DA(y);
86 1
87 1 }
88 /*------------------主函数-----------------*/
89 main()
90 {
91 1
92 1 unsigned int i,j,a,b;
93 1 XBYTE[0x1C00]=0x81;
94 1 init_lcd ();
95 1 j=0;
96 1
97 1 for(;;)
98 1 {
99 2 for(XBYTE[0x1800]=0x0f; XBYTE[0x1800]==0x0f;); /*行线输出低电平,并判断是否有键按下*/
100 2 i=0; /*行计数器清零*/
101 2 b=lt[i]; /*取行扫描码*/
102 2 do
103 2 {
104 3 XBYTE[0x1800]=b; /*送行扫描码到P1口*/
105 3 a=XBYTE[0x1800]; /*读入列值*/
106 3 a=a&0x0f; /*保留低4位*/
107 3 if(a==0x0f) /*如果该列没有键按下,则送出下一行扫描码*/
108 3 {
109 4 i++;
110 4 if(i==4)i=0;
111 4 b=lt[i];
112 4 }
113 3 }
114 2 while(a==0x0f); /*循环到该列有键按下为止*/
115 2 b=b&0x0f0; /*取行扫描码的高4位*/
116 2 b=b|a; /*合并成为按键的扫描码*/
117 2 i=0; /*计数器清零*/
C51 COMPILER V7.20 9 04/25/2008 10:19:15 PAGE 3
118 2 for(; b!=tab[i]; i++); /*在键值表中查找相应的键值*/
119 2 delay(200); /*延时,去抖动*/
120 2 if(j<3)
121 2 {j++;
122 3 y=(y<<4)+tab2[i];
123 3 display(i); /*显示段码*/
124 3 for(XBYTE[0x1800]=0x0f; XBYTE[0x1800]!=0x0f;); /*判断按键是否结束*/
125 3 delay(300); } /*延时*/
126 2 able(tab[i]);
127 2
128 2
129 2 }
130 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 354 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 71 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -