川师鲤鱼
发表于 2017-4-8 06:40:03
不错不错 为你顶帖 很赞
川师鲤鱼
发表于 2017-4-8 06:41:12
不错不错 为你顶帖了
a13621146
发表于 2017-5-14 15:30:39
大神帮我看下以下程序哪里有错误.为什么输出电压只有一半?
#include<reg51.h>
#include<intrins.h> //µ÷ÓÃ_nop_();
sfr P5=0xC8; //ÉùÃ÷P5Òý½Å¼Ä´æÆ÷
sfr P2M0=0x96; //ÉùÃ÷P2Òý½Åģʽ¼Ä´æÆ÷
sfr P3M0=0xb2; //ÉùÃ÷P3Òý½Åģʽ¼Ä´æÆ÷
sfr P1ASF=0x9D; //ÉùÃ÷P1¿ÚÄ£Ä⹦ÄܼĴæÆ÷
sfr ADC_RES=0xBD; //ÉùÃ÷ADCת»»½á¹û¼Ä´æÆ÷
sfr ADC_CONTR=0xBC;//ÉùÃ÷ADC¿ØÖƼĴæÆ÷
sbit DA=P2^4; //ÊýÂë¹Üÿ¸öÒý½Å
sbit DB=P3^2;
sbit DC=P3^6;
sbit DD=P2^0;
sbit DE=P2^1;
sbit DF=P2^3;
sbit DG=P3^5;
sbit DP=P3^7;
sbit B1=P2^5; //ËĸöÊýÂë¹ÜµÄÒý½Å¶¨Òå
sbit B2=P2^2;
sbit B3=P3^3;
sbit B4=P3^4;
sbit Key=P3^0;
sbit OUT=P5^5; //¶¨ÒåÒ»¸öÊä³öÒý½Å
unsigned char Key_old;
unsigned char Key_action;
unsigned char display_time; //¶¨Òå±ê±äÁ¿ÓÃÓÚÏÔʾ´ÎÊý
unsigned char Data1; //µÚÒ»¸öÊýÂë¹ÜÒªÏÔʾµÄÊý¾Ý
unsigned char Data2; //
unsigned char Data3; //
unsigned char Data4; //
unsigned char count; //¼Æʱ
unsigned char BBBBB;
unsigned char mode;
unsigned int adc; //ADת»»¼ÆËã
unsigned int L; //¸ßµçƽʱ¼ä
void Delay10us() //@12.000MHz
{
unsigned char i;
_nop_();
_nop_();
i = 24;
while (--i);
}
void delay_n_10us(unsigned int n) //ÑÓʱn¸ö10usµÄº¯Êý
{
while(n)
{
Delay10us();
n=n-1; //ÿѻ·Ò»´În¼õ1
}
}
void display(unsigned char x) //¿ØÖÆÊýÂë¹ÜÏÔʾÄÚÈݵĺ¯Êý
{
//ÅжÏxµÄÖµÀ´¾ö¶¨ÏÔʾʲô
if(x==0){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=0;DP=0;} //ÏÔʾ¡°0¡±
if(x==1){DA=0;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=0;} // 1
if(x==2){DA=1;DB=1;DC=0;DD=1;DE=1;DF=0;DG=1;DP=0;} // 2
if(x==3){DA=1;DB=1;DC=1;DD=1;DE=0;DF=0;DG=1;DP=0;} // 3
if(x==4){DA=0;DB=1;DC=1;DD=0;DE=0;DF=1;DG=1;DP=0;} // 4
if(x==5){DA=1;DB=0;DC=1;DD=1;DE=0;DF=1;DG=1;DP=0;} // 5
if(x==6){DA=1;DB=0;DC=1;DD=1;DE=1;DF=1;DG=1;DP=0;} // 6
if(x==7){DA=1;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=0;} // 7
if(x==8){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=1;DP=0;} // 8
if(x==9){DA=1;DB=1;DC=1;DD=1;DE=0;DF=1;DG=1;DP=0;} // 9
if(x==10){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=0;DP=1;} //ÏÔʾ¡°0¡±´øСÊýµã
if(x==11){DA=0;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=1;} //
if(x==12){DA=1;DB=1;DC=0;DD=1;DE=1;DF=0;DG=1;DP=1;} //
if(x==13){DA=1;DB=1;DC=1;DD=1;DE=0;DF=0;DG=1;DP=1;} //
if(x==14){DA=0;DB=1;DC=1;DD=0;DE=0;DF=1;DG=1;DP=1;} //
if(x==15){DA=1;DB=0;DC=1;DD=1;DE=0;DF=1;DG=1;DP=1;} //
if(x==16){DA=1;DB=0;DC=1;DD=1;DE=1;DF=1;DG=1;DP=1;} //
if(x==17){DA=1;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=1;} //
if(x==18){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=1;DP=1;} //
if(x==19){DA=1;DB=1;DC=1;DD=1;DE=0;DF=1;DG=1;DP=1;} //ÏÔʾ¡°9¡±´øСÊýµã
if(x==20){DA=1;DB=1;DC=0;DD=0;DE=1;DF=1;DG=1;DP=0;}
if(x==21){DA=1;DB=0;DC=0;DD=1;DE=1;DF=1;DG=1;DP=0;}
}
void main()
{
P2M0=0x1B; // ÐèÒª¸ßµçƽ´óµçÁ÷µÄÒý½Å 2.42.32.12.0 ÌîÈëÊýÖµ0001 1011
P3M0=0xE4; // ¸ßµçƽ´óµçÁ÷µÄÒý½Å3.73.63.53.2 1110 0100
P1ASF=0x80; //ÉèÖÃP1.7 Òý½ÅΪģÄ⹦ÄÜ
Key_old=1;
while(1)
{
delay_n_10us(100);
////////////////////////////////
BBBBB=BBBBB+1;
if(BBBBB>9)
{
BBBBB=0;
if(Key==1)
{
if(Key_old==0)
{
Key_action=1;
}
}
Key_old=Key;
}
/////////////////////////////////////
if(Key_action==1)
{
Key_action=0;
mode++;
if(mode>1)
{
mode=0;
}
}
///////////////////////////////////
if(mode==1)
{
count=count+1;
if(count>19) //ÿ20ms²åÈëÒ»´Î¸ßµçƽ
{
count=0;
B1=1;B2=1;B3=1;B4=1;//ÔÝʱ¹Ø±ÕÊýÂë¹Ü±ÜÃâÉÁ˸
ADC_CONTR=0x88+7; //¿ªÊ¼P1.7Òý½Åת»»
delay_n_10us(5); //µÈ´ý50usADת»»Íê³É
adc=ADC_RES; //¶Áȡת»»½á¹û
L=adc; //ת¶¯ÐýÅ¥ADC µÄÖµ0¡«255±ä»¯
//LµÄ±ä»¯·¶Î§ÊÇ100¡«200ËùÒÔ½øÐÐÒ»ÏÂÏÞÖÆ
if(L>200)L=200; //¸ßµçƽʱ¼ä²»³¬¹ý2ms
if(L<100)L=100; //¸ßµçƽʱ¼ä²»µÍÓÚ1ms
OUT=1;
delay_n_10us(L); //Êä³ö1¡«2ms¸ßµçƽ
OUT=0; //ÆäËûʱ¼äÊǵ͵çƽ
//ÏÔʾLµÄ´óС
Data1=20;
Data2=(L-100)/100; //°Ùλ
//Data2=Data2+10¼Ó10displayº¯ÊýÏÔʾµÄÊý×Ö»á´øСÊýµã
Data3=(L-100)%100/10; // ʮλ
Data4=(L-100)%10; // ¸öλ
}
}
////////////////////////////////////////////////
if(mode==0)
{
B1=1;B2=1;B3=1;B4=1;
ADC_CONTR=0x88+7;
delay_n_10us(5);
adc=ADC_RES;
L=adc;
if(L>100)L=100;
OUT=1;
delay_n_10us(L);
OUT=0;
Data1=21;
Data2=(L)/100;
Data3=(L)%100/10;
Data4=(L)%10;
}
///////////////////////////////////////////////////////
//ÏÔʾ³ÌÐòÄ£¿é»¯ Ö»Ðè¸Ä±äData1/2/3/4µÄÊýÖµ¾Í¿ÉÒÔ¿ØÖÆÏÔʾÄÚÈÝ
display_time=display_time+1;
if(display_time>3)
{
display_time=0; //0123ËĸöÑ»·
}
if(display_time==0) //µÚ0´ÎÏÔʾµÚÒ»¸öÊýÂë¹Ü
{
B1=0;B2=1;B3=1;B4=1;
display(Data1); //ÏÔʾµÚһλÊý¾Ý
}
if(display_time==1)
{
B1=1;B2=0;B3=1;B4=1;
display(Data2);
}
if(display_time==2)
{
B1=1;B2=1;B3=0;B4=1;
display(Data3);
}
if(display_time==3)
{
B1=1;B2=1;B3=1;B4=0;
display(Data4);
}
}
}
我爱萝丽爱萝丽
发表于 2017-5-16 21:32:02
a13621146 发表于 2017-5-14 15:30
大神帮我看下以下程序哪里有错误.为什么输出电压只有一半?
#include
#include //µ÷ÓÃ_nop_();
是不是用了两个电阻分压,程序里面再乘以2就行了
a13621146
发表于 2017-5-17 21:20:33
我爱萝丽爱萝丽 发表于 2017-5-16 21:32 static/image/common/back.gif
是不是用了两个电阻分压,程序里面再乘以2就行了
是单片机的引脚输出电压!不是电压表
我爱萝丽爱萝丽
发表于 2017-5-18 12:44:00
a13621146 发表于 2017-5-17 21:20
是单片机的引脚输出电压!不是电压表
单片机只能输出高电平5V或低电平0V,不知道你说的是什么。5V接了LED会变低。
skerryzz
发表于 2017-5-25 16:19:04
顶顶顶
davidxu
发表于 2017-6-14 13:48:15
好教程,谢谢了
时间匆匆
发表于 2017-8-29 08:15:22
666666666666666666666666666666666666666666
曾诚
发表于 2017-9-5 16:02:51
入坑了,没办法,拼命赞吧!
lihui12321
发表于 2017-9-7 02:49:28
好贴,感谢分享
木木子观
发表于 2018-2-5 17:56:52
赞赞赞一个先。{:1_14:}
陈小手
发表于 2018-2-5 21:42:29
USB有通信功能吗{:1_12:}
magic8en
发表于 2018-5-3 14:25:29
感谢楼主分享
coolbgo
发表于 2018-7-1 14:09:21
请教大神,为什么呼吸灯模式光线暗下去的时候频闪很明显 尝试过1000hz还是这样 是程序哪里写的不对?还是pwm就这样?
coolbgo
发表于 2018-7-1 14:10:01
#include<reg51.h>
sbit led_r=P3^2;//É趨LED¡¢°´¼ü½Åλ
sbit led_g=P3^3;
sbit led_b=P3^4;
sbit key1=P3^1;
sbit key2=P3^0;
unsigned char mode,key1_old,key1_action,key2_old,key2_action,light=100,light_back,count,second,duty_r,duty_g,duty_b;
//É趨±äÁ¿ ģʽ£¬¼ü1¼Ç¼£¬¼ü1¾ÍÐ÷£¬¼ü2¼Ç¼£¬¼ü2¾ÍÐ÷£¬ÁÁ¶È³õʼֵ100£¬ÁÁ¶Èϵ÷±êÖ¾£¬10ºÁÃë¼ÆÊýÖÜÆÚ£¬ÃëÊý£¬ºìÉ«ÁÁ¶È¿ÕÕ¼±È100¼¶£¬ÂÌÉ«¿ÕÕ¼±È£¬À¶É«¿ÕÕ¼±È
unsigned int count2,count3=3333,count4=6666;//É趨±äÁ¿ 1Ãë¼ÆÊýÖÜÆÚ
void Delay100us() //@12.000MHz ¶¨Òå0.1ºÁÃëÑÓʱ
{
unsigned char i, j;
i = 2;
j = 39;
do
{
while (--j);
} while (--i);
}
void delay(unsigned int n)//100n us
{
while(n--)
{
Delay100us();
}
}
main()
{
while(1)
{
Delay100us();//0.1ºÁÃë1¸öÑ»·
count++;//¼ÆÊýÆ÷£¬Ò»¸öÖÜÆÚ10ºÁÃë 100¸öÑ»· 1Ãë100ÖÜÆÚ 100hz
if(count>99)
{
count=0;
}
count2++;//¼ÆÊýÆ÷2£¬Ò»¸öÖÜÆÚ1Ãë
if(count2>9999)
{
count2=0;
second++;
if(second>3)//ÃëÊý¼Ç¼£¬Ò»¸öÖÜÆÚ4Ãë
{
second=0;
}
}
count3++;//¼ÆÊýÆ÷3£¬Ò»¸öÖÜÆÚ1Ãë
if(count3>9999)
{
count3=0;
}
count4++;//¼ÆÊýÆ÷4£¬Ò»¸öÖÜÆÚ1Ãë
if(count4>9999)
{
count4=0;
}
if(count==0)//°´¼ü¼ì²â£¬10ºÁÃë1´Î
{
if(key1==0&&key1_old==1)
{
key1_action=1;
}
if(key2==0&&key2_old==1)
{
key2_action=1;
}
key1_old=key1;//±£´æ°´¼ü
key2_old=key2;
if(key1_action==1)//°´¼ü1¸Ä±äģʽ
{
key1_action=0;
mode++;
if(mode>9)
{
mode=0;
}
}
if(key2_action==1)//°´¼ü2¸Ä±äÁÁ¶È10¼¶£¬¹²100¼¶ÁÁ¶È
{
key2_action=0;
if(light_back==0)
{
light+=10;
if(light>99)
{
light_back=1;
}
}
if(light_back==1)
{
light-=10;
if(light==0)
{
light_back=0;
}
}
}
}
if(mode==0)//ģʽ0¹ØµÆ
{
duty_r=0;
duty_g=0;
duty_b=0;
}
if(mode==1)//ģʽ1 È«ÁÁ
{
duty_r=light;
duty_g=light;
duty_b=light;
}
if(mode==2)//ģʽ2 ±¬ÉÁ
{
if(count2<1000)
{
duty_r=light;
duty_g=light;
duty_b=light;
}
else
{
duty_r=0;
duty_g=0;
duty_b=0;
}
}
if(mode==3)//ģʽ3 Ë«±¬ÉÁ 1ÃëÖÜÆÚ
{
if(count2<1000)
{
duty_r=light;
duty_g=light;
duty_b=light;
}
else if(count2>=1000&&count2<2000)
{
duty_r=0;
duty_g=0;
duty_b=0;
}
else if(count2>=2000&&count2<3000)
{
duty_r=light;
duty_g=light;
duty_b=light;
}
else
{
duty_r=0;
duty_g=0;
duty_b=0;
}
}
if(mode==4)//ģʽ4 ÁÁ°ëÃëÃð°ëÃë
{
if(count2<5000)
{
duty_r=light;
duty_g=light;
duty_b=light;
}
else
{
duty_r=0;
duty_g=0;
duty_b=0;
}
}
if(mode==5)//ģʽ5 4ÃëÂýË«ÉÁ
{
if(count2<5000&&second==0)
{
duty_r=light;
duty_g=light;
duty_b=light;
}
else if(count2>5000&&second==0)
{
duty_r=0;
duty_g=0;
duty_b=0;
}
else if(count2<5000&&second==1)
{
duty_r=light;
duty_g=light;
duty_b=light;
}
else
{
duty_r=0;
duty_g=0;
duty_b=0;
}
}
if(mode==6)//ģʽ6 4Ãë7É«ÅÜÂíµÆ
{
if(count2<5000&&second==0)
{
duty_r=light;
duty_g=0;
duty_b=0;
}
if(count2>5000&&second==0)
{
duty_r=light;
duty_g=light;
duty_b=0;
}
if(count2<5000&&second==1)
{
duty_r=0;
duty_g=light;
duty_b=0;
}
if(count2>5000&&second==1)
{
duty_r=0;
duty_g=light;
duty_b=light;
}
if(count2<5000&&second==2)
{
duty_r=0;
duty_g=0;
duty_b=light;
}
if(count2>5000&&second==2)
{
duty_r=light;
duty_g=0;
duty_b=light;
}
if(count2<5000&&second==3)
{
duty_r=light;
duty_g=light;
duty_b=light;
}
if(count2>5000&&second==3)
{
duty_r=0;
duty_g=0;
duty_b=0;
}
}
if(mode==7)//ģʽ7 1ÃëºôÎüµÆ
{
if(count2<5000)
{
duty_r=count2/50;//0-100
duty_g=count2/50;
duty_b=count2/50;
}
else
{
duty_r=(10000-count2)/50;
duty_g=(10000-count2)/50;
duty_b=(10000-count2)/50;
}
}
if(mode==8)//ģʽ8 4ÃëÂýºôÎü
{
if((count2+10000*second)<25000)
{
duty_r=(count2+10000*second)/250;
duty_g=(count2+10000*second)/250;
duty_b=(count2+10000*second)/250;
}
else
{
duty_r=(40000-(count2+10000*second))/150;
duty_g=(40000-(count2+10000*second))/150;
duty_b=(40000-(count2+10000*second))/150;
}
}
if(mode==9)//ģʽ9 7²ÊºôÎü
{
if((count2+10000*second)<25000)
{
duty_r=(count2+10000*second)/250;
}
else
{
duty_r=(40000-(count2+10000*second))/150;
}
if((count3+10000*second)<25000)
{
duty_r=(count3+10000*second)/250;
}
else
{
duty_r=(40000-(count3+10000*second))/150;
}
if((count4+10000*second)<25000)
{
duty_r=(count4+10000*second)/250;
}
else
{
duty_r=(40000-(count4+10000*second))/150;
}
if(key2==0)
{
delay(10000);
}
}
if(duty_r>count)//ºìÉ« pwm
{
led_r=1;
}
else
{
led_r=0;
}
if(duty_g>count)//ÂÌÉ« pwm
{
led_g=1;
}
else
{
led_g=0;
}
if(duty_b>count)//À¶É« pwm
{
led_b=1;
}
else
{
led_b=0;
}
}
}
sc19
发表于 2018-7-27 00:44:00
跟随大神的脚步……
我爱萝丽爱萝丽
发表于 2018-7-27 00:46:53
coolbgo 发表于 2018-7-1 14:09
请教大神,为什么呼吸灯模式光线暗下去的时候频闪很明显 尝试过1000hz还是这样 是程序哪里写的不对?还是pw ...
程序不对,人眼能觉察说明实际并没有1000hz
C5126059
发表于 2018-12-28 16:05:18
爆闪怎么延时才不会失灵呢,请教
yzx12354
发表于 2019-1-10 08:49:16
感谢楼主,支持教程