打印

#TI校园故事# 众里寻他千百度

[复制链接]
2545|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zoujiachi|  楼主 | 2012-10-30 10:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
大一的我,迷茫,堕落,每天的生活就是打游戏,睡觉,吃饭肚子饿的不行了才会去吃,每次拖着疲惫的身子从网吧走出来,看着外面这个陌生而又熟悉的世界,我不停的问自己,以前那个学习成绩优异,争强好胜的我去了哪里?为什么我会变成现在这样,没有目标,没有理想,每天除了用游戏来麻痹自己,似乎没有其他的办法,于是,我只能一直这样堕落下去。
直到大二的某一天,我看见了隔壁寝室有一个人在玩弄一个长得很奇怪的东西,像电路板,但又和我以前印象中的很不一样,上面还有什么灯在闪啊闪的。后来我才知道,原来那就是单片机。
也就是从那天开始,不知道从哪里来的力量,促使我有一种想要去了解,去学习的渴望,这种感觉甚至超过了我想要玩游戏的冲动。在同学的介绍下,我买了款51单片机的学习板,利用寒假的时间,每天在家看视频,然后自己动手完成一个一个的小例程,还记得当我点亮第一个流水灯的时候,那种兴奋的心情,我一下就明白了,原来这就是我一直在找的感觉。
从那之后,我不再迷茫了,我已经清楚的知道我自己想要什么。于是我开始努力学习,利用课余的时间学习单片机的相关知识,成绩从刚刚转来新专业的第80名,到现在的年纪第5,这之间的辛酸和一个个寂寞的夜晚,也许只有我自己才知道。
从那之后,凡是有关电子的相关竞赛我都积极参加,从国防科大举办的电子设计大赛,到后来的TI杯电子设计大赛。
也就是这个暑假,让我第一次了解了TI,虽然之前用过很多的芯片都是TI的,但是对TI从来也没有一个比较全面的了解,包括他的企业文化,MCU的种类以及其他一些模拟器件等等。
当我拿到Launchpad的板子时,我那个爱不释手,感觉她实在是太美了,这是一种艺术,是科技所带来的无穷魅力。于是整个暑假,我和同学都泡在学校的实验室里。
记得刚开始的时候,看着长达700多页的全英文版的User’s Guide头脑发晕,完全没有看下去的冲动,然后上网找视频,找教程,可是看了一些视频后,发现自己还是什么都不懂,然后又很失望,最后终于下定决心,就算再难,就算是一个一个单词的查,我也要要把User’s Guide研究透彻。现在想来,当初那个决定是多么的明智。
其实很多事情,当你跨出了第一步,你就成功了一半。
从刚开始连BIT0都不知道是什么意思,然后去头文件里使劲的找,自己的想,到后来了解了寄存器的基本操作方法,然后一步一步的,理解越来越深,对User’s Guide的大体框架也越来越熟悉,于是我开始慢慢有了感觉,这种感觉是很奇妙的,你感觉自己一下子成为了巨人,呵呵。
经历了刚开始的痛苦与挣扎后,后面的就是康庄大道了,我逐个逐个模块的学习,从模块的原理图,基本功能,到寄存器映射地址,位操作,一步一步的学习,然后再在Launchpad上实战演练一下,当你自己操作成功了一个模块后,OK,这个模块你就掌握了,这才发现原来学习单片机是件这么简单的事。
在掌握了Msp430的基本操作后,老师给我们布置了一些题目,什么可控波形发生器,数字滤波器,温度自动控制,可调增益放大器等,在实践中,让我对单片机以及一些模拟器件的选型和参数上有了很大的收获,在此也要感谢TI为广大的电子爱好者们提供免费的芯片样品,并且发货速度也很快,我和同学经常在实验室里开玩笑说,“TI就是有战略眼光,把握住了我们这一代,也就是把握住了未来市场!”
现在,我一直在朝着我梦想的方向前进,我现在正在学习ARM11,Corten-M3,M4等这些嵌入式的微处理器,学得越多,才发现自己还远远的不够,但是我现在很充实,不再像以前那样每天打游戏,那样迷茫,而是每天不断的学习,不断的参加各种大赛来提高自己。
我现在更加坚定了我的人生目标,那就是成为一名卓越的电子工程师,成为像乔布斯一样,用科技改变世界的人,并一直朝着那个方向大步前行。
我要感谢TI,你就像是我的领路人,带我一路欣赏电子世界沿途灿烂的风景,最后带我找到了我人生的理想彼岸。此刻我想到一句话,“梦里寻他千百度,蓦然回首,那人却在灯火阑珊处。”这句话送给我的引路人TI公司,送给我那一直埋藏在角落,却最终让我收获的理想!

By:中南大学电子信息1003
邹佳池
2012.10.30

相关帖子

沙发
zoujiachi|  楼主 | 2012-10-30 10:52 | 只看该作者

/***************************************************
最后再附上一个最近做的数控直流电源的源代码,希望大家能一起互相学习:)
***************************************************/

#include <msp430g2452.h>
/********************************************
  * TLC5615:
   DIN:P1.1   SCLK:P1.2  CS:P1.0
   74LS48
   A:P1.4  B:P1.5  C:P1.6  D:P1.7
   74LS138
   A:P2.0  B:P2.1  C:P2.6
     按键:
   key1:P2.2  key2:P2.3 key3:P2.4 key4:P2.5
*********************************************/

int b[4];
int *pb = &b[0];
int dat = 0;
int time = 0;
int Buff = 0;

//DIN:P1.1        SCLK:P1.2        CS:P1.0
#define DIN_SET                BIT1
#define DIN_CLC           ~BIT1
#define SCLK_SET        BIT2
#define SCLK_CLC   ~BIT2
#define CS_SET            BIT0
#define CS_CLC           ~BIT0

void delay_ms(int tt)
{
        for(tt*=500;tt>0;tt--)
        {
                _nop();
        }
}

/*******************************
  *                函数名:Clock_Init
  *                功能:初始化时钟
  *                参数:无
  ******************************/
void Clock_Init(void)
{
        DCOCTL |= CALDCO_1MHZ;
        BCSCTL1 |= CALBC1_1MHZ;                //初始化DCO时钟频率为 1MHz
}

/*******************************
  *                函数名:IO_Init
  *                功能:初始化IO口
  *                参数:无
  ******************************/
void IO_Init(void)
{
        P1DIR |= 0xFFF7;        //P1口所有管脚设为输出模式(除了P1.3,因为P1.3外接了上拉电阻作为S2)
        P1OUT &= 0x0000;        //复位IO端口
        P2SEL &= ~BIT6;                //将P2.6设置为通用IO输入
        P2DIR |= BIT0 + BIT1 +BIT6;                //P2口 0,1,6设为输出模式
        P2OUT &= 0x0000;        //复位IO端口
        P2DIR &= 0x00C3;        //P2口2,3,4,5设置为输入模式
        P2REN |= BIT2 + BIT3 + BIT4 + BIT5;        //设置为上拉输入模式
        P2OUT |= BIT2 + BIT3 + BIT4 + BIT5;
}

/*******************************
  *                函数名:Key_Scan
  *                功能:按键扫描
  *                参数:无
  *                返回值:z
  *                z=1:P2.2被按下  “+”
  *                z=2:P2.3被按下  “-”
  *                z=3:P2.4被按下   “操作位选择”
  *                z=4:P2.5被按下   “确认”
  ******************************/
int Key_Scan(void)
{
        int z = 0;
        if(!(P2IN&BIT2))        //P2.2被按下
        {
                delay_ms(5);        //延时消抖
                if(!(P2IN&BIT2))//确实被按下
                {
                        while(!(P2IN&BIT2));        //松手检测
                        z = 1;
                }
        }
        if(!(P2IN&BIT3))        //P2.3被按下
        {
                delay_ms(5);        //延时消抖
                if(!(P2IN&BIT3))//确实被按下
                {
                        while(!(P2IN&BIT3));        //松手检测
                        z = 2;
                }
        }
        if(!(P2IN&BIT4))        //P2.4被按下
        {
                delay_ms(5);        //延时消抖
                if(!(P2IN&BIT4))//确实被按下
                {
                        while(!(P2IN&BIT4));        //松手检测
                        z = 3;
                }
        }
        if(!(P2IN&BIT5))        //P2.5被按下
        {
                delay_ms(5);        //延时消抖
                if(!(P2IN&BIT5))//确实被按下
                {
                        while(!(P2IN&BIT5));        //松手检测
                        z = 4;
                }
        }
        return z;
}

/**********************************
  *                函数名:Flicker
  *                功能:当设置时闪烁选中位
  *                参数:*pointer:指向所选中位
  *                          array[]:数据参数
  *                返回值:无
  **********************************/
//P2.6为C  闪烁控制位
void Flicker(int *pointer,int array[])
{
        int i;
        int tmp = 0;
        for(i = 0;i<4;i++)
        {
                if(pointer == &array[0])                //第一位闪烁
                {
                        if(tmp == 0)
                        {
                                if(time<15)
                                {
                                        P2OUT |= BIT6;
                                        time++;
                                }
                                else
                                {
                                        if(time<30)
                                        {
                                                P2OUT &= ~BIT6;
                                                time++;
                                        }
                                        else time = 0;
                                }
                        }
                        else
                        {
                                P2OUT &= ~BIT6;                //若不是闪烁位  则拉低138 C 是数码管段选选通
                        }
                        if(tmp%2)                                //控制段选输出
                        {
                                P2OUT |= BIT0;                //138 A
                        }
                        else
                        {
                                P2OUT &= ~BIT0;
                        }
                        if(tmp/2)
                        {
                                P2OUT |= BIT1;                //138 B
                        }
                        else
                        {
                                P2OUT &= ~BIT1;
                        }
                        tmp++;
                        if(tmp>3)tmp = 0;
                }

                else if(pointer == &array[1])
                {
                        if(tmp == 1)
                        {
                                if(time<15)
                                {
                                        P2OUT |= BIT6;
                                        time++;
                                }
                                else
                                {
                                        if(time<30)
                                        {
                                                P2OUT &= ~BIT6;
                                                time++;
                                        }
                                        else time = 0;
                                }
                        }
                        else
                        {
                                P2OUT &= ~BIT6;
                        }
                        if(tmp%2)
                        {
                                P2OUT |= BIT0;
                        }
                        else
                        {
                                P2OUT &= ~BIT0;
                        }
                        if(tmp/2)
                        {
                                P2OUT |= BIT1;
                        }
                        else
                        {
                                P2OUT &= ~BIT1;
                        }
                        tmp++;
                        if(tmp>3)tmp = 0;
                }

                else if(pointer == &array[2])
                {
                        if(tmp == 2)
                        {
                                if(time<15)
                                {
                                        P2OUT |= BIT6;
                                        time++;
                                }
                                else
                                {
                                        if(time<30)
                                        {
                                                P2OUT &= ~BIT6;
                                                time++;
                                        }
                                        else time = 0;
                                }
                        }
                        else
                        {
                                P2OUT &= ~BIT6;
                        }
                        if(tmp%2)
                        {
                                P2OUT |= BIT0;
                        }
                        else
                        {
                                P2OUT &= ~BIT0;
                        }
                        if(tmp/2)
                        {
                                P2OUT |= BIT1;
                        }
                        else
                        {
                                P2OUT &= ~BIT1;
                        }
                        tmp++;
                        if(tmp>3)tmp = 0;
                }

                else if(pointer == &array[3])
                {
                        if(tmp == 3)
                        {
                                if(time<15)
                                {
                                        P2OUT |= BIT6;
                                        time++;
                                }
                                else
                                {
                                        if(time<30)
                                        {
                                                P2OUT &= ~BIT6;
                                                time++;
                                        }
                                        else time = 0;
                                }
                        }
                        else
                        {
                                P2OUT &= ~BIT6;
                        }
                        if(tmp%2)                                    //控制数码管段选,闪烁
                        {
                                P2OUT |= BIT0;
                        }
                        else
                        {
                                P2OUT &= ~BIT0;
                        }
                        if(tmp/2)
                        {
                                P2OUT |= BIT1;
                        }
                        else
                        {
                                P2OUT &= ~BIT1;
                        }
                        tmp++;
                        if(tmp>3)tmp = 0;
                }

                if(b[i]&BIT3)                //将array[i]转化为二进制输出,经BCD译码,送数码管显示
                {
                        P1OUT |= BIT7;
                }
                else
                {
                        P1OUT &= ~BIT7;
                }
                if(b[i]&BIT2)
                {
                        P1OUT |= BIT6;
                }
                else
                {
                        P1OUT &= ~BIT6;
                }
                if(b[i]&BIT1)
                {
                        P1OUT |= BIT5;
                }
                else
                {
                        P1OUT &= ~BIT5;
                }
                if(b[i]&BIT0)
                {
                        P1OUT |= BIT4;
                }
                else
                {
                        P1OUT &= ~BIT4;
                }
                delay_ms(1);
        }
}

/**************************************
  *                 函数名:Set
  *                 功能:根据按键的值来执行相应的设置
  *                 参数:        keynum:按键的返回值
  *                 返回值:返回电压值 供DIsp函数显示
***************************************/
int Set(int keynum)
{
        b[0] = dat/1000;
        b[1] = dat%1000/100;
        b[2] = dat%100/10;
        b[3] = dat%10;
        if(keynum)                //有键按下
        {
                unsigned char flag = 1;
                while(flag)
                {
                        switch(keynum)
                        {
                                case 1:
                                {
                                        (*pb)++;
                                        if(*pb>9)*pb = 0;
                                }break;
                                case 2:
                                {
                                        (*pb)--;
                                        if(*pb<0)*pb = 9;
                                }break;
                                case 3:
                                {
                                        pb++;
                                        if(pb>&b[3])pb = &b[0];
                                }break;
                                case 4:
                                {
                                        flag = 0;        //若按下确认键 跳出循环
                                }break;
                                default:
                                        break;
                        }
                        keynum = 0;
                        keynum = Key_Scan();
                        Flicker(pb,b);
                }
        }
        dat = b[0]*1000+b[1]*100+b[2]*10+b[3];
}

/****************************************
  *                函数名:LED_Disp
  *                功能:显示设定输出电压值
  *                参数:dat:输入的电压设定参数
  *                        若 dat = 512;表示设定输出为 5.12V
  *                返回值:
  *                     将设定的温度换算成DA的数据,输入DA
  ****************************************/
int LED_Disp(int dat)
{
        int a[4],tmp = 0;
        int i;
        a[0] = dat/1000;
        a[1] = dat%1000/100;
        a[2] = dat%100/10;
        a[3] = dat%10;

        for(i = 0;i<4;i++)
        {
                if(tmp%2)                                   //控制数码管段选
                {
                        P2OUT |= BIT0;
                }
                else
                {
                        P2OUT &= ~BIT0;
                }
                if(tmp/2)
                {
                        P2OUT |= BIT1;
                }
                else
                {
                        P2OUT &= ~BIT1;
                }
                tmp++;
                if(tmp>3)tmp = 0;

                if(a[i]&BIT3)                //将a[i]转化为二进制输出,经BCD译码,送数码管显示
                {
                        P1OUT |= BIT7;
                }
                else
                {
                        P1OUT &= ~BIT7;
                }
                if(a[i]&BIT2)
                {
                        P1OUT |= BIT6;
                }
                else
                {
                        P1OUT &= ~BIT6;
                }
                if(a[i]&BIT1)
                {
                        P1OUT |= BIT5;
                }
                else
                {
                        P1OUT &= ~BIT5;
                }
                if(a[i]&BIT0)
                {
                        P1OUT |= BIT4;
                }
                else
                {
                        P1OUT &= ~BIT4;
                }
                delay_ms(2);
        }
        Buff = (float)dat/1000*1024;                //将输入的数字温度值转化为送给DA的数据值
        if(Buff > 1023) Buff = 1023;
        return Buff;
}

/*******************************
  *                函数名:Send_Data
  *                功能:写入10位数据
  *                参数:dat:10位数据
  ******************************/
void Send_Data(int dat)
{
        int i,tmp = 0x0200;
        P1OUT &= CS_CLC;                        //使能
        for(i = 0;i<10;i++)
        {
                if(dat&tmp)
                {
                        P1OUT |= DIN_SET;
                }
                else
                {
                        P1OUT &= DIN_CLC;
                }
                tmp>>=1;
                P1OUT |= SCLK_SET;                //将数据写入
                P1OUT &= SCLK_CLC;
        }
        P1OUT |= DIN_SET;                        //写入两个填充位
        P1OUT |= SCLK_SET;
        P1OUT &= SCLK_CLC;
        P1OUT |= DIN_SET;
        P1OUT |= SCLK_SET;
        P1OUT &= SCLK_CLC;

        P1OUT |= CS_SET;                        //挂起
}


void main(void)
{
        int tmp = 0,D = 0;
        WDTCTL = WDTPW + WDTHOLD;        //关闭看门狗
        Clock_Init();
        IO_Init();
        int i = 0;
        P2OUT &= ~BIT6;

        for(;;)
        {
                tmp = Set(Key_Scan());
                LED_Disp(tmp);
                Send_Data(LED_Disp(tmp));
        }
       
}

使用特权

评论回复
板凳
zoujiachi|  楼主 | 2012-10-31 21:52 | 只看该作者
本帖最后由 zoujiachi 于 2012-10-31 21:54 编辑

file:///F:/DCIM/Camera/IMG_20121031_133555.jpg

IMG_20121031_133555.jpg (880 KB )

IMG_20121031_133555.jpg

使用特权

评论回复
地板
zoujiachi|  楼主 | 2012-10-31 21:52 | 只看该作者
本帖最后由 zoujiachi 于 2012-10-31 21:57 编辑

F:/DCIM/Camera/IMG_20121031_133555.jpg

IMG_20121031_134826.jpg (1008 KB )

IMG_20121031_134826.jpg

IMG_20121031_134826.jpg (1008 KB )

IMG_20121031_134826.jpg

IMG_20121031_134837.jpg (1.08 MB )

IMG_20121031_134837.jpg

IMG_20121031_134852.jpg (1.02 MB )

IMG_20121031_134852.jpg

IMG_20121031_134903.jpg (1 MB )

IMG_20121031_134903.jpg

使用特权

评论回复
5
huli_2012| | 2012-10-31 21:58 | 只看该作者
楼主不错,有前途,建议毕业去军工单位研究先进武器,为早日收复钓鱼钓做准备

使用特权

评论回复
6
zoujiachi|  楼主 | 2012-11-4 19:35 | 只看该作者
5# huli_2012
多谢了,我会努力的  :lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

15

帖子

0

粉丝