久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

學習單片機的日記

作者:佚名   來源:本站原創   點擊數:  更新時間:2013年10月21日   【字體:
   經歷了大一上學期我覺得大學其實好壞不在于學校而是在于個人,學校之間的差距只是在于可利用的教學資源以及環境,最重要的還是自己。個人覺得我大一要學的課程真正有用的不多,現在我是電子信息工程的一名大學生,大一所學課程有高數,大學物理,英語,體育,近代史,思修,大學物理實驗,電路分析,C語言。呵呵,只有C語言,電路,高數,英語有用。其他科目我只是應付下考試,不會真心去學,因為沒有興趣。興趣是最好的老師,沒有它我覺得做什么事情都毫無意義,這就是我這個人的怪癖。利用所有閑下來的時間我準備學習單片機,單片機雖然是大二下學期的內容但我覺得它至關重要。
   為什么我們要學習單片機呢?他是個什么東西呢?單片機就是一塊集成芯片,但這塊集成芯片具有一些特殊的功能,而它的功能的實現要靠我們使用者自己來編程完成。我們編程的目的就是控制這塊芯片的各個引腳在不同時間輸出不同的電平(高電平或低電平),進而控制與單片機各個引腳相連接的外圍電路的電氣狀態。編程時我們就需要C語言,這是最快捷的編程方法。學習單片機不要一開始就翻書死學,學習他的內部結構,這樣你怎么也學不好,而是要一開始就編程,在編程的過程中了解到它的內部結構,所以說C語言的學習是很關鍵的。很多同學都會說C語言好無聊,你是你不懂他最后有什么用處,只要你在學習C語言的過程中一同學習單片機,你會發現很多樂趣與成就感,因為興趣是最好的老師。并不要害怕單片機,不要以為需要很多知識才可以駕馭它,它雖然關系到數字電路以及模擬電路的知識(大二上學期學),但是涉及的還是不多,最主要的還是C語言的運用。忘了說單片機的前景,現在所有電子產品與設備幾乎全都涉及到單片機,經常是核心,所以學好它對就業以及未來有很好的發展。
   那如何來學習單片機呢? 學習單片機之前你需要一塊開發板,51單片機開發板。在淘寶上就可以買到,一開始不要買有很多系統的,什么嵌入式系統,AVR,ARM等等。咱們先學好51單片機,不急不急。價格在100左右就行,我買的開發板是東流電子的開發板,163(包括了彩屏,以及AVR),大家可以試試郭天祥開發板,不錯的。大家買完開發板肯定有附帶光盤教學視頻資料,但我還建議可以看網上的郭天祥十天學習單片機的視頻,講述的很不錯。
    大家利用好現在的大學時光,它不是一個娛樂輕松的場所,而是為將來打拼做準備的場所。有很多人會說對自己專業沒興趣,那我勸告下趕快去轉專業,別浪費時光。還有你以為誰天生就對什么有興趣,那都是要靠自己探索培養的,要多多想想自己的將來,四年是學習的時間,你可以讓這四年讓你變成金。還有說下我這個專業的同志們,電子信息專業是很好就業的,哪里沒有電子的身影,但學好才可以成功。
  單片機的學習內容;
  1首先你要掌握keil軟件的運用,它是編程的環境 2.學習以下實驗(流水燈的控制,數碼管的顯示原理和實現鍵盤檢測原理,AD工作原理定時器計數器,中斷系統,串行口運用,等等)這些郭天祥都會講到。今天寫到這里,我去學單片機了。。。。。。
三月30日:今天是利用定時器0和1以及中斷系統控制數碼管以及流水燈;
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P3^7;
sbit wela=P2;
uchar temp,t0,t1,flag1,bai,shi,ge,flag;
uint shu;
void init();
void delay(uint z);
void display(uchar aa,uchar bb,uchar cc,uchar bai ,uchar shi,uchar ge);

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

 
void main()
{  
  init();
  while(1)
   {   
       if(flag1!=1)
       display(7,6,5,bai,shi,ge);
       else
        display(16,17,18,18,19,20);

 
   
    }
  
}
void init()
{   
   shu=432;
   temp=0xfe;
   P0=temp;
   TMOD=0x11;
   TH0=0x4c;
   TL0=0x00;
   TH1=0x4c;
   TL1=0x00;   
   EA=1;
   ET0=1;
   ET1=1;   
   TR0=1;
   TR1=1;

 

 
}
void timer0() interrupt 1
{
    TH0=0x4c;
    TL0=0x00;
    t0++;
    if(flag!=1)
   {
    if(t0==10)
    {
       t0=1;
       temp=_crol_(temp,1);
       P0=temp;
    }
   }
   else
   {
      if(t0%4==0)
          {
               P0=~P0;
               if(t0==60)
               TR0=0;
               P0=0xff;
                flag1=1;
           }
    }

 
}

 
void timer1() interrupt 3
{
    TH1=0x4c;
    TL1=0x00;
    t1++;
    if(t1=2)
    {   
        t1=0;
        shu--;
        bai=shu/100;
        shi=shu%100/10;
        ge=shu%10;
        if(shu==398)
         {
             TR0=0;
             TH0=0x4c;
             TL0=0x00;
             TR0=1;
             flag=1; 
             t0=0;  
             P0=0xff;   
             TR1=0;
          }
    }
}
void display(uchar aa,uchar bb,uchar cc,uchar bai ,uchar shi,uchar ge)

 
{
   dula=1;
     P0=table[aa];
     dula=0;
     P2=0;
     delay(5);

 
     dula=1;
     P0=table[bb];
     dula=0;
     P2=1;
     delay(5);
     
     dula=1;
     P0=table[cc];
     dula=0;
     P2=2;
     delay(5);
 
    
     dula=1;
     P0=table[bai];
     dula=0;
     P2=3;
     delay(5);

 
     dula=1;
     P0=table[shi];
     dula=0;
     P2=4;
     delay(5);
     
     dula=1;
     P0=table[ge];
     dula=0;
     P2=5;
     delay(5);
    

 

 
}

 
void delay(uint z)
{
   uint x,y;
    for(x=z;x>0;x--)
      for(y=110;y>0;y--);

 
}


 

 
三月31日:今天學完矩陣鍵盤,終于會編了,弄了好久。。。。(今天開始記錄思想,幫我加強記憶并自己再理解一遍)

 
#include <reg52.h>                                                                      /reg52.h是頭文件,包含了下列關鍵字
#define uint unsigned int                                                              /定義無符號型整數
#define uchar unsigned char                                                        /定義無符號型字符型
sbit dula=P3^7;                                                                             /數碼管的段是由P3.7引腳控制,位聲明下
sbit wela=P2;                                                                                /數碼管的位選是由P2引腳控制,東流電子的板子位選是由譯碼器控制
uchar temp,num;

 
void delay(uint z);                                                                        /延時函數聲明

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

 
void main()                                                                              /主函數
{  
    dula=1;                                                                              /首先將數碼管不顯示,段選是由鎖存器控制,將鎖存器賦值1打開鎖存器,    
    P0=0;                                                                               / 往里面輸入數據再賦值0關閉鎖存器
    dula=0;
    P2=0;                                  /我的板子的數碼管是由譯碼器控制,通過向P2口輸入不同的值進而控制不同數碼管,0代表第一個數碼管
  while(1)                                          /主循環,while語句當()里的值為1是一直循環{  }里的語句,不為1則跳出語句
   {   
        P1=0xfe;                           /如上圖所示P1指的是第一行鍵盤,矩陣鍵盤的檢測是給除了第一行賦值0外全部賦值為1,也就是111111       
        temp=P1;                          10,再將P1值賦給temp,讓后temp和0xf0(11110000)與(邏輯與)原理是:先掃描第一行,將其他端
        temp=temp&0xf0;    /口賦值1,當有按鍵按下時有一列為0,列是在高四位如果是第一個鍵按下就是0111 0111和0xf0與下就不為0xf0
        if(temp!=0xf0)                     /如果temp不為0xfo(就相當于有按鍵被按下)
     {   
          delay(10);                                           延時消抖
          temp=P1;                                            再將P1值賦給temp
          temp=temp&0xf0;                               再和0xf0邏輯與
        if(temp!=0xf0)                                       再判斷是否按鍵
         { 
             temp=P1;                                        將P1值重新賦給temp 
        switch(temp)                                         swith語句是多條件語句,()中temp是表達式,case(表達式):對應語句,。break是停止
            {                                                       switch語句跳出
               
                case 0xee:num=1;                       如果是按第一個鍵就在數碼管上顯示0(為啥不是1?下面解釋)
                   break;
                case 0xde:num=2;                       如果按第一行第二個鍵在數碼管上顯示1
                   break;
                case 0xbe:num=3;
                   break;
                case 0x7e:num=4;
                   break;
             }
    dula=1;
    P0=table[num-1];                                 數碼管顯示[ ]中是上面聲明數組中的值,num-1對應數組的值(num為1則代表數組的0)
    dula=0;
         }
     }
        P1=0xfd;
        temp=P1;                                           以下就是不同行數的檢測,檢測第二行就給P1.2賦值0,改變下P1的值和num值就可以進行第
        temp=temp&0xf0;                           二行以及第三第四行的鍵盤是否按下
        if(temp!=0xf0) 
     {   
          delay(10);
          temp=P1;
          temp=temp&0xf0;
        if(temp!=0xfe)
         {
             temp=P1; 
        switch(temp)
            {   
               
                case 0xed:num=5;
                   break;
                case 0xdd:num=6;
                   break;
                case 0xbd:num=7;
                   break;
                case 0x7d:num=8;
                   break;
             }
    dula=1;
    P0=table[num-1];
    dula=0;
          }
     }
        P1=0xfb;
        temp=P1;
        temp=temp&0xf0;
        if(temp!=0xf0) 
     {   
          delay(10);
          temp=P1;
          temp=temp&0xf0;
        if(temp!=0xfe)
         {
             temp=P1; 
        switch(temp)
            {   
               
                case 0xeb:num=9;
                   break;
                case 0xdb:num=10;
                   break;
                case 0xbb:num=11;
                   break;
                case 0x7b:num=12;
                   break;
             }
    dula=1;
    P0=table[num-1];
    dula=0;
          }
    }
        P1=0xf7;
        temp=P1;
        temp=temp&0xf0;
        if(temp!=0xf0) 
     {   
          delay(10);
          temp=P1;
          temp=temp&0xf0;
        if(temp!=0xfe)
         {
             temp=P1; 
        switch(temp)
            {   
               
                case 0xe7:num=13;
                   break;
                case 0xd7:num=14;
                   break;
                case 0xb7:num=15;
                   break;
                case 0x77:num=16;
                   break;
             }
    dula=1;
    P0=table[num-1];
    dula=0;
          }
     }

 
  }
}
  
 

 
void delay(uint z)                                         延時函數
{
   uint x,y;
    for(x=z;x>0;x--)
      for(y=110;y>0;y--);

 
}
啊哈,清明結束,把串口和AD轉換學完了,但是都是晚上學完的,沒網絡寫,那兩個以后復習的時候再補上,花了兩天學完液晶。話說最近課還真緊,剩下課余時間來完成吧。看大三師兄們都在學一種芯片,STM32(一種高性能的ARM)芯片,比51單片機先進多了,好想學啊,但是我一定要先精通51,學完我要做很多基于51的產品,學會制作PCB板,每天慢慢試著學模電和數電,好興奮啊。加油了!!
   液晶是什么東西呢?大家也都懂得,他是一種高分子材料,今天我就簡單的介紹下1602液晶的程序控制
1602液晶有16個引腳每個引腳都有自己的作用 ,突然覺得要介紹好多東西,有線沒錢了,無線圖片上傳不了,以后再補上思想
 
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcden=P2^7;      
 sbit lcdrs=P2^5;
 sbit rw=P2^6;
 uchar code  table[]="Oh! my baby!";
uchar code table1[]="WWW.TXMCU.COM";
uchar num,num1; 
  void delay(uint z)
  {
         uint x,y;
              for(x=z;x>0;x--)
                    for(y=110;y>0;y--);
  }
  void write_com(uchar com)
         {
 
         lcdrs=0;
rw=0;  
         P0=com;
        delay(5);
         lcden=1;
         delay(5);
        lcden=0;
       }
         void write_data(uchar date)
        {
 
        lcdrs=1;
rw=0;
        P0=date;
        delay(5);
         lcden=1;
         delay(5);
         lcden=0;
        }
         void init()
       {
         
         lcden=0;
         write_com(0x38);
         write_com (0x0e);
         write_com(0x06);
write_com(0x01);
write_com(0x80+0x10);
        
      }
          void main()
      {
          init();
 for(num=0;num<12;num++)
  {
 write_data(table[num]);
 delay(5);  
        }
 
write_com(0x80+0x53);
for(num=0;num<13;num++)
  {
 write_data(table1[num]);
 delay(5);  
        } 
for(num=0;num<16;num++)
{
  write_com(0x18);
  delay(20);
}
 
   while(1);
      }
今天4月14號,今天看了I^2C總線,感覺挺難的,好不容易編出來個程序但是竟然無法執行,唉。。。最近覺得芯片時序圖對于編程很重要,慢慢來吧,太晚了,今天也沒時間寫思想了
 
#include <reg52.h>
#define uchar unsigned char
sbit sda=P3^6;
sbit scl=P1^5;
uchar a;
void delay( )
{ ;; }
 void delay1(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}

 
void start()
{
  sda=1;
  delay();
  scl=1;
  delay();
  sda=0;
  delay();
   
}
void stop()
{
   sda=0;
   delay();
   scl=1;
   delay();
   sda=1;
   delay();
}
void respons()
{
   uchar i;
   scl=1;
   delay();
   while((sda==1)&&(i<250))i++;
   scl=0;
   delay();
}
void init()
{
  sda=1;
  delay();
  scl=1;
  delay();
}
void write_byte(uchar date)
{
    uchar i,temp;
temp=date;

 

 
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
   delay();
sda=CY;
delay();
scl=1;
delay();
// scl=0;
     //   delay();
}
scl=0;
delay();
sda=1;
delay();
}

 

 
uchar read_byte()
{
   uchar i,j,k;
   scl=0;
   delay();
   sda=1;
   delay();
   for(i=0;i<8;i++)
   {
      scl=1;
 delay();
 if(sda==1)
    j=1;
 else 
    j=0;
      k=(k<<1)|j;
 scl=0;
 delay();
   }
    return k;
}
 

 
void main()
{
   init();
   start();
   write_byte(0xa0);
   respon();
   write_byte(3);
   respon();
   write_byte(0xfe);
   respons();
   stop();

 
   delay1(100);
   start();
   write_byte(0xa0);
   respon();
   write_byte(3);
   respon();
   start();
   write_byte(0xa1);
   respon();
   a=read_byte();
   stop();
   P0=a+5;
   while(1);

 
}
關閉窗口

相關文章

主站蜘蛛池模板: 国外成人在线视频网站 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 国产精品久久久久久久久久久久午夜片 | 欧美精品一区二区三区在线播放 | 精品福利一区 | av免费看在线 | 成人免费视频网站在线看 | 久久婷婷国产香蕉 | 日韩二 | 日韩一级欧美一级 | 国产精品国产精品 | 米奇7777狠狠狠狠视频 | 成人国产精品久久久 | 久久精品国产一区二区三区 | 天天看天天操 | 国产在线精品一区二区三区 | 夜夜摸夜夜操 | 激情国产视频 | 国产精品777一区二区 | 国产视频久久 | 日韩av三区| 亚洲 欧美 另类 日韩 | 日韩欧美网 | 成人免费看片 | 日本三级在线视频 | 亚洲国产精品自拍 | 狠狠热视频 | 91精品国产综合久久精品图片 | 99日韩| 99视频免费播放 | 国产一区二区欧美 | 雨宫琴音一区二区在线 | 欧美日韩一区二区三区在线观看 | 欧美aⅴ在线观看 | 免费a v网站 | 日韩在线一区二区三区 | 熟女毛片 | 91精品国产91久久综合桃花 | 国产乱码精品一区二区三区中文 | 久久亚洲欧美日韩精品专区 | 黄色网址免费在线观看 |