完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
3个回答
|
|
//程序头函数
#include //宏定义 #define uint unsigned int #define uchar unsigned char #define Data_ADC0809 P1 //AD数据接口 //管脚声明 ***it PWM=P3^7; //PWM输出 //ADC0809接口定义 ***it ST=P3^2; ***it EOC=P3^1; ***it OE=P3^0; //按键 ***it Key1=P3^3;//设置 ***it Key2=P3^4;//加 ***it Key3=P3^5;//减 //显示数组 0-9+F uchar Data_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x71,0x3f}; ***it Wei1 = P2^0; //数码管位接口 ***it Wei2 = P2^4; ***it Wei3 = P2^2; ***it Wei4 = P2^6;//函数声明 extern uchar ADC0809(); //0809转换程序 void Display(uchar X,uchar Data); //显示程序 void delay(uint t); //延时函数 //光照度数据变量 uchar temp=0; //蜂鸣器变量 uchar FF=125; //显示模式 uchar Mode=0; //设置标志 uchar p; uint a,b; uint num=0; uint flag=0; //阈值标志 void main() //主程序 { TMOD=0x01; EA=1; TH0=(65536-1000)/256; //为了定时器更精确,晶振用12.0000MHz,故所记次数应为1000计时器每隔1毫秒发起一次中断。 TL0=(65536-1000)%256; //1000的来历,为1000*12/12 ET0=1; TR0=1; while(1) { //正常模式 if(Mode==0) { //读取AD值 temp=ADC0809(); for(p=0;p<30;p++) //循环刷新显示 Display(0,temp); if(temp<200) { a=40; //PWM周期,数值可根据需求更改;此程序以毫秒为单位,如需更精确可自己修改程序 b=temp/5; //PWM占空比,数值可根据需求更改;此程序以毫秒为单位,如需更精确可自己修改程序 //将temp除以5取整,来作为PWM的占空比 } else flag=1;//temp>=200时令PWM=0 } //调整模式 else { Display(1,FF); } //功能键 if(Key1==0) { delay(100); while(Key1==0) { if(Mode==0) Display(0,temp); else Display(1,FF); } if(Mode==0) Mode=1; else Mode=0; } //增加 if(Key2==0&&Mode==1) { delay(100); while(Key2==0) { Display(1,FF); } FF++; if(FF==251) //最高增加到250 FF=250; } //减少 if(Key3==0&&Mode==1) { delay(100); while(Key3==0) { Display(1,FF); } FF--; if(FF==0xff) FF=0; } } } //ADC0809读取信息 uchar ADC0809() { uchar temp_=0x00; //初始化高阻太 OE=0; //转化初始化 ST=0; //开始转换 ST=1; //上升沿清除ADC寄存器 ST=0; //下降沿启动转换 //外部中断等待AD转换结束 while(!EOC) //等待转换结束 //读取转换的AD值 OE=1; //允许0809输出数据 temp_=Data_ADC0809; //读取0809数据 OE=0; //关闭0809输出 return temp_; //取出数据返回 } //延时 void delay(uint t) { uint i,j; for(i=0;i } //显示,X表示状态,Data表示数据 void Display(uchar X,uchar Data) //LED数码管显示 { Wei1=1; Wei2=1; Wei3=1; Wei4=1; P0=0xff; //正常模式 if(X==0) { P0=~Data_[11]; //显示第一位 } //非正常 else { P0=~Data_[10]; } Wei1=0; //选通位选 delay(10); //延时 Wei1=1; //关闭位选信号 P0=0xff; //消除余辉 Wei2=0; //选通位选 P0=~Data_[Data/100]; //显示第二位 delay(10);//延时 Wei2=1; //关闭位选信号 P0=0xff; //消除余辉 Wei3=0; //选通位选 P0=~Data_[Data/10%10]; //显示第三位 delay(10); //延时 Wei3=1;//关闭位选信号 P0=0xff;//消除余辉 Wei4=0; //选通位选 P0=~Data_[Data%10];//显示第四位 delay(10);//延时 Wei4=1;//关闭位选信号 P0=0xff;//消除余辉 } //定时器 PWM调光 void T0_time0() interrupt 1 { TH0=(65536-1000)/256; TL0=(65536-1000)%256; //PWM if(flag==0) { if(num PWM=1; else PWM=0; if(num>a) num=0; } //超过阈值,PWM不输出 else PWM=0; num++; } |
|
|
|
有人帮下忙吗。。
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
54 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
395 浏览 0 评论
439 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1265 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
529 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11749 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 19:51 , Processed in 0.551043 second(s), Total 80, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号