?? lamp1.lst
字號(hào):
C51 COMPILER V7.50 LAMP1 04/06/2009 00:03:06 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LAMP1
OBJECT MODULE PLACED IN lamp1.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE lamp1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include<stdio.h>
3 #include<string.h>
4 #include<math.h>
5 #include<absacc.h>
6 #define uchar unsigned char
7 #define uint unsigned int
8 #define ulong unsigned long
9 #define cm1 co1.co1
10 #define cm2 co2.co2
11 #define cm3 co3.co3
12 #define cm4 co4.co4
13 #include <reg52.h>
14 #define cmdd 0
15 #define datt 1
16 sbit dat=P1^3;
17 sbit clk=P1^2;
18 sbit stb=P1^1;
19 union
20 {
21 uchar dat;
22 struct
23 {
24 uchar dms: 3; //選擇顯示屏硬件的柵和段的位數(shù)
25 uchar dnc: 3; //數(shù)據(jù)空位
26 uchar ad1: 2; //此命令的地址值固定為0X00
27 }co1;
28 }co1;
29 union
30 {
31 uchar dat;
32 struct
33 {
34 uchar fru: 2; //功能選擇:00:WRITE DATA TO DISRAM 01:WRITE DATA TO LED 02:READ DATA FROM KEY 03:READ
- DATA FROM SW
35 uchar mad: 1; //0遞增 1指定地址
36 uchar mst: 1; //0正常 1測(cè)試模式
37 uchar dnc: 2; //數(shù)據(jù)空位
38 uchar ad2: 2; //此命令的地址值固定為0X01
39 }co2;
40 }co2;
41 union
42 {
43 uchar dat;
44 struct
45 {
46 uchar add: 5; //16312內(nèi)部DISRAM地址選擇
47 uchar dnc: 1; //數(shù)據(jù)空位
48 uchar ad3: 2; //此命令的地址值固定為0X03
49 }co3;
50 }co3;
51 union
52 {
53 uchar dat;
54 struct
C51 COMPILER V7.50 LAMP1 04/06/2009 00:03:06 PAGE 2
55 {
56 uchar pwm: 3; //輸出點(diǎn)亮?xí)r間選擇(可以調(diào)節(jié)亮度)
57 uchar dis: 1; //0顯示關(guān)閉
58 uchar dnc: 2; //數(shù)據(jù)空位
59 uchar ad4: 2; //此命令的地址值固定為0X02
60 }co4;
61 }co4;
62
63 void wrd(uchar disno,bit lei) //寫一個(gè)字節(jié)的命令或者數(shù)據(jù)(由LEI控制是寫數(shù)據(jù)還是寫命令)
64 {
65 1 uchar a;
66 1 if(lei)
67 1 goto s;
68 1 stb=1;
69 1 stb=1;
70 1 stb=0;
71 1 s: for(a=0;a<8;a++)
72 1 {
73 2 clk=1;
74 2 clk=1;
75 2 clk=0;
76 2 clk=0;
77 2 if(disno&0x01)
78 2 dat=1;
79 2 else
80 2 dat=0;
81 2 disno=disno>>1;
82 2 clk=1;
83 2 clk=1;
84 2 clk=1;
85 2 clk=1;
86 2 }
87 1 }
88 void inivfd(void)
89 {
90 1 cm1.dms=0x01;//設(shè)置為5區(qū) 16段
91 1 cm1.ad1=0x00;
92 1 cm2.mad=0x01;//地址模式為指定地址
93 1 cm2.mst=0x00;//取消測(cè)試
94 1 cm2.ad2=0x01;
95 1 cm3.ad3=0x03;
96 1 cm4.pwm=0x07;//亮度為最亮
97 1 cm4.dis=0x01;//打開顯示
98 1 cm4.ad4=0x02;
99 1 }
100 /////////////////////////////************以下為主程序*************************//////////////////////
101 void wrvfd(uchar addr,uchar dat) //向VFD指定地址寫數(shù)據(jù)
102 {
103 1 inivfd();
104 1 wrd(co1.dat,cmdd);
105 1 stb=1;
106 1 cm2.fru=0x00;
107 1 wrd(co2.dat,cmdd);
108 1 stb=1;
109 1 cm3.add=addr;
110 1 wrd(co3.dat,cmdd);
111 1 wrd(dat,datt);
112 1 stb=1;
113 1 wrd(co4.dat,cmdd);
114 1 stb=1;
115 1 }
116 void wrled(uchar leddata) //控制16312的四個(gè)輸出口數(shù)據(jù)存放在LEDDATA的低四位
C51 COMPILER V7.50 LAMP1 04/06/2009 00:03:06 PAGE 3
117 {
118 1 inivfd();
119 1 cm2.fru=0x01;
120 1 wrd(co2.dat,cmdd);
121 1 wrd(leddata,datt);
122 1 stb=1;
123 1 }
124 ulong rdkey() //讀鍵盤
125 { ulong key=0;
126 1 uchar i;
127 1 inivfd();
128 1 cm2.fru=0x02;
129 1 wrd(co2.dat,cmdd);
130 1 for(i=0;i<24;i++)
131 1 {
132 2 clk=1;
133 2 clk=1;
134 2 clk=0;
135 2 clk=0;
136 2 clk=0;
137 2 clk=1;
138 2 dat=1;
139 2 if(dat==1)
140 2 key=(key<<1)+1;
141 2 else
142 2 key=(key<<1);
143 2 }
144 1 return(key);
145 1 }
146
147 main()// 測(cè)試程序
148 {
149 1 uchar i;
150 1 ulong k;
151 1 for(i=0;i<16;i++)
152 1 wrvfd(i,0xff); //點(diǎn)亮VFD熒光屏上所有的數(shù)據(jù)段
153 1 wrled(0x0f); //使16312上的輸出口置高電平
154 1 while(1)
155 1 k=rdkey(); //讀鍵盤實(shí)驗(yàn),實(shí)際應(yīng)用中應(yīng)參照數(shù)據(jù)手冊(cè)取值(如按下某一個(gè)按鍵應(yīng)讀讀幾次,其中只有一次是正確
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -