我等你好久了 MCU DIY进程帖
在等待快递的时候,已从淘宝上买过一次元件!可是看到实物后,才发现,好多元件都买错了!之前看了PCB的照片,以为都是贴片!可是,并不是想象中的那样! 没有办法,只好又进行第二次淘宝!有得元件已焊接上,等的就是剩下的元件了! 看着各位参与者公布的进程,心急啊。。。
元件回来之后,忙于工作上事情。以致于,焊接又耽误了几天的时间!不过,挤出了时间,完成了焊接!
天天看论坛中的帖子,知道PCB板有点瑕疵!看着坛友们的解决方法,我选择了改变三极管的形式!这样,看起来,对整个布局没有多大影响!在这里谢谢那些坛友们。。。 在这里,给大家提一个小小的建议哟!由于LM7805没有散热器,而板上也没有考虑到这个问题!所以,在焊接得时候,把LM7805散热部分下的绿油刮下!(不要挂到旁边的+5V电源的走线哟)对7805引脚整形好后,稍微将7805往前推,即固定孔与板的安装孔稍微错开点!然后,用焊锡将7805的散热部分焊接在PCB板上。这样即可以利用板散热,也固定了7805。(在其7805背面涂抹导热硅脂,这样效果会更好) 自己做的一个外接电源板!由于自己电脑配置很差,所以,不想从电脑取电!
闲置的一个小环牛,拿来直接带我的电源板!呵呵。。
电路已调通,剩下的就是一步步的去实现各模块功能了!相信自己,加油。。。各位坛友们,一起加油吧。。。
无意间在邮箱中,看到的EEPW发过来了“自己DIY—MCU开发板”邮件。忍不住提出了申请,可是我也没有报太多的希望!毕竟,感觉离单片机已很遥远了!在期盼中,收到了来自“EEPW“的礼物! 很感谢“EEPW”,毕竟正是因为这次活动,才让我更深层次的接触单片机吧!之前,也没有放弃过,利用工作的闲暇时间,用万用板搭过最小系统电路,进行着很简单的模块实验! 工作之余的时间,毕竟不是很多。由于自己对编程有点困难,所以,这次活动,开发板上各模块功能的实现,完成的并不是很多!感觉有一些歉意,对不住来自“EEPW”的这份礼物! 活动虽然结束了,但是,我会继续用这份礼物,来实现自己心中曾经的那份梦想! 在这里,很感谢此次活动的组织者,很感谢来自论坛的各位坛友们!特别是 “四弦”,“ goodboy3021”,“jjjsj”,“shangziyun” , 因为我曾悄悄的从他们的帖子里“偷“走了一些源程序。呵呵!记得的也就这么多吧,毕竟论坛里的帖子很多! 各位坛友们,继续加油吧!
#include <STC89.H>
unsigned char display[11]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};//显示数码组
//0,1,2,3,4,5,6,7,8,9,.
void delay_MS(unsigned int a)
{
unsigned int i;
while (a--!=0)
{
for(i=0;i<125;i++);
}
}
void main (void)
{
unsigned char i,j,k;
while(1)
{
for(i=0;i<11;i++)
{
P0=display[i];
for(k=1;k<100;k++)
{
for(j=0;j<8;j++) //从地位往高位扫描显示P0.1~P0.7
{
P2=j;
delay_MS(1);
}
}
}
}
}
1602静态字符显示:
#include<reg52.h> //
#include<stdio.h> //#include<intrins.h>
sbit RS = P2^4; //Pin4
sbit RW = P2^5; //Pin5
sbit E = P2^6; //Pin6
#define Data P0//数据端口
char data TimeNum[]=" ";
char data Test1[]=" ";
void DelayUs(unsigned char us)//delay us
{
unsigned char uscnt;
uscnt=us>>1; /*12MHz频率*/
while(--uscnt);
}
void DelayMs(unsigned char ms)
{
while(--ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
void WriteCommand(unsigned char c)
{
DelayMs(5);
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
void WriteData(unsigned char c)
{
DelayMs(5);
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
void ShowChar(unsigned char pos,unsigned char c)
{
unsigned char p;
if (pos>=0x10)
p=pos+0xb0;
else
p=pos+0x80;
WriteCommand (p);
WriteData (c);
}
void ShowString (unsigned char line,char *ptr)
{
unsigned char l,i;
l=line<<4;
for (i=0;i<16;i++)
ShowChar (l++,*(ptr+i));
}
void InitLcd()
{
DelayMs(15);
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x06); //显示光标移动位置
WriteCommand(0x0c); //显示开及光标设置
WriteCommand(0x01); //显示清屏
}
void main(void)
{
InitLcd();
DelayMs(15);
sprintf(Test1," www.EEPW.com ");
ShowString(0,Test1);
sprintf(TimeNum,"LCD1602 Test ok!");
ShowString(1,TimeNum);
while(1);
}
最后一个实现的模块了!程序还在研究中,这个是借鉴别人的程序。
快过年了,忙于工作上的事情,可能开发板要搁置一段时间了。。。
祝各位坛友们新年愉快。。。
DS18B20温度显示:
#include<reg52.h>
#include<math.h>
#include<INTRINS.H>
#define uchar unsigned char
#define uint unsigned int;
sbit seg1=P2^0;
sbit seg2=P2^1;
sbit seg3=P2^2;
sbit DQ=P1^3;//ds18b20 端口
sfr dataled=0x80;//显示数据端口
uint temp;
uchar flag_get,count,num,minute,second;
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//7段数码管段码表共阳
uchar str[6];
void delay1(uchar MS);
unsigned int ReadTemperature(void);
void Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char dat);
void delay(unsigned int i);
main()
{
unsigned char TempH,TempL;
TMOD|=0x01;//定时器设置
TH0=0xef;
TL0=0xf0;
IE=0x82;
TR0=1;
P2=0x00;
count=0;
while(1)
{
str[5]=0x39; //显示C符号
str[1]=tab[TempH/100]; //十位温度
str[2]=tab[(TempH%100)/10]; //十位温度
str[3]=tab[(TempH%100)%10]|0x80; //个位温度,带小数点
str[4]=tab[TempL];
if(flag_get==1) //定时读取当前温度
{
temp=ReadTemperature();
if(temp&0x8000)
{
str[0]=0x40;//负号标志
temp=~temp; // 取反加1
temp +=1;
}
else
str[0]=0;
TempH=temp>>4;
TempL=temp&0x0F;
TempL=TempL*6/10;//小数近似处理
flag_get=0;
}
}
}
void tim(void) interrupt 1 using 1
{
TH0=0xef;//定时器重装值
TL0=0xf0;
num++;
if (num==50)
{num=0;
flag_get=1;//标志位有效
second++;
if(second>=60)
{second=0;
minute++;
}
}
count++;
if(count==1)
{P2=0;
dataled=str[0];}//数码管扫描
if(count==2)
{P2=1;
dataled=str[1];}
if(count==3)
{ P2=2;
dataled=str[2];
}
if(count==4)
{ P2=3;
dataled=str[3];
}
if(count==5)
{ P2=4;
dataled=str[4];
}
if(count==6)
{ P2=5;
dataled=str[5];
count=0;}
}
void delay(unsigned int i)//延时函数
{
while(i--);
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay(80); //精确延时 大于 480us
DQ = 1; //拉高总线
delay(10);
x=DQ;
delay(5);
}
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay(5);
}
return(dat);
}
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(5);
DQ = 1;
dat>>=1;
}
delay(5);
}
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
delay(200);
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar(); //低位
b=ReadOneChar(); //高位
b<<=8;
t=a+b;
return(t);
}
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 | |
【换取逻辑分析仪】rtthread添加RRH62000传感器驱动-基于野火启明6M5被打赏48分 | |
换逻辑分析仪+Verilog多输入门被打赏27分 |