写给自动化专业同学们的一份信(下)
大家好,这是我写的信下半部分,主要就是我对还在校园里的同学们的一点建议。
如果大家想走技术这条路线,我指的是单片机这方面(PLC我不擅长就不说了),大一的时候一定要早早的学会C语言,可以自学,不要害怕,以后绝大多数知识都是需要自学的,如果尝试发现有些困难,可以考虑报班学习,切记自学时,千万不要找那种很厚很厚的书比如C Prime Plus,入门时不需要多么精通C语言,以后有精力或者感觉自己C语言水平不够用了去翻看翻看就可以,不然一旦扎进书里,很消耗刚开始的那份冲劲儿,C语言的书网上有很多,或者直接看计算机二级考试那本教材也可以。
C语言基本掌握后,我建议大家还是先学习下51单片机,虽然好多人直接学习STM32,并不是不可以,我只是觉得32单片机已经将寄存器操作封装好了,直接对库进行操作,如果对寄存器操作没有了解,难免有些基础不扎实,到了以后操作其他芯片的寄存器时可能会不容易理解,而且51单片机学习周期较短,能让你对单片机有进一步的理解。51单片机我当时用的慧净的,不是打广告啊,天祥电子的比它贵一些,慧净开发板上的功能挺全的,够用了,淘宝搜下就能找到。
51单片机结束后开始学习STM32,野火的零死角玩转STM32这系列的教程很不错,把新手遇到的问题讲解的很详细,51转到32时,千万记得转换思想,不要想着还是寄存器去操作,很累的,现在除了已经工作多年的工程师,很少有人用寄存器操作32了,放心的用库函数吧,哪天有时间可以翻看下它的寄存器操作,比如GPIO的初始化,看一两个就够了,其他的都是大同小异,STM32学习到零死角玩转STM32中级篇,基本就可以做好多事了,高级篇可以暂时不看,毕竟内容有些多,学了一段时间不用也容易遗忘,当然有精力都学学更好。
接下来就是系统篇,ucosii系统,学习它我推荐任哲的《嵌入式实时操作系统uCOS-II原理及应用》,写的非常好,学习系统时记住,不要去想着理解函数是如何实现的,记住函数的功能和如何应用就可以了,就像32的库函数一样,重点学习它的任务机制,消息机制。项目应用中freertos用的很多,不过两个系统用起来我感觉区别不大,学会一个另一个很容易就掌握了。
在学习过程中一定要把学的知识用起来,多敲代码,做点小设计,不能光理解就觉得可以了,到此为止,下位机基本就没太多问题了,剩下的零零散散和更深入的知识可以去实际项目中学习应用。
接下来可以开始学习GUI,比如emwin,上手也很快,可以自己做点界面,人机交互,进而控制其他外围设备,学习emwin,安富莱的教程很不错,重点学习窗口管理,小工具用到什么学什么。在之后可以学习上位机,我学的是QT,语言用的是C++。同样,学习C++不要看太厚的书,脱节奏,后面有时间深入学习时在钻研。
以上便是软件部分了,硬件主要学习AD软件的使用,可以独立绘画PCB,至于设计原理图,看大家能力,由于我偏软件,硬件部分不能给大家多一点的建议,十分抱歉。还有一点。如果有机会跟老师做项目,一定争取参与进去,实践才是检验水平的时候,项目中也会让你收获颇多。
在学习这些技能的同时,不要丢下大学的课程,学位证还是很重要的,同时好多课程也非常重要,比如,高数(软件中的算法需要用到高数的),模电,数电,电路基础,自动控制原理,DSP等等,大家要对自己的课程的重要性做到心中有数,对了,还有英语,芯片的手册大多数都是英文的,英语还是很重要的。
第一次发文章,表达的有些凌乱,好多地方也没有说到,希望大家认真思考下自己的大学生涯,为自己做一个规划,最后祝福大家有一个美好的大学生活,毕业时签到一份满意的工作。小弟先去吃点食儿。。。下次见。
51单片机超声波模块数码管程序分享
超声波原理简单测距准确,应用广泛下面贴一个自己写的数码管程序,显示部分需要改,写的是我使用的是慧净开发板,共阴数码管。
超声波原理简单测距准确,应用广泛下面贴一个自己写的数码管程序,显示部分需要改,写的是我使用的是慧净开发板,共阴数码管。
//超声波模块程序
//Trig = P2^0
//Echo = P3^2
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的码表
uinttime = 0;
uintTImeH = 0;
uintTImeL = 0;
uint succeed_flag;
sbit dula=P2^0; //段选信号的锁存器控制
sbit wela=P2^1; //位选信号的锁存器控制
sbit Trig = P2^2;
sbit Echo = P3^2;
//
void delay(uint z)
{
uint x,y;
for(x=z;x》0;x--)
for(y=125;y》0;y--);
}
//
void delay_20us()
{
uchar a ;
for(a=0;a《100;a++);
}
//***************************************************************
//显示数据转换程序
void display(uinttemp)
{
uchar qian,ge,shi,bai;
qian = temp/1000;
bai=temp/100%10;
shi=temp%100/10;
ge=temp%10;
wela=1;
//P0=0xf7;
P0 = 0xfe;
wela=0;
dula=1;
P0=table[qian];
dula=0;
delay(5);
wela=1;
//P0=0xf7;
P0 = 0xfd;
wela=0;
dula=1;
P0=table[bai];
dula=0;
delay(5);
dula=1;
P0=0x00; //关位码
dula=0;
wela=1;
//P0=0xef;
P0 = 0xfb;
wela=0;
dula=1;
P0=table[shi];
dula=0;
delay(5);
dula=1;
P0=0x00; //关位码
dula=0;
dula=1;
P0=table[ge];
dula=0;
wela=1;
//P0=0xdf;
P0 = 0xf7;
wela=0;
delay(5);
dula=1;
P0=0x00; //关位码
dula=0;
}
//***************************************************************
void main()
{
uint distance;
uint test =0;
Trig=0; //首先拉低脉冲输入引脚
EA=1; //打开总中断0
TMOD=0x10; //定时器1,16位工作方式
while(1)
{
EA=0; //关总中断
Trig=1; //超声波输入端
delay_20us(); //延时20us
Trig=0; //产生一个20us的脉冲
while(Echo==0); //等待Echo回波引脚变高电平
succeed_flag=0; //清测量成功标志
EA=1;
EX0=1; //打开外部中断0
TH1=0; //定时器1清零
TL1=0; //定时器1清零
TF1=0; //计数溢出标志
TR1=1; //启动定时器1
delay(20); //等待测量的结果
TR1=0; //关闭定时器1
EX0=0; //关闭外部中断0
if(succeed_flag==1)
{
TIme=TImeH*256+timeL;
distance=time*0.172; //厘米
display(distance);
}
if(succeed_flag==0)
{
distance=0; //没有回波则清零
test = !test; //测试灯变化
}
}
}
//***************************************************************
//外部中断0,用做判断回波电平
void exter() interrupt 0 // 外部中断0是0号
{
timeH =TH1; //取出定时器的值
timeL =TL1; //取出定时器的值
succeed_flag=1;//至成功测量的标志
EX0=0; //关闭外部中断
}
//****************************************************************
//定时器1中断,用做超声波测距计时
void timer1() interrupt 3 //
{
TH1=0;
TL1=0;
}
文章转载自互联网
相关问答
怎么游篡静 单片机 板子给AT89S52芯片烧程序?-ZOL问答建议你看慧净电子AT89S52专用烧写视频教程,很详细指导你如何做的,在光盘文件夹12里。5条回答:【推荐答案】1、首先要选择配套的下载软件;2、下载软件设置好为...