OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11195|回复: 32

51单片机也能流畅驱动彩屏

[复制链接]

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-2-13 03:26:38 | 显示全部楼层 |阅读模式
video-2016-02-13-03-15-55.zip (6.85 MB, 下载次数: 3258)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-13 03:41:33 | 显示全部楼层
本帖最后由 HER107 于 2016-2-13 03:43 编辑

QQ截图20160213032336.jpg QQ截图20160213032953.jpg

现在只写好了基本构架,参数调节和其他细节驱动都还没写好!!
自己写了个不知道算不算操作系统的代码,反正就是能让各个任务协调工作;
向18B20这类需要长延时器件一点不受影响。
STC15W4K48S4一个,
具体是
一路 18B20检测温度,控制散热风扇的工作,和机器的过热保护,
输出两路25KHZ的PWM驱动逆变升压,一路1KHZ左右频率可调脉冲给缓冲级使用,
一路 20-250HZ左右 频率和占空比可调的脉冲给后级使用,
同时检测电流,以及检测3路电压,其中2路是压频隔离输入,使用捕获检测。
还有后级短路检测,输入欠压过压等等功能。。
过两天淘宝店铺开业了就把PCB打样回来
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-13 05:40:30 | 显示全部楼层
2016-02-13 05.38.30.jpg


回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-13 16:14:24 | 显示全部楼层
[mw_shl_code=c,true]//显示数字/字母/汉字
//12*24 ZF_12
//24*24 ZF_24
//16*32 ZF_16
//32*32 ZF_32
void LCD_WX(u8 m,u16 x,u16 y,u16 cr,u8 a,u8 b,u8 c)
{
        u8 i,j,k,CH,CL;
        switch(m)
                {
                case ZF_12 : LCD_SetWindows(x,y,x+11,y+23);break;
                case ZF_16 : LCD_SetWindows(x,y,x+15,y+31);break;
                case ZF_24 : LCD_SetWindows(x,y,x+23,y+23);break;
                case ZF_32 : LCD_SetWindows(x,y,x+31,y+31);break;
                default : return;
                }
        LCD_RS=1;
        F_CS=0;
        CH=cr>>8;
        CL=cr;
        SPDAT=0x03;
        while(SPSTAT<0x80);
        SPSTAT=0xFF;  
        SPDAT=a;
        while(SPSTAT<0x80);
        SPSTAT=0xFF;
        SPDAT=b;
        while(SPSTAT<0x80);
        SPSTAT=0xFF;
        SPDAT=c;
        while(SPSTAT<0x80);
        SPSTAT=0xFF;
                SPDAT=0;
                while(SPSTAT<0x80);
                SPSTAT=0xFF;
        for(i=0;i<m;i++)
                {       
                k=SPDAT;
                SPDAT=0;
                for(j=0;j<8;j++)
                        {
                        if(k&0x80)
                                {
                                LCD_H=0;
                                LCD_L=0;
                                }
                        else
                                {
                                LCD_H=CH;
                                LCD_L=CL;
                                }
                        k<<=1;
                        LCD_WR=0;
                        LCD_WR=1;
                        }
                }
                SPSTAT=0xFF;
                F_CS=1;
}
//输入一个数字,返回尾部横坐标
//自动消隐,ch=1,带小数点
//X,Y,起始坐标值
u16 LCD_WS(u8 m,u16 x,u16 y,u16 cr,u16 dat,bit ch)        //输入一个数字,返回尾部横坐标
{
        u16 i;
        i=x;
        if(dat>5000)return 0;
        if(dat>999)i=LCD_ZF(m,i,y,cr,dat/1000);
        if(dat>99)i=LCD_ZF(m,i,y,cr,(dat%1000)/100);
        i=LCD_ZF(m,i,y,cr,(dat%100)/10);
        if(ch)i=LCD_ZF(m,i,y,cr,mm_dg);
        i=LCD_ZF(m,i,y,cr,dat%10);
        return i;
}
u16 LCD_ZF(u8 m,u16 x,u16 y,u16 cr,u16 dat)        //显示字符函数
{
        u16 i;
        u8 a,b,c;
        a=0x13;
        switch(m)
                {
                case ZF_12 : i=15620+dat*ZF_12;break;
                case ZF_16 : i=14916+dat*ZF_16;break;
                case ZF_24 : i=16268+dat*ZF_24;break;
                case ZF_32 : i=50380+dat*ZF_32;a=0x1a;break;
                default : return 0;
                }
        b=i>>8;
        c=i;
        LCD_WX(m,x,y,cr,a,b,c);
        switch(m)
                {
                case ZF_12 : return (x+12);
                case ZF_16 : return (x+16);
                case ZF_24 : return (x+24);
                case ZF_32 : return (x+32);
                }
}[/mw_shl_code]
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-13 16:16:22 | 显示全部楼层
分享个彩屏显示数字,字母和标点符号的代码,数字带消隐,向左对齐。。
因为我用的时候数值没有超过2000,所以加了句 if(dat>5000)return;
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-13 17:00:29 | 显示全部楼层
本帖最后由 HER107 于 2016-2-13 21:49 编辑

320160.jpg

回复 支持 反对

使用道具 举报

22

主题

180

帖子

1

精华

高级会员

Rank: 4

积分
616
金钱
616
注册时间
2015-6-29
在线时间
101 小时
发表于 2016-2-13 20:31:30 | 显示全部楼层
什么屏来的,串口屏吗
我是菜鸟
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-13 21:44:49 | 显示全部楼层
2016-02-13 21.32.58.jpg

参数设置界面
发个我调试过程中的代码,帮助和确定按键的功能没写。
我写代码从来都不注释的,但是为了给你们分享还是写上去了

[mw_shl_code=c,true]
void mode_canshu()        //按键处理函数
{
        u8 i;
        i=kay_scan();        //扫描触摸屏
        if(i==0)return; //如果没有按在对应位置不做处理
        switch(i)
                {
                case 1 :
                case 2 :
                case 3 : if(key_dat[7]>5)return;        //最多输入6位数,包括小数点
                                 if(key_dat[0]==0)if(key_dat[7]==1){key_dat[7]=0;key_addr-=16;} //如果第一位是0,则消隐
                                 key_dat[key_dat[7]]=i+6;key_dat[7]++;                                //将数字保存于数组中
                                 key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,i+6);return; //显示
                case 6 :
                case 7 :
                case 8 : if(key_dat[7]>5)return;
                                  if(key_dat[0]==0)if(key_dat[7]==1){key_dat[7]=0;key_addr-=16;}
                                 key_dat[key_dat[7]]=i-2;key_dat[7]++;
                                 key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,i-2);return;
                case 11 :
                case 12 :
                case 13 : if(key_dat[7]>5)return;
                                 if(key_dat[0]==0)if(key_dat[7]==1){key_dat[7]=0;key_addr-=16;}
                                 key_dat[key_dat[7]]=i-10;key_dat[7]++;
                                 key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,i-10);return;
                case 9 : if(key_dat[6]!=0)return;if(key_dat[7]>5)return;
                                 if(key_dat[7]==0)                //小数点判断,如果已经存在小数点则退出,如果在第一位则自动补零
                                 {key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,0);key_dat[7]++;}
                                 key_dat[6]=key_dat[7];key_dat[7]++;
                                 key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,mm_dg);return;
                case 14 : if(key_dat[7]>5)return;if(key_dat[0]==0)if(key_dat[7]==1)return;
                                  key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,0);
                                  key_dat[key_dat[7]]=0;key_dat[7]++;return;
                case 5 : if(key_dat[7]==0)return;key_addr-=16;        //退格处理
                                 LCD_Clear(key_addr,44,32,16,beijing_2);key_dat[7]--;
                                 if(key_dat[6]==key_dat[7])key_dat[6]=0;key_dat[key_dat[7]]=0;return;
                case 15 : mode_menu(mode_key/10);return;        //返回对应的界面
                }
}[/mw_shl_code]
回复 支持 反对

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-2-13 21:46:47 | 显示全部楼层
支持!楼主能写一下大概思路么?要不然估计会有很多“太长不看”党
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-13 21:57:41 | 显示全部楼层
负西弱 发表于 2016-2-13 20:31
什么屏来的,串口屏吗

并口,就51那速度用串口还得了,
显示部分做了最大优化,必须延时的地方用_nop_();代替,一个一个时钟计算,一个都不能浪费
本来flash就是串口的,显示图片或者字符什么的都是从flash读一个再往液晶写一个。。。
所有图片或字符都存在flash中。。
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-13 22:06:08 | 显示全部楼层
yyx112358 发表于 2016-2-13 21:46
支持!楼主能写一下大概思路么?要不然估计会有很多“太长不看”党

用一个定时器中断优先级开最高,产生时钟。
子函数中遇到空延时转去处理其他任务,由定时器计时;
触摸屏各级菜单处理很简单,就是各个界面各写一个函数,定义个静态变量标记当前界面,
遇到跳转或切换就进入相应的函数,
不在主界面时,各个采集回来的参数后台处理,
在主界面时,由上面的时钟定时,每隔预定时间更新一次显示。。
在其他界面的时候,主时钟进行倒计时,如果预定时间没有触摸按键操作,就返回住界面,有按下就重新计时留在当前界面…………
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-13 22:13:23 | 显示全部楼层
2211312.jpg
这个图是之前的,我现在已经修改过,加了其他功能
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-14 15:52:56 | 显示全部楼层
2016-02-14 15.50.14.jpg [mw_shl_code=c,true]void mode_OFF()
{
        u16 i;        u8 j;
        i=pty>60?(pty-60)60-pty);
        if(i<22) {
                         i=ptx>90?(ptx-90)90-ptx);
                         if(i<44)i=1;
                          else {
                                  i=ptx>230?(ptx-230)230-ptx);
                                  if(i<44)i=2;
                                  else return;
                                  }
                         }
        else if(ptx>215) {
                                         if(pty<133)return;
                                         else if(pty>185)i=4;
                                                  else i=3;
                                         }
                  else return;
        j=mode_ON&0x0f;
        switch(i)
                {
                case 1 : if(j!=1)
                                 {mode_ON|=0x01;LCD_Clear(25,50,20,20,0xf800);
                                 LCD_Clear(165,50,20,20,beijing_2);}return;
                case 2 : if(j!=2)
                                 {mode_ON|=0x02;LCD_Clear(25,50,20,20,beijing_2);
                                 LCD_Clear(165,50,20,20,0xf800);}return;
                case 3 : if(j==0)return;break;
                case 4 : mode_menu(5);return;
                default : return;
                }                //mode_ON的bit7和bit8用于保存设定值,bit0和bit1用于保存键盘状态
        if(j==1)        {        LCD_ZF(ZF_24,200,9,beijing_2,WZ_kai);
                                        LCD_ZF(ZF_24,224,9,beijing_2,WZ_qi);
                                        if(mode==51)mode_ON|=0x80;
                                        else mode_ON|=0x40;       
                                        mode_ON&=0xf0;                        }
                else         {        LCD_ZF(ZF_24,200,9,beijing_2,WZ_guan);
                                        LCD_ZF(ZF_24,224,9,beijing_2,WZ_bi);
                                        if(mode==51)mode_ON&=0x70;
                                        else mode_ON&=0xb0;                }
}[/mw_shl_code]

回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-14 16:06:49 | 显示全部楼层
2016-02-14 15.55.45.jpg 2016-02-14 15.55.14.jpg
00000222.jpg

进入对应的界面 就显示对应已设定的参数;
点击问号按钮,出现提示界面,显示相对应的范围,
再次点击任意按键恢复之前的输入状态,原先已经输入但没保存的数值也不受影响!
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-14 22:26:01 | 显示全部楼层
本帖最后由 HER107 于 2016-2-14 22:31 编辑

下面enter()的备注有误,是数值超过10000,不是1000.。。
我使用到的值只在0-1500之间!!所以超过1W判定为输入错误!
调试完成的完整的 键盘处理程序……
需要小数点的地方保留一位,
不需要小数点的地方,对小数点后的数值不做处理。
有小数点的地方,数值乘以10就变成整型了
方便处理和保存,
比如数值12.5,扩大10倍是125,用整型保存的话是1个字节
要是用浮点数的话~嘿嘿
当然,这只是针对51单片机这些破玩意!!!定义个变量都得思前想后,尽量节省资源。。
想stm32就不要那么吝啬了!!!
[mw_shl_code=c,true]void mode_canshu()        //按键处理函数
{
        u8 i;
        static bit k;
        if(k)         {        //如果显示了帮助界面或者错误提示界面
                        key_huifu(); //恢复输入界面
                        k=0;                        //清零标志位
                        return;                //退出,等待下一次按键操作
                        }
        i=kay_scan();        //匹配扫描回来的坐标
        if(i==0)return; //如果没有按在对应位置不做处理
        switch(i)
                {
                case 1 :
                case 2 :
                case 3 : if(key_dat[7]>5)return;        //最多输入6位数,包括小数点
                                 if(key_dat[0]==0)if(key_dat[7]==1){key_dat[7]=0;key_addr-=16;} //如果第一位是0,则消隐
                                 key_dat[key_dat[7]]=i+6;key_dat[7]++;                                //将数字保存于数组中
                                 key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,i+6);return; //显示
                case 6 :
                case 7 :
                case 8 : if(key_dat[7]>5)return;
                                  if(key_dat[0]==0)if(key_dat[7]==1){key_dat[7]=0;key_addr-=16;}
                                 key_dat[key_dat[7]]=i-2;key_dat[7]++;
                                 key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,i-2);return;
                case 11 :
                case 12 :
                case 13 : if(key_dat[7]>5)return;
                                 if(key_dat[0]==0)if(key_dat[7]==1){key_dat[7]=0;key_addr-=16;}
                                 key_dat[key_dat[7]]=i-10;key_dat[7]++;
                                 key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,i-10);return;
                case 9 : if(key_dat[6]!=0)return;if(key_dat[7]>5)return;
                                 if(key_dat[7]==0)                //小数点判断,如果已经存在小数点则退出,如果在第一位则自动补零
                                 {key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,0);key_dat[7]++;}
                                 key_dat[6]=key_dat[7];key_dat[7]++;
                                 key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,mm_dg);return;
                case 14 : if(key_dat[7]>5)return;if(key_dat[0]==0)if(key_dat[7]==1)return;
                                  key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,0);
                                  key_dat[key_dat[7]]=0;key_dat[7]++;return;
                case 5 : if(key_dat[7]==0)return;key_addr-=16;        //退格处理
                                 LCD_Clear(key_addr,44,32,16,beijing_2);key_dat[7]--;
                                 if(key_dat[6]==key_dat[7])key_dat[6]=0;key_dat[key_dat[7]]=0;return;
                case 15 : mode_menu(mode_key/10);return;        //返回对应的界面
                case 4 : mode_tishi(mode_key);k=1;return;        //如果点击了问号按钮,显示提示界面
                case 10 : k=enter();if(k){LCD_PC(0,0,80,320,PC_cuowu);return;}break; //确认按键,判断输入的数值是否有误
                }                                                                                                                        //如果有误,显示错误提示界面
                if(canshu_falg!=0)                                //将设置的值写入EEPROM.
                        canshu_falg=write_eeprom(canshu_falg);
}[/mw_shl_code][mw_shl_code=c,true]void key_huifu()
{
                u8 i;
                mode_shuru(mode_key);
                key_addr=184;        //恢复之前输入数字的坐标
                for(i=0;i<key_dat[7];i++) //恢复原先输入的数字
                        {
                        if((key_dat[6]==i)&&(i!=0))key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,mm_dg);
                        else key_addr=LCD_ZF(ZF_16,key_addr,44,beijing_2,key_dat);
                        }
}
bit enter()
{
        u8 i;  u16 j=0;
        if(key_dat[7]==0)return 0;                //如果没有输入则不做处理
        if(key_dat[6]>4)return 1;        //如果小数点钱有超过4位数字,即输入值超过1000,则返回错误
        if(key_dat[6]==0)if(key_dat[7]>4)return 1;        //因为我所用到的参数最大只有1500
        if(key_dat[6]!=0)                        //将缓冲区内的输入值转换为数字
                for(i=0;i<key_dat[6];i++)        //之所以没用浮点数,是为了方便处理和储存
                        {
                        j*=10;
                        j+=key_dat;
                        }
        else for(i=0;i<key_dat[7];i++)
                        {
                        j*=10;
                        j+=key_dat;
                        }
        if(mode_key<20)                        //以下是数值的判断和更新
                {
                if(j>120)return 1;
                j*=10;
                if(key_dat[6]!=0)j+=key_dat[key_dat[6]+1];
                }
        switch(mode_key)
                {
                case 11 :         if((j<120)||(j>180))return 1;        //如果输入不在范围内,返回错误
                                        if(j==canshu_temp[0])return 0;        //如果输入和原来的值一样,不做处理
                                        canshu_temp[0]=j;break;                        //这是为了避免连续按下确认键
                case 12 :         if((j<70)||(j>120))return 1;        //canshu_tamp[]这个数组保存所有设置的参数
                                        if(j==canshu_temp[1])return 0;        //开机初始化就必须从eeprom将数值读出来写入该数组
                                        canshu_temp[1]=j;break;                        //主循环中各种采样回来的参数和该数组匹配
                case 13 :        if((j<100)||(j>1200))return 1;        //匹配的结果将产生各种硬件操作
                                        if(j==canshu_temp[2])return 0;
                                        canshu_temp[2]=j;break;
                case 21 :        if(j>99)return 1;
                                        if(j==canshu_temp[3])return 0;
                                        canshu_temp[3]=j;break;
                case 22 :        if(j>99)return 1;
                                        if(j==canshu_temp[4])return 0;
                                        canshu_temp[4]=j;break;
                case 23 :        if(j>99)return 1;
                                        if(j==canshu_temp[5])return 0;
                                        canshu_temp[5]=j;break;
                case 31 :        if((j<20)||(j>250))return 1;
                                        if(j==canshu_temp[6])return 0;
                                        canshu_temp[6]=j;break;
                case 32 :        if((j<200)||(j>1500))return 1;
                                        if(j==canshu_temp[7])return 0;
                                        canshu_temp[7]=j;break;
                case 33 :        if((j<50)||(j>1000))return 1;
                                        if(j==canshu_temp[8])return 0;
                                        canshu_temp[8]=j;break;
                case 53 :         if(j>999)return 1;
                                        if(j==canshu_temp[9])return 0;
                                        canshu_temp[9]=j;break;
                default :        return 0;
                }
                canshu_falg=mode_key;        //赋值标志位,用于保存数据用
                key_huifu();                //更新显示
                return 0;
}[/mw_shl_code]
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-15 18:42:16 | 显示全部楼层
散热风扇控制程序,
用do……while()循环,避免多级if……else 嵌套难理解,看起来也不爽
[mw_shl_code=c,true]        do
        {        //风扇控制,低电平为开启
        if(canshu_temp[3]==0){fan_sw=0;break;}        //常开模式
        if(canshu_temp[4]==0){fan_sw=1;break;}        //常闭模式
        if(canshu_temp[3]<canshu_temp[4]){fan_sw=0;break;}        //设置错误,默认打开
        if((canshu_temp[4]-canshu_temp[3])<5){fan_sw=0;break;} //间隔过小,避免震荡
        if(tempH>canshu_temp[3]){fan_sw=0;break;}        //温度高于设定值,开启风扇
        if(tempH<canshu_temp[4]){fan_sw=1;break;}        //低于设定值,关闭风扇
        }
        while(0);
[/mw_shl_code]
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-16 18:59:30 | 显示全部楼层
本帖最后由 HER107 于 2016-2-26 22:22 编辑


淘宝打样中……
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-21 11:26:14 | 显示全部楼层
本帖最后由 HER107 于 2016-2-26 22:21 编辑

2016-02-21 08.34.37.jpg
2016-02-21 09.51.44.jpg

控制板回来了
功率主板 正在画
QQ截图20160221112536.jpg
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-23 18:16:21 | 显示全部楼层
2016-02-23 16.24.17.jpg
2016-02-22 18.54.19.jpg
2016-02-22 12.13.29.jpg

其他元件没到齐!!不过可以开机了!淘宝发货拖拖拉拉的……
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-24 22:06:33 | 显示全部楼层
   

板子上只接了电源 所以界面上显示的参数都是单片机随便生成的,调试用……
因为还有几个芯片没买回来,好些功能不能正常工作,所以现在用的程序烧录的是以前的……

后面用杜邦线连了个18B20,所以温度显示是对的,但是它引脚太小,插在杜邦线上接触不良,实际使用是焊在功率主板上的!!

回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-26 22:21:19 | 显示全部楼层
2016-02-26 21.36.42.jpg
2016-02-26 21.37.50.jpg
2016-02-26 21.38.12.jpg

ADC采样!!!! 采用精密运放做了个高阻抗输入的差分电路做输入……能把干扰大大降低……

回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-26 22:24:00 | 显示全部楼层
2016-02-26 18.24.22.jpg

和高压板的连接,板子上面还有部分元件没安装…………逆变部分没做好!!
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2015-12-26
在线时间
21 小时
发表于 2016-2-29 15:50:32 | 显示全部楼层
楼主能把逆变功率部分也介绍下吗?
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-2-29 23:39:12 | 显示全部楼层
风想101 发表于 2016-2-29 15:50
楼主能把逆变功率部分也介绍下吗?

这个嘛!!! 这个论坛里讨论的都是软件编程……说硬件方面的估计大家理解不了!!
我工作就是做硬件方面的……软件方面是个菜鸟……
回复 支持 反对

使用道具 举报

0

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
391
金钱
391
注册时间
2013-8-20
在线时间
49 小时
发表于 2016-3-3 10:55:24 | 显示全部楼层
这个号,使用51单片机的STC最新版的,流畅的运行彩屏还是绰绰有余的!!
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2016-3-12 19:00:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

9

主题

85

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3858
金钱
3858
注册时间
2014-7-26
在线时间
530 小时
发表于 2016-3-19 13:51:22 | 显示全部楼层
看看,学习学习
回复 支持 反对

使用道具 举报

9

主题

85

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3858
金钱
3858
注册时间
2014-7-26
在线时间
530 小时
发表于 2016-3-19 14:02:11 | 显示全部楼层
楼主好厉害,学习了
回复 支持 反对

使用道具 举报

4

主题

63

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2016-2-24
在线时间
94 小时
发表于 2016-3-20 15:15:31 | 显示全部楼层
那个差分电路是怎么做出来的啊?是只用来消除干扰的吗?能不能测量差分信号呢?
回复 支持 反对

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
 楼主| 发表于 2016-3-20 20:06:49 | 显示全部楼层
你微笑时丶好美 发表于 2016-3-20 15:15
那个差分电路是怎么做出来的啊?是只用来消除干扰的吗?能不能测量差分信号呢?

差分放大电路,肯定可以了。。。
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-11-16
在线时间
5 小时
发表于 2016-11-25 21:17:55 | 显示全部楼层
看看,学习学习
回复 支持 反对

使用道具 举报

0

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
247
金钱
247
注册时间
2016-10-17
在线时间
24 小时
发表于 2016-11-28 17:36:31 | 显示全部楼层
感谢楼主无私分享
回复 支持 反对

使用道具 举报

9

主题

85

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3858
金钱
3858
注册时间
2014-7-26
在线时间
530 小时
发表于 2016-11-29 12:40:34 | 显示全部楼层
看看,学习学习。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-14 01:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表