📄 main.lst
字号:
C51 COMPILER V9.01 MAIN 06/13/2011 18:30:30 PAGE 1
C51 COMPILER V9.01, 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 * TCS3200模块
3 *
4 * 用途:TCS3200颜色测试,读取RGB值,LCD1602显示R,G,B值
5 *
6 * 作者 日期 备注
7 * Huafeng Lin 2010/12/10 新增
8 * Huafeng Lin 2010/12/11 修改
9 *
10 */
11
12 //接线说明:
13 //模块S2-----单片机P1.1
14 //模块S3-----单片机P1.0
15 //模块OUT----单片机P3.5(计数器1输入)
16 //模块VCC----单片机VCC
17 //模块GND----单片机GND
18
19 #include<REG52.H>
20 #include<math.h> //Keil library
21 #include<stdio.h> //Keil library
22 #include<INTRINS.H>
23
24 #define uchar unsigned char
25 #define uint unsigned int
26 #define DataPort P2 //LCD1602 数据端口
27
28 sbit LCM_RS=P0^2; //LCD1602 控制端口
29 sbit LCM_RW=P0^1; //LCD1602 控制端口
30 sbit LCM_EN=P0^0; //LCD1602 控制端口
31
32 /**引脚定义**/
33 sbit s2=P1^1; //TCS3200 S2
34 sbit s3=P1^0; //TCS3200 S3
35 //TCS3200 S0 模块内部默认上拉
36 //TCS3200 S1 模块内部默认上拉
37 //TCS3200 OE 模块内部接地
38 sbit test_pin=P1^2; //用示波器看这个引脚,可知道定时器中断频率
39 //变量、常量定义
40 uchar ge,shi,bai ;
41 uchar rp=3,gp=3,bp=6; //定义比例因子,具体环境可以修改
42 uchar count; //颜色标志位(0:红 1:绿 2:蓝)
43
44 //显示数组
45 uchar disp_R[3]; //红
46 uchar disp_G[3]; //绿
47 uchar disp_B[3]; //蓝
48
49 //********定义函数*****************************
50 void delay(unsigned int k);
51 void InitLcd();
52 void WriteDataLCM(uchar dataW);
53 void WriteCommandLCM(uchar CMD,uchar Attribc);
54 void DisplayOneChar(uchar X,uchar Y,uchar DData);
55
C51 COMPILER V9.01 MAIN 06/13/2011 18:30:30 PAGE 2
56 //*********LCD1602初始化**********************
57 void InitLcd()
58 {
59 1 WriteCommandLCM(0x38,1);
60 1 WriteCommandLCM(0x08,1);
61 1 WriteCommandLCM(0x01,1);
62 1 WriteCommandLCM(0x06,1);
63 1 WriteCommandLCM(0x0c,1);
64 1 }
65
66 //**********检测忙信号************************
67 void WaitForEnable(void)
68 {
69 1 DataPort=0xff;
70 1 LCM_RS=0;LCM_RW=1;_nop_();
71 1 LCM_EN=1;_nop_();_nop_();
72 1 while(DataPort&0x80);
73 1 LCM_EN=0;
74 1 }
75
76 //**********写命令至LCD***********************
77 void WriteCommandLCM(uchar CMD,uchar Attribc)
78 {
79 1 if(Attribc)WaitForEnable();
80 1 LCM_RS=0;LCM_RW=0;_nop_();
81 1 DataPort=CMD;_nop_();
82 1 LCM_EN=1;_nop_();_nop_();LCM_EN=0;
83 1 }
84
85 //**********写数据至LCD************************
86 void WriteDataLCM(uchar dataW)
87 {
88 1 WaitForEnable();
89 1 LCM_RS=1;LCM_RW=0;_nop_();
90 1 DataPort=dataW;_nop_();
91 1 LCM_EN=1;_nop_();_nop_();LCM_EN=0;
92 1 }
93
94 //*********写一个字符数据到指定的目标***********
95 void DisplayOneChar(uchar X,uchar Y,uchar DData)
96 {
97 1 Y&=1;
98 1 X&=15;
99 1 if(Y)X|=0x40;
100 1 X|=0x80;
101 1 WriteCommandLCM(X,0);
102 1 WriteDataLCM(DData);
103 1 }
104
105 //**********延时函数***************
106 void delay(unsigned int k)
107 {
108 1 unsigned int i,j;
109 1 for(i=0;i<k;i++)
110 1 {
111 2 for(j=0;j<121;j++)
112 2 {;}
113 2 }
114 1 }
115
116 /*******************************************
117 * 函数名称: t0_init()
C51 COMPILER V9.01 MAIN 06/13/2011 18:30:30 PAGE 3
118 * 函数功能: 定时器0初始化
119 * 入口参数: 无
120 * 出口参数: 无
121 /********************************************/
122 void t0_init()
123 {
124 1 TMOD=0x51; //T1计数 T0定时 工作方式1
125 1
126 1 TH1=0x00; //计数初值
127 1 TL1=0x00;
128 1
129 1 TH0=0xE0;
130 1 TL0=0x00; //11。0592M 晶振10ms
131 1 EA=1; //开中断
132 1
133 1 ET0=1;
134 1 TR0=1; //启动
135 1 TR1=1;
136 1 }
137
138 //*********************************************
139 //数值转换出个十百千的ASCII码
140 //*********************************************
141 void conversion(uint temp_data)
142 {
143 1 bai=temp_data/100+0x30 ;
144 1 temp_data=temp_data%100; //取余运算
145 1 shi=temp_data/10+0x30 ;
146 1 ge=temp_data%10+0x30; //取余运算
147 1 }
148
149 /*******************************************
150 * 函数名称: main()
151 /********************************************/
152 void main()
153 {
154 1 delay(10);
155 1 InitLcd(); //lcd初始化
156 1 s2=0; //初始设定S2引脚
157 1 s3=0; //初始设定S3引脚
158 1 t0_init(); //定时计数初使
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -