锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

一个单片机比例因子控制的例子

时间:2024-05-26 12:37:11

 好久没写日志了,冒个泡,上个最近项目写的程序表示下自己的存在//模块S2-----单片机P1.1//模块S3-----单片机P1.0//模块OUT----单片机P3.5(计数器1输入)//模块VCC----单片机VCC//模块GND----单片机GND//K4按一次进入比例因子调节模式,再按退出;探测时按K8重置//K1+,K5-控制R比例因子 K2+,K6-控制B比例因子 K3+,K7-控制G比例因子#include	#include       //Keil library  #include      //Keil library	#include#define uchar unsigned char#define uint  unsigned int	#define DataPort P0	  //LCD1602 数据端口sbit    LCM_RS=P2^6;   //LCD1602 控制端口	sbit    LCM_RW=P2^5;   //LCD1602 控制端口	sbit    LCM_EN=P2^7;   //LCD1602 控制端口/**引脚定义**/  sbit s2=P1^1;        //TCS3200 S2 sbit s3=P1^0;        //TCS3200 S3                     //TCS3200 S0 模块内部默认上拉                     //TCS3200 S1 模块内部默认上拉                     //TCS3200 OE 模块内部接地sbit test_pin=P2^2;  //用示波器看这个引脚,可知道定时器中断频率sbit K8=P1^7;sbit K1=P2^1;sbit K2=P2^0;sbit K3=P1^2;	sbit K4=P1^3;sbit K5=P1^4;sbit K6=P1^5;sbit K7=P1^6;//变量、常量定义uchar ge,shi,bai ;uchar rp=3,gp=3,bp=6; //定义比例因子,具体环境可以修改uchar count;          //颜色标志位(0:红 1:绿 2:蓝)uint    ryz,gyz,byz;//分别定义红色因子 绿色因子 蓝色因子//显示数组uchar disp_R[3];  //红uchar disp_G[3];  //绿uchar disp_B[3];  //蓝uchar disp_rp[3];uchar disp_bp[3];uchar disp_gp[3];//********定义函数*****************************void    delay(unsigned int k);void    InitLcd();void    WriteDataLCM(uchar dataW);void    WriteCommandLCM(uchar CMD,uchar Attribc);void    DisplayOneChar(uchar X,uchar Y,uchar DData);void    baipingheng();//白平衡子程序void    DisplayRGB();//显示比例因子//*********LCD1602初始化**********************void InitLcd()	{	WriteCommandLCM(0x38,1);	WriteCommandLCM(0x08,1);	WriteCommandLCM(0x01,1);WriteCommandLCM(0x06,1);	WriteCommandLCM(0x0c,1);}//**********检测忙信号************************void WaitForEnable(void)	{	DataPort=0xff;	LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();while(DataPort&0x80);	LCM_EN=0;	}//**********写命令至LCD***********************void WriteCommandLCM(uchar CMD,uchar Attribc){	if(Attribc)WaitForEnable();	LCM_RS=0;LCM_RW=0;_nop_();DataPort=CMD;_nop_();	LCM_EN=1;_nop_();_nop_();LCM_EN=0;}	//**********写数据至LCD************************void WriteDataLCM(uchar dataW){	WaitForEnable();	LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_();	LCM_EN=1;_nop_();_nop_();LCM_EN=0;}//*********写一个字符数据到指定的目标***********void DisplayOneChar(uchar X,uchar Y,uchar DData){	Y&=1;	X&=15;	if(Y)X|=0x40;	X|=0x80;	WriteCommandLCM(X,0);	WriteDataLCM(DData);	}//**********延时函数***************void delay(unsigned int k)	{	unsigned int i,j;	for(i=0;i晶振10msEA=1;            //开中断ET0=1;        TR0=1;           //启动TR1=1;}//*********************************************//数值转换出个十百千的ASCII码//*********************************************void conversion(uint temp_data)  {      bai=temp_data/100+0x30 ;    temp_data=temp_data%100;   //取余运算    shi=temp_data/10+0x30 ;    ge=temp_data%10+0x30;      //取余运算}/******************************************** 函数名称: main()/********************************************/void main(){	InitLcd();      //lcd初始化    TMOD=0x51;    baipingheng();DisplayRGB();t0_init();      //定时计数初使?	s2=0;           //初始设定S2引脚s3=0;           //初始设定S3引脚    while(1){DisplayOneChar(0, 0, 'T');DisplayOneChar(1, 0, 'C');DisplayOneChar(2, 0, 'S');DisplayOneChar(3, 0, '3');DisplayOneChar(4, 0, '2');DisplayOneChar(5, 0, '0');DisplayOneChar(6, 0, '0');DisplayOneChar(10, 0, 'R'); DisplayOneChar(11, 0, '['); DisplayOneChar(12, 0, disp_R[0]); DisplayOneChar(13, 0, disp_R[1]); DisplayOneChar(14, 0, disp_R[2]);DisplayOneChar(15, 0, ']');	DisplayOneChar(0, 1, 'G'); DisplayOneChar(1, 1, '['); DisplayOneChar(2, 1, disp_G[0]); DisplayOneChar(3, 1, disp_G[1]); DisplayOneChar(4, 1, disp_G[2]);DisplayOneChar(5, 1, ']');DisplayOneChar(10, 1, 'B'); DisplayOneChar(11, 1, '['); DisplayOneChar(12, 1, disp_B[0]); DisplayOneChar(13, 1, disp_B[1]); DisplayOneChar(14, 1, disp_B[2]);DisplayOneChar(15, 1, ']');	delay(1000) ;if(K8==0) break;if(K4==0){while(1){ InitLcd();          DisplayRGB(); if(K1==0)  {delay(10);  rp++;}   if(K5==0)  {delay(10);  rp--;}  if(K2==0)  {delay(10);  bp++;}  if(K6==0)  {delay(10);  bp--;}  if(K3==0)  {delay(10);  gp++;}   if(K7==0)  {delay(10);  gp--;} if(K4==0) break;}   }    }}/******************************************** 函数名称: c10ms_out() * 函数功能: 定时中断0服务程序            修改颜色标志disp_tc(0:红 1:绿 2:蓝)            设置S0 S1 S2 选择滤波器            计算脉冲,读取色值* 入口参数: 无* 出口参数: 无/********************************************/void c10ms_out() interrupt 1{uint temp;test_pin=!test_pin; //测试定时器中断频率引脚,可以用示波器观察TR0=0;              //关闭定时TR1=0;              //关闭计数//   count+1实现先检测绿色,再检测蓝色,然后检测红色,循环检测       if(count==0){count++;    s2=1;s3=1;             //选择滤波器为绿色     temp=(8< 
 
-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章