完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
#include"uart2.h"
#define LED P1_3 #define uchar unsigned char #define uint unsigned int ***it s0 = P2^1; ***it s1 = P2^2; ***it s2 = P2^3; ***it s3 = P2^4; void baipingheng();//白平衡子程序 void celiang();//实际颜色程序 uint ryz,gyz,byz;//分别定义红色因子 绿色因子 蓝色因子 uint rb,gb,bb;//RGB值 void delay_nms(unsigned int n); /***************************led测试 闪烁3次****************************/ void test_led() { uchar i; for(i=0;i<3;i++) { LED=0; delay_nms(200); LED=1; delay_nms(200); } LED=0; } /***************************计数器初始化****************************/ void t0_init() { TMOD=0x51;//设置定时器0为工作方式一 定时器1为工作方式一,计数模式 TH0=(65536-10000)%256; TL0=(65536-10000)/256;//如果晶振是11.0592MHZ的话,误差是0.00017% } void delay_nus(unsigned int i) //延时:i>=12 ,i的最小延时单12 us { i=i/10; while(--i); } void delay_nms(unsigned int n) //延时n ms { n=n+1; while(--n) delay_nus(900); //延时 1ms,同时进行补偿 } //白平衡子程序 void celiang() { //*********求R值************************************ TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=0; TL1=0; s2=0; s3=0;//选择红色滤光器 TR0=1;//10毫秒开始计时 TR1=1;//开始计数 while(TF0==0);//等待定时器溢出 TF0=0;//清楚定时器0溢出标志 TR0=0;//关闭定时0 TR1=0; rb=(unsigned long)(TH1*256+TL1)*255/ryz; if(rb>255) rb=255;//判断RGB值是否合法 //***********求B值************************************** TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=0; TL1=0; s2=0; s3=1;//选择蓝色滤光器 TR0=1;//10毫秒开始计时 TR1=1;//开始计数 while(TF0==0);//等待定时器溢出 TF0=0;//清楚定时器0溢出标志 TR0=0;//关闭定时0 TR1=0; bb=(unsigned long)(TH1*256+TL1)*255/byz; if(bb>255) bb=255;//判断RGB值是否合法 ] //***********求G值************************************** TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=0; TL1=0; s2=1; s3=1;//选择绿色滤光器 TR0=1;//10毫秒开始计时 TR1=1;//开始计数 while(TF0==0);//等待定时器溢出 TF0=0;//清楚定时器0溢出标志 TR0=0;//关闭定时0 TR1=0; gb=(unsigned long)(TH1*256+TL1)*255/gyz; if(gb>255) gb=255;//判断RGB值是否合法 } //****************************************************** //白平衡子程序 void baipingheng() { //**************求取红色因子*********************** TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=0; TL1=0; s2=0; s3=0;//选择红色滤光器 TR0=1;//10毫秒开始计时 TR1=1;//开始计数 while(TF0==0);//等待定时器溢出 TF0=0;//清楚定时器0溢出标志 TR0=0;//关闭定时0 TR1=0; ryz=(TH1*256+TL1);//其实这里的比例因子应该为255/(TH1*256+TL1) //**************求取蓝色因子*********************** TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=0; TL1=0; s2=0; s3=1;//选择蓝色滤光器 TR0=1;//10毫秒开始计时 TR1=1;//开始计数 while(TF0==0);//等待定时器溢出 TF0=0;//清楚定时器0溢出标志 TR0=0;//关闭定时0 TR1=0; byz=(TH1*256+TL1);//其实这里的比例因子应该为255/(TH1*256+TL1) //**************求绿色因子*********************** TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=0; TL1=0; s2=1; s3=1;//选择绿色滤光器 TR0=1;//10毫秒开始计时 TR1=1;//开始计数 while(TF0==0);//等待定时器溢出 TF0=0;//清楚定时器0溢出标志 TR0=0;//关闭定时0 TR1=0; gyz=(TH1*256+TL1);//其实这里的比例因子应该为255/(TH1*256+TL1) delay_nms(250); } /*****************************主控制程序****************************/ void main() { test_led(); //测试led delay_nms(80); //延时 等待串口调试工具 LED=1; //打开led s0=0; s1=1; //关断电源 t0_init(); time2_init(); while(1) { baipingheng(); celiang(); printf("ryz=%ldn",ryz); delay_nms(250); printf("byz=%ldn",byz); delay_nms(250); printf("gyz=%ldn",gyz); delay_nms(250); printf("rb=%ldn",rb); delay_nms(250); printf("bb=%ldn",bb); delay_nms(250); printf("gb=%ldn",gb); delay_nms(250); } } /*---------------------------------------------------------------- 函数名:Time2_init( ) 功 能:使用T2做串口时钟 -----------------------------------------------------------------*/ 得到的脉冲数也特别大 |
|
相关推荐
4 个讨论
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
528 浏览 0 评论
654 浏览 0 评论
858 浏览 0 评论
837 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
770 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17060 浏览 31 评论
浏览过的版块 |
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-14 18:59 , Processed in 0.643424 second(s), Total 42, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2827