• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

技能交换-学习单片机

        目前在弄一些射频遥控调光的一些LED的方案,由于模电实现起来有点麻烦,所以想使用MCU来实现,可是因为之前的时候只会51单片机一些简单的代码,现在要是使用MCU来实现模拟调光,组要6SOT-6或SOP-8封装就可以,

        不过这一类MCU我都不会,也看不太懂那些简单的代码;

        所以求单片机牛人,一起合作开发LED调光灯方案,

       

        不是所有的人都是全才,我见过很多单片机很厉害的模电很差,所以我想优势互补,一起进步,电路和程序设计完之后,我这边负责打样做样品,这个只是业余爱好;不涉及其他;

       

         因为之前学过51所以,我可以很明确提出我需要MCU做哪些动作;到时候可以一起研讨,可行性;

        

全部回复(18)
正序查看
倒序查看
2014-04-04 14:11

有同感,数电很厉害的人很多模电不行的,模电在行的又不熟悉数电,大家互帮互助,一起学习。我也帮你推荐下这个帖子,希望能找到志同道合的朋友一起交流。

0
回复
2014-04-04 16:22
@电源网-娜娜姐
有同感,数电很厉害的人很多模电不行的,模电在行的又不熟悉数电,大家互帮互助,一起学习。我也帮你推荐下这个帖子,希望能找到志同道合的朋友一起交流。
多谢啦。
0
回复
www_wei
LV.1
4
2014-04-11 21:59

把你的项目拿到桌面上摊开来讲嘛,都不知道你具体要实现什么.

0
回复
2014-04-12 08:08
@www_wei
把你的项目拿到桌面上摊开来讲嘛,都不知道你具体要实现什么.

使用到的东西,

1.压控横流电源(输出电流受电压控制)

2.315M无线发射接收模块(发射机收脉冲触发信号)

3.能输出脉冲宽度可调的脉冲信号(频率1-10KHZ,占空比0-100%,或直接输出电压信号;

1.2我都可以很容是现实;需要配合第三点;具体如下:

 

315M发射模块一般是四个按键,设定一个按键位开关按键,一个是亮度加,一个亮度减,一个亮度快速切换(25%,50%,75%);

        最少需要5个IO口;四个状态输入口,一个状态输出,

        逐级增加的是100个亮度级别,如果IO口直接输出电压信号,那就要分成100个等分,比如高电压1V,那么最低电压就是0.01V;每次增加0.01V;如果输出是脉冲信号(觉得这种方式单片机要求不高)占空比为0-100%,每次1%),

0
回复
2014-04-12 10:02
写个项目书,我帮你写!用STC的芯片吧   其他的芯片我没有编程器!
0
回复
2014-04-12 10:04
@yueyunno1
写个项目书,我帮你写!用STC的芯片吧  其他的芯片我没有编程器!

http://www.dianyuan.com/bbs/1484517.html

对了 我的帖子里 有一个完整的红外线LED控制器项目,你可以去看看,程序电路  PCB都有,记得顶贴就好了!不清楚的问我

0
回复
2014-04-12 10:06
@yueyunno1
http://www.dianyuan.com/bbs/1484517.html对了我的帖子里有一个完整的红外线LED控制器项目,你可以去看看,程序电路 PCB都有,记得顶贴就好了!不清楚的问我
射频原理差不多,只是把红外线改成射频,简单点就用315M的收发模块自己编解码,复杂点就用NRF24L01  或者NRF905之类的模块!
0
回复
2014-04-12 10:07
@yueyunno1
射频原理差不多,只是把红外线改成射频,简单点就用315M的收发模块自己编解码,复杂点就用NRF24L01 或者NRF905之类的模块!

对了,前提是你必须要搞懂PWM的渊源问题,得精通!不然就麻烦了,还有就是三基色混色原理!

0
回复
wangbo0227
LV.8
10
2014-04-12 10:59
@yueyunno1
对了,前提是你必须要搞懂PWM的渊源问题,得精通!不然就麻烦了,还有就是三基色混色原理!

目前还是单色白光,亮度调光而已,三基色的有点复杂,并且使用按键的控制效果不好,因为颜色色温,颜色亮度,鲜艳度,都需要很多控制按键,做好事触摸屏控制颜色,有点过于复杂;

     硬件方面请放心,我已经做好了315M搭配模拟元件调光的电路,三段的;PWM调光也是很简单,只是软件确实不好学啊。

      我先看下你的帖子。

0
回复
wangbo0227
LV.8
11
2014-04-12 11:24
@wangbo0227
目前还是单色白光,亮度调光而已,三基色的有点复杂,并且使用按键的控制效果不好,因为颜色色温,颜色亮度,鲜艳度,都需要很多控制按键,做好事触摸屏控制颜色,有点过于复杂;   硬件方面请放心,我已经做好了315M搭配模拟元件调光的电路,三段的;PWM调光也是很简单,只是软件确实不好学啊。   我先看下你的帖子。
51单片机我也可以使用C语言写,并且上次使用模拟软件已经测试OK了,四个按键控制PWM输出想要使用那种SOP-8有六个IO的单片机,比如16F68X系列的
0
回复
2014-04-16 20:37
@wangbo0227
51单片机我也可以使用C语言写,并且上次使用模拟软件已经测试OK了,四个按键控制PWM输出想要使用那种SOP-8有六个IO的单片机,比如16F68X系列的
不错就这样一步一步来!
0
回复
www_wei
LV.1
13
2014-04-18 23:51
/*stc15f101w,运行频率12MHz,输出频率1KHZ,占空比0~100可调,周末闲来无事,顺手写的,希望能帮到你*/

AUXR DATA 8EH
ORG 0000H
LJMP  MAIN
ORG 000BH
LJMP  TM0_0

MAIN:	
	MOV R0,#0H
	MOV R1,#0H			;占空比初值
	MOV R2,#100
	MOV TMOD,#00000010B		          ;定时器0工作方式2
	MOV 8FH,#00000000B
	MOV TH0,#0F6H
	MOV TL0,#0F6H
	MOV AUXR,#00H
	SETB ET0
	SETB EA
	SETB TR0


M_0:	SETB P3.2
	NOP
	NOP
	JNB P3.2,M_8                    ;占空比+
	SETB P3.3
	NOP
	NOP			
	JNB P3.3,M_2			;占空比-
	SJMP M_0

M_2:	CJNE R1,#0,M_3
	SJMP M_0
M_3:	DEC R1
	SJMP M_END

M_8:	CJNE R1,#101,M_9
	SJMP M_0
M_9:	INC R1

M_END:	LCALL DELAY
	
	SJMP M_0



TM0_0:	CJNE R0,#0H,TM0_1		;定时器0中断执行程序
	CLR P3.5
	SJMP TM0_2
TM0_1:	SETB P3.5
	DJNZ R0,TM0_2
	CLR P3.5
TM0_2:	DJNZ R2,TM0_END
	MOV R2,#100
	MOV A,R1
	MOV R0,A

TM0_END:RETI


DELAY:					;延时255毫秒
	CJNE R2,#1,$
	INC R4
	CJNE R4,#255,DELAY
	MOV R4,#0
	RET


	END

 

0
回复
2014-04-19 08:43
@www_wei
/*stc15f101w,运行频率12MHz,输出频率1KHZ,占空比0~100可调,周末闲来无事,顺手写的,希望能帮到你*/AUXRDATA8EHORG0000HLJMPMAINORG000BHLJMPTM0_0MAIN:MOVR0,#0HMOVR1,#0H;占空比初值MOVR2,#100MOVTMOD,#00000010B;定时器0工作方式2MOV8FH,#00000000BMOVTH0,#0F6HMOVTL0,#0F6HMOVAUXR,#00HSETBET0SETBEASETBTR0M_0:SETBP3.2NOPNOPJNBP3.2,M_8;占空比+SETBP3.3NOPNOPJNBP3.3,M_2;占空比-SJMPM_0M_2:CJNER1,#0,M_3SJMPM_0M_3:DECR1SJMPM_ENDM_8:CJNER1,#101,M_9SJMPM_0M_9:INCR1M_END:LCALLDELAYSJMPM_0TM0_0:CJNER0,#0H,TM0_1;定时器0中断执行程序CLRP3.5SJMPTM0_2TM0_1:SETBP3.5DJNZR0,TM0_2CLRP3.5TM0_2:DJNZR2,TM0_ENDMOVR2,#100MOVA,R1MOVR0,ATM0_END:RETIDELAY:;延时255毫秒CJNER2,#1,$INCR4CJNER4,#255,DELAYMOVR4,#0RETEND 

 

 

给你一段主代码,自己去修改!

/***********************************************************************/
/***名称:PWM控制LED灯亮度       ***************************************/
/***功能:此程序为主模块,改变LOOP_NUM1的值就改变了占空比,初值50%      */
/***********************************************************************/

/*---------------------------------------------------------------------*/
/*--   端口定义                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
PORT_2	EQU P2
PORT_1	EQU P1

LOOP_NUM1	EQU 30H	   
LOOP_NUM2	EQU 31H
LOOP_NUM3	EQU 32H		
/*---------------------------------------------------------------------*/
/*--   程序开始                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
	ORG 0000H
	SJMP MAIN
	ORG 0030H
/*---------------------------------------------------------------------*/
/*--   主程序                   ---------------------------------------*/
/*---------------------------------------------------------------------*/
MAIN:	MOV PORT_2,#00H	 //端口初始化
          MOV PORT_1,#00H

START:	MOV LOOP_NUM3,#255
	MOV LOOP_NUM2,#255
	MOV LOOP_NUM1,#127 //改变LOOP_NUM1的值就改变了占空比,初值50%
LOOP:	MOV A,LOOP_NUM1
	CJNE A,LOOP_NUM2,LOOP2
LOOP2:    JC LOOP3
	MOV PORT_2,#0FFH
	SJMP EXIT
LOOP3:	MOV PORT_2,#00H	
EXIT:	DJNZ LOOP_NUM2,LOOP
	MOV LOOP_NUM2,#255
	MOV A,LOOP_NUM1
	CJNE A,#255,LOOP
	SJMP START
/*---------------------------------------------------------------------*/
/*--   程序结束                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
	END

	

 

0
回复
2014-04-19 08:47
@yueyunno1
  给你一段主代码,自己去修改!/***********************************************************************//***名称:PWM控制LED灯亮度***************************************//***功能:此程序为主模块,改变LOOP_NUM1的值就改变了占空比,初值50%*//***********************************************************************//*---------------------------------------------------------------------*//*--端口定义---------------------------------------*//*---------------------------------------------------------------------*/PORT_2EQUP2PORT_1EQUP1LOOP_NUM1EQU30HLOOP_NUM2EQU31HLOOP_NUM3EQU32H/*---------------------------------------------------------------------*//*--程序开始---------------------------------------*//*---------------------------------------------------------------------*/ORG0000HSJMPMAINORG0030H/*---------------------------------------------------------------------*//*--主程序---------------------------------------*//*---------------------------------------------------------------------*/MAIN:MOVPORT_2,#00H//端口初始化MOVPORT_1,#00HSTART:MOVLOOP_NUM3,#255MOVLOOP_NUM2,#255MOVLOOP_NUM1,#127//改变LOOP_NUM1的值就改变了占空比,初值50%LOOP:MOVA,LOOP_NUM1CJNEA,LOOP_NUM2,LOOP2LOOP2:JCLOOP3MOVPORT_2,#0FFHSJMPEXITLOOP3:MOVPORT_2,#00HEXIT:DJNZLOOP_NUM2,LOOPMOVLOOP_NUM2,#255MOVA,LOOP_NUM1CJNEA,#255,LOOPSJMPSTART/*---------------------------------------------------------------------*//*--程序结束---------------------------------------*//*---------------------------------------------------------------------*/END 

再给你一个C的主代码

/***********************************************************************/
/***名称:PWM控制LED灯亮度       ***************************************/
/***功能:此程序为主模块,改变j的值就改变了占空比,初值50%              */
/***********************************************************************/
#include
typedef unsigned char U8;
typedef unsigned int  U16;
/*---------------------------------------------------------------------*/
/*--   端口定义                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
#define PORT_2 P2
/*---------------------------------------------------------------------*/
/*--   主程序                   ---------------------------------------*/
/*---------------------------------------------------------------------*/
void main()
{
	U8 i,j;
	j=127;		  //改变j的值就改变了占空比,初值50%
	PORT_2=0X00;
	while(1)
	{
		for(i=255;i>0;i--)
			PORT_2=(j

 

0
回复
wangbo0227
LV.8
16
2014-04-19 10:56
@www_wei
/*stc15f101w,运行频率12MHz,输出频率1KHZ,占空比0~100可调,周末闲来无事,顺手写的,希望能帮到你*/AUXRDATA8EHORG0000HLJMPMAINORG000BHLJMPTM0_0MAIN:MOVR0,#0HMOVR1,#0H;占空比初值MOVR2,#100MOVTMOD,#00000010B;定时器0工作方式2MOV8FH,#00000000BMOVTH0,#0F6HMOVTL0,#0F6HMOVAUXR,#00HSETBET0SETBEASETBTR0M_0:SETBP3.2NOPNOPJNBP3.2,M_8;占空比+SETBP3.3NOPNOPJNBP3.3,M_2;占空比-SJMPM_0M_2:CJNER1,#0,M_3SJMPM_0M_3:DECR1SJMPM_ENDM_8:CJNER1,#101,M_9SJMPM_0M_9:INCR1M_END:LCALLDELAYSJMPM_0TM0_0:CJNER0,#0H,TM0_1;定时器0中断执行程序CLRP3.5SJMPTM0_2TM0_1:SETBP3.5DJNZR0,TM0_2CLRP3.5TM0_2:DJNZR2,TM0_ENDMOVR2,#100MOVA,R1MOVR0,ATM0_END:RETIDELAY:;延时255毫秒CJNER2,#1,$INCR4CJNER4,#255,DELAYMOVR4,#0RETEND 
有没有C语言的啊,汇编的实在看不懂,现在很多人使用C,用汇编的,比较少了,比较难,不过好像是汇编语言,通用性,很强,很多东西使用C语言写不出来吧
0
回复
wangbo0227
LV.8
17
2014-04-19 11:13
@yueyunno1
再给你一个C的主代码/***********************************************************************//***名称:PWM控制LED灯亮度***************************************//***功能:此程序为主模块,改变j的值就改变了占空比,初值50%*//***********************************************************************/#includetypedefunsignedcharU8;typedefunsignedintU16;/*---------------------------------------------------------------------*//*--端口定义---------------------------------------*//*---------------------------------------------------------------------*/#definePORT_2P2/*---------------------------------------------------------------------*//*--主程序---------------------------------------*//*---------------------------------------------------------------------*/voidmain(){U8i,j;j=127;//改变j的值就改变了占空比,初值50%PORT_2=0X00;while(1){for(i=255;i>0;i--)PORT_2=(j

谢谢谢谢,程序很简洁。

我之前使用51写了一个,你看下有没有什么错误

#include

#define uint unsigned int 

#define uchar unsigned char

sbit key1=P1^2;

sbit key2=P1^3;

sbit key3=P1^4;

sbit key4=P1^5;

sbit dula=P2^6;

sbit wela=P2^7;

sbit led1=P1^0;

sbit led2=P1^1;

sbit led=P2^0;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uint);

uchar numt0,num,numt1;

void display(uchar numdis) //  数码管显示程序  

  {  

  uchar bai,shi,ge;

    bai=numdis/100; 

   shi=numdis%100/10; 

   ge=numdis%10;  

  dula=1;   

 P0=table[bai];  

  dula=0;  

  P0=0xff;   

 wela=1;  

  P0=0xfe; 

   wela=0;delay(20);  

  dula=1;  

  P0=table[shi];  

  dula=0;   

 P0=0xff;   

 wela=1;   

 P0=0xfd;  

  wela=0;delay(20); 

   dula=1;  

  P0=table[ge]; 

   dula=0;   

 P0=0xff;   

 wela=1;   

 P0=0xfb; 

   wela=0;

delay(20);   

 }

void delay(uint x)    //延时子函数    

{  

  uint i,j; 

   for(i=x;i>0;i--)     

  for(j=110;j>0;j--);   

  }

void pwm(uint num)  

  {

 delay(num); 

led=0;

 delay(100-num);

 led=1;

}

void init()  

 {  

 TMOD=0x11; 

  TH0=(65536-45872)/256;  

 TL0=(65536-45872)%256; 

  TH1=(65536-45872)/256;  

 TL1=(65536-45872)%256;  

 EA=1;

   ET0=1;  

 ET1=1; 

  }

void keyscan()    //按键读取函数  

 {  

 if(key1==0)  

 {  

 delay(10);  

 if(key1==0)  

 {  

 num++;  

 if(num==100) 

  num=0;  

 }  

 }  

 if(key2==0)  

 {   

delay(10); 

  if(key2==0)  

 {  

 if(num==0)   num=100;   

num--; 

  }  

 }   

if(key3==0)  

 {  

 delay(10); 

  if(key3==0) 

  {  

 num=0; 

  while(!key3); 

  TR1=~TR1;   

  }

   if(key4==0)  

 {   

delay(10); 

  if(key4==0)  

 {  

 num=99;  

 while(!key4); 

  TR0=~TR0;  

 } 

  } 

  }

void main()      \\主函数 

 {  

 init(); 

  while(1)   

{  

 keyscan();

   pwm(num);  

 display(num);   

}  

 }

void T0_time()interrupt 1     \\中断LED指示  

 { 

  TH0=(65536-45872)/256; 

  TL0=(65536-45872)%256; 

  numt0++;  

 if(numt0==num)   

{  

 numt0=0; 

  led1=~led1;  

    }   

}

void T1_time()interrupt 3    \\第二个LED指示   

{   

TH1=(65536-45872)/256;  

 TL1=(65536-45872)%256; 

  numt1++; 

  if(numt1==num)   

{  

 numt1=0; 

  led2=~led2;  

    } 

  }

0
回复
2014-04-19 11:21
@wangbo0227
有没有C语言的啊,汇编的实在看不懂,现在很多人使用C,用汇编的,比较少了,比较难,不过好像是汇编语言,通用性,很强,很多东西使用C语言写不出来吧
我给了你一个汇编  一个C呀    你仔细看看!
0
回复
xiang1980
LV.1
19
2014-04-21 17:16
@wangbo0227
有没有C语言的啊,汇编的实在看不懂,现在很多人使用C,用汇编的,比较少了,比较难,不过好像是汇编语言,通用性,很强,很多东西使用C语言写不出来吧
经常看两位的帖子,几天注册支持下,谢谢两位
0
回复