完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #define uchar unsigned char #define uint unsigned int #define float #define AD_SPEED 0X60 uchar z=0,n=0.0,h=0;//z定时器、 float v=0.0; ***it L1=P0^0; ***it L2=P0^1; ***it L3=P0^2; ***it L4=P0^3; ***it I=P0^6;//检查是否有外部输入。 ***it L5=P0^7; ***it k1=P0^5; ***it k2=P0^4; //void zd(); void ad(); void desplay(); void PWM(uchar n); void delay(uint w); void main() { while(1) { if(k2==0) { h=~h;break; } if(h==1) { L5=1; } if(I==1)//当外部有输入时 { ad(); desplay(); if(v>=102.0&v<112.2)//2.0 PWM(0x75);//PWM(0x75); //46 } if(v>=112.2&v<122.4)//2.2 PWM(0x80); //50 } if(v>=122.4&v<132.6)//2.4 PWM(0x8a); //54 } if(v>=132.6&v<142.8)//2.6 PWM(0x94); //58 } if(v>=142.8&v<153.0)//2.8 PWM(0x9e); //62 } if(v>=153.0&v<163.2)//3.0 3.2 { PWM(0xa8); //66 } if(v>=163.2&v<188.7)//3.2 PWM(0xc2); //76 } if(v>=188.7&v<204)//3.7 PWM(0xd1); //82 } if(v>=204.0&v<=212.0)//4.0 PWM(0xd5); //83.5 } if(v==213) { PWM(0x00); } } if(I==0&k1==1)//当外部无输入时 { ad(); desplay(); } } } //******************************LED*************************// void desplay() { if(I==1) { //PWM=0; //ad(); //PWM=1; if(v<163.2) //第一格灯闪 <3.2 { L1=~1;; delay(50000); } if(v>163.2&v<175.95) //第一格灯亮,第二格灯闪 3.2 3.45 { L1=1; L2=~L2; delay(50000); } if(v>175.95&v<188.7) //第一二格灯亮,第三格灯闪 3.45 3.7 { L1=1; L2=1; L3=~L3; delay(50000); } if(v>188.7&v<201.45) //第一二三灯亮,第四灯闪 3.7 3.95 { L1=1; L2=1; L3=1; L4=~L4; delay(50000); } if(v>201.45&v<214.2) //第一二三四灯亮.3.95 4.2 { L1=1; L2=1; L3=1; L4=1; } } if(I==0) { if(v<163.2) //第一格灯闪 { L1=~L1;; delay(8000); } if(v>163.2&v<176.64) //第一格灯亮 { L1=1; } if(v>176.64&v<189.44) //第一二格灯亮 { L1=1; L2=1; } if(v>189.44&v<202.24) //第一二三灯亮 { L1=1; L2=1; L3=1; } if(v>202.24&v<214.2) //第一二三四灯亮. { L1=1; L2=1; L3=1; L4=1; } } } //*******************************以上是LED显示程序*********************************// //*******************************以下是ADC程序********************************// void ad() { AUXR1=0x00; ADC_RES=0;//储存ad清零 ADC_RESL=0; //DC_CONTR|=0x00; ADC_CONTR|=0x80;//启动电源 delay(2); ADC_CONTR|=0x08;//开始转换 while((ADC_CONTR&0X10)==0); ADC_CONTR&=0xe7;//11110111 清AD_FLAG位,关闭AD v=(ADC_RES/255)*5;//返回AD高8位 } void delay(uint w) { uchar x,j; for(j=0;j } //**************************************ADC************************************// //**************************************ZD*************************************//xjw /*void zdini(void) // { TMOD = 0x02; TH0=(65536-50000)/256; //50ms;12M晶振; TL0=(65536-50000)%256; TL0 = 0x19; TR0 = 1; ET0=1; EA=1; } void zd() interrupt 1 //使用的是定时器T0 { z++; TH0=(65536-50000)/256; //50ms;12M晶振; TL0=(65536-50000)%256; }*/ void PWM(uchar n)//PWM主程序 { CCON=0;//PCA控制寄存器初始化 //PCA定时器停止运行 //清楚CF标志位 //清除全部单元中断标志位 CL=0;//PCA的16位计数器低八位//PCA时基复位 CH=0;//PCA的16位计数器母甙宋? CMOD=0X05;// 选择系统时钟为计数脉冲 此时PWM频率为系统时钟/256 //PCA时钟溢出不能使位 CCAP0H=n; //CCAP0L=n; PCA_PWM0=0X00;//控制占空比第九位为0 CCAPM0=0X42;//允许P1.3作为PWM输出 CR=1;//启动PCA计数器 } 编译没为题,但是我想实现的功能是在没有外接输入(也就是充电的时候),按下k1就启动ad和指示灯显示程序显示电量电能,按下k2的时候照明灯亮。当有外界输入的时候,led指示灯根据电量显示灯数量,按下k2的时候照明亮 可是实现不了 求大神指导指导。。。 |
|
相关推荐
5个回答
|
|
|
|
|
|
可以 只不过我不会程序
|
|
|
|
|
|
|
|
换成if-else 我也是前些天和我同学聊天的时候他说了这个问题; 还有就是你的按键检测: 最简单的可以这样啊,用延时, if(k2==0) { delay(200); if(k2==0) {....} } 还有你可以上网找一下按键检测的程序,很多,也很实用。。 |
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
788 浏览 0 评论
2301 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2154 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1694 浏览 0 评论
3021 浏览 3 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
5564 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-20 20:42 , Processed in 0.676355 second(s), Total 72, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号