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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
樓主: xiekailun
打印 上一主題 下一主題
收起左側

c語言很差 可以學單片機嗎

  [復制鏈接]
521#
ID:414357 發表于 2018-10-23 22:58 | 只看該作者
可以的,相信自己
回復

使用道具 舉報

522#
ID:414349 發表于 2018-10-23 22:59 | 只看該作者
其實在學校理論學習和應用中實踐學習完全不同,實踐中學習比較容易上手,遇到問題就查,慢慢就掌握了
回復

使用道具 舉報

523#
ID:413530 發表于 2018-10-23 23:37 | 只看該作者
可以學的,我也是c語言基礎不好,學了這么久發現單片機編程和c語言還是有很大差別的,學單片機主要是各種芯片和模塊的使用方法和編程方法,但毋庸置疑的是C語言學好了的話學起來輕松很多,建議先看郭天祥的教學視頻比較基礎,成熟后可以看看吳劍鷹的。
回復

使用道具 舉報

524#
ID:414385 發表于 2018-10-24 01:05 來自手機 | 只看該作者
c語言事基礎,你可以帶有興趣的去學習,平時找一些小程序看看,單片機制作也會帶來興趣
回復

使用道具 舉報

525#
ID:414432 發表于 2018-10-24 09:07 | 只看該作者
慢慢來 萬事開頭難 到后面就不難了
回復

使用道具 舉報

526#
ID:413467 發表于 2018-10-24 09:30 | 只看該作者
可以的,可以多看看C語言這反面的書
回復

使用道具 舉報

527#
ID:400683 發表于 2018-10-24 09:41 | 只看該作者
可以學,一邊學一邊不上
回復

使用道具 舉報

528#
ID:414461 發表于 2018-10-24 09:58 來自手機 | 只看該作者
感覺好像沒有必然聯系,可以慢慢學,不斷進步
回復

使用道具 舉報

529#
ID:414462 發表于 2018-10-24 10:01 | 只看該作者
放棄吧,也是需要天賦的
回復

使用道具 舉報

530#
ID:414510 發表于 2018-10-24 11:04 | 只看該作者
可以,先從基本的硬件電路了解,軟件后續跟進
回復

使用道具 舉報

531#
ID:414432 發表于 2018-10-24 11:06 | 只看該作者
C語言入門就可以 基礎的一定要學好  單片機對c的要求不高
回復

使用道具 舉報

532#
ID:414520 發表于 2018-10-24 11:09 | 只看該作者
邊學邊用,用多了就會了
回復

使用道具 舉報

533#
ID:414590 發表于 2018-10-24 14:06 | 只看該作者
c語言很簡單的,常用語句就那么幾個。很快就能學會,如果用匯編那就麻煩了,開發效率很低,不過你要代碼優化,那就要學匯編了。一般用不著。
回復

使用道具 舉報

534#
ID:414604 發表于 2018-10-24 14:07 | 只看該作者
C語言是單片機基礎
回復

使用道具 舉報

535#
ID:241273 發表于 2018-10-24 15:33 | 只看該作者
可以啊
回復

使用道具 舉報

536#
ID:324786 發表于 2018-10-24 16:02 | 只看該作者
學的差可以學,學不好就算了。C只是一門語言,但是總是看到有人說學不好C可以學其他的,怎么說,這是一種思維,一門學不好,都學不好。我說的
回復

使用道具 舉報

537#
ID:414732 發表于 2018-10-24 16:49 | 只看該作者
什么都有個開始
回復

使用道具 舉報

538#
ID:413632 發表于 2018-10-24 18:21 | 只看該作者
當然可以了,只要堅持就會學會,我沒學過C語言就開始學習使用單片機,但是你要有一本C語言資料書可以查,查來直接用,漸漸地你就學會C語言了
回復

使用道具 舉報

539#
ID:414809 發表于 2018-10-24 18:54 | 只看該作者
啥也別嘮了,給你看一下最簡單的六位時鐘的一部分程序
#include <reg52.H>          //為了布線方便用到了P4口,故包含了STC專用的頭文件,可以在STC-ISP軟件中下載
#define LEDPORT P0
#define uchar unsigned char
#define uint unsigned int

sbit D1=P3^3;
sbit D2=P3^4;
sbit D3=P3^5;
sbit D4=P3^6;
sbit D5=P3^7;
sbit D6=P4^0;
sbit LED1=P2^5;
sbit LED2=P2^6;

sbit CLK =P2^1;                                         
sbit IO   =P2^2;
sbit RST =P2^3;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;

unsigned char hour,min,sec;                //小時、分鐘、秒
bit rev_start,rev_stop;                                   //GPS接收開始、結束標志位
unsigned char code tab[ ]={0xA0,0xBE,0x64,0x2C,0x3A,0x29,0x21,0xBC,0x20,0x28,0xFF};//0-9,滅

unsigned char  buf[10];         //GPS數據接收緩沖

unsigned char  irtime;//紅外用全局變量,用于計算2個下降沿之間的時間
bit decode_ok,irok;
static unsigned char ircode[4];
unsigned char irdata[33];

uchar set,temp,dot;
bit flag,test;                                          
uint cnt;


void Timer_Init()
{
        TMOD=0x22;
        TH0=0x00; //重載值
        TL0=0x00; //初始化值
        ET0=1;    //開中斷
        TR0=1;
        IT0 = 1;   //指定外部中斷0下降沿觸發,INT0 (P3.2)
        EX0 = 1;   //使能外部中斷
        TL2 = 0xCD;                //設置定時初值
        TH2 = 0xF8;                //設置定時初值
        RCAP2L = 0xCD;                //設置定時重載值
        RCAP2H = 0xF8;                //設置定時重載值
        ET2=1;
        TR2=1;        
        
        TH1 = 0xFD;                //9600波特率的初值
    TL1 = TH1;                //9600波特率的初值
        TR1 = 1;  
        
        SCON = 0x50;        //使用串行工作方式1,10位異步收發8位數據,波特率可變(由T1的溢出率控制)
//        ES = 1;
        EA=1;
}

void inputbyte(unsigned char ucDa)
{
        unsigned char i;
        ACC = ucDa;
        for(i=8; i>0; i--)
        {
                IO = ACC0;                   //相當于匯編中的 RRC
                CLK = 1;
                CLK = 0;
                ACC = ACC >> 1;
        }
}

unsigned char outputbyte(void)
{
        unsigned char i;
        for(i=8; i>0; i--)
        {
        ACC = ACC >>1;                      //相當于匯編中的 RRC
        ACC7 = IO;
        CLK = 1;
        CLK = 0;
        }
        return(ACC);
}

void write(unsigned char ucAddr, unsigned char ucDa)
{
        RST = 0;
        CLK = 0;
        RST = 1;
        inputbyte(ucAddr);                    //地址,命令
        inputbyte(ucDa);                      //寫1Byte數據
        CLK = 1;
        RST =0;
}

unsigned char read(unsigned char ucAddr)
{
        unsigned char ucDa;
        RST = 0;
        CLK = 0;
        RST = 1;
        inputbyte(ucAddr);                    //地址,命令
        ucDa = outputbyte();                 //讀1Byte數據
        CLK = 1;
        RST =0;
        return(ucDa);
}

void DS1302_init()
{
        if(read(0xc1)!=0x82)  //如果1302掉電,寫入下面的初始值
        {
                write(0x8e,0x00);//關閉寫保護
                write(0x80,0x22); //設置秒
                write(0x82,0x22);//設置分鐘
                write(0x84,0x22); // 小時
                write(0x90,0xa5);//涓流充電
                write(0xc0,0x82);//掉電標志位
        }
}

void decode(void)//紅外碼值處理函數
{
  unsigned char i, j, k;
  unsigned char cord,value;

  k=1;
  for(i=0;i<4;i++)      //處理4個字節
     {
      for ( j=1; j<=8;  j++) //處理1個字節8位
         {
          cord=irdata[k];
          if(cord>7)//大于某值為1,這個和晶振有絕對關系,這里使用12M計算,此值可以有一定誤差
                    {
             value=value|0x80;
                        }
          else
                    {
             value=value;
                        }
          if(j<8)
                    {
                         value=value>>1;
                        }
           k++;
         }
     ircode[i]=value;
     value=0;     
     }
         if(ircode[2]==~ircode[3])
         decode_ok=1;//解碼完畢后標志位置1
     
}

void Display(unsigned char a,b,c)   //數碼管顯示
{
        static unsigned char i;
        LEDPORT=0xff;
        switch (i)
        {
                case 0: if(a/16) LEDPORT=tab[a/16]&dot; else LEDPORT=tab[10]&dot;D1=0;D2=D3=D4=D5=D6=1;        break;
                case 1: LEDPORT=tab [a%16];   D2=0;D1=D3=D4=D5=D6=1;    break;
                case 2: LEDPORT=tab [b/16];            D3=0;D1=D2=D4=D5=D6=1;        break;
                case 3: LEDPORT=tab [b%16];        D4=0;D1=D2=D3=D5=D6=1;        break;
                case 4: LEDPORT=tab [c/16];            D6=0;D1=D2=D3=D4=D5=1;        break;
                case 5: LEDPORT=tab [c%16];    D5=0;D1=D3=D4=D6=D2=1;        break;
        }
        i++;
        if(i==6)i=0;
}

void ir_work()
{
        if(ircode[2]==0x1e)
        test=!test;
        if(ircode[2]==0x05)
        {
                set++;
                if(set==4)
                set=0;
        }
                                          if(set==1)
                                                  {
                                                                  if(ircode[2]==0x02|ircode[2]==0x06)                                                //hour
                                                                {
                                                                 temp=(read(0x85)/16)*10+read(0x85)%16;
                                                                 temp++;if(temp==24)temp=0;
                                                                 write(0x84,(temp/10)*16+temp%10);
                                                                        
                                                                }
                                                                if(ircode[2]==0x08|ircode[2]==0x04)
                                                                {
                                                                        temp=(read(0x85)/16)*10+read(0x85)%16;
                                                                 temp--;if(temp==-1)temp=23;
                                                                 write(0x84,(temp/10)*16+temp%10);
                                                                }         
                                                  }

                                                  
                                                  if(set==2)                                                                         //min
                                                  {
                                                                  if(ircode[2]==0x02|ircode[2]==0x06)        
                                                                {
                                                                 temp=(read(0x83)/16)*10+read(0x83)%16;
                                                                 temp++;if(temp==60)temp=0;
                                                                 write(0x82,(temp/10)*16+temp%10);
                                                                        
                                                                }
                                                                if(ircode[2]==0x08|ircode[2]==0x04)
                                                                {
                                                                        temp=(read(0x83)/16)*10+read(0x83)%16;
                                                                 temp--;if(temp==-1)temp=59;
                                                                 write(0x82,(temp/10)*16+temp%10);
                                                                }         
                                                  }

                                                  if(set==3)                                                                         //sec
                                                  {
                                                                  if(ircode[2]==0x02|ircode[2]==0x06)        
                                                                {
                                                                 temp=(read(0x81)/16)*10+read(0x81)%16;
                                                                 temp++;if(temp==60)temp=0;
                                                                 write(0x80,(temp/10)*16+temp%10);
                                                                        
                                                                }
                                                                if(ircode[2]==0x08|ircode[2]==0x04)
                                                                {
                                                                        temp=(read(0x81)/16)*10+read(0x81)%16;
                                                                 temp--;if(temp==-1)temp=59;
                                                                 write(0x80,(temp/10)*16+temp%10);
                                                                }         
                                                  }
                                            decode_ok=0;        
}


void main()
{
        Timer_Init();
        DS1302_init();
        dot=0xff;
        flag=1;
        while(1)
        {                 
                        hour= read(0x85);
                        min = read(0x83);
                        sec  = read(0x81);
                        
                /*        if((hour==0x08)&&(min==0x00) )                         //可以設置為每天的某個時間打開GPS對一下時間再關掉,這里設置的是8:00
                        ES=1;
                        else
                        ES=0;*/
                        if(flag==1&&cnt>500)                                  //上電稍做延時再打開串口,防止數碼管顯示出錯
                        {
                                flag=0;
                                cnt=0;
                                ES=1;
                        }
               
               
                        if((rev_stop==1)&&(buf[1]=='M')&&(buf[2]=='C')&&(buf[3]==','))//如果接收到GPRMC        就把GPS接收到的時間寫入DS1302
                        {
                                          ES=0;
                                        hour= (buf [4]-0x30)* 16+ buf[5] -0x30;
                                        min=  (buf [6]-0x30)* 16+ buf[7]-0x30;
                                        sec=  (buf[8]-0x30)* 16+ buf[9]-0x30;
                                        hour=  hour / 16 * 10 + hour % 16;
                                        hour= (hour+8) % 24;        //UTC Time換算成北京時間
                                        hour=hour/10*16+hour%10;
                                        write(0x84,hour);
                                        write(0x82,min);
                                        write(0x80,sec);        
                                        ES=1;
                                        rev_stop=0;
                        }               

                        if( sec==  (buf[8]-0x30)* 16+ buf[9]-0x30)                                        //用左上角的小點顯示有無GPS信號
                        dot=0xdf;
                        else
                        dot=0xff;
                           
                        if(irok)                        //如果接收到正確的紅外信號后進行紅外處理
                        {   
                          decode();
                          irok=0;
                        }
                        
                        if(decode_ok)                  //如果解碼正確就進入調時程序
                        {
                                ir_work();
                        }
                        
                          if(test)                                                //需要時可以遙控關閉屏幕
                          {
                                            ET2=0;
                                          P0=0xff;
                                          LED1=LED2=1;
                          }
                          else
                          {
                                  ET2=1;
                          }         
                                   
        }                    
               
}

void int0 (void) interrupt 0 //外部中斷0服務函數           用于紅外解碼
{
        static unsigned char  i;             //接收紅外信號處理
        static bit startflag;                //是否開始處理標志位

        if(startflag)                        
        {
                if(irtime<63&&irtime>=33)//引導碼 TC9012的頭碼,9ms+4.5ms
                i=0;                  
                irdata[i]=irtime;//存儲每個電平的持續時間,用于以后判斷是0還是1
                irtime=0;
                i++;
                if(i==33)
                {
                         irok=1;
                         i=0;
                }
        }
        else
        {
                irtime=0;
                startflag=1;
        }

}
void timer0 (void) interrupt 1 //定時器0中斷服務函數 ,紅外解碼
        {
            irtime++; //計算2個下降沿之間的時間
        }

void Uart_Receive(void) interrupt 4         //串口中斷,用于GPS數據接收
{
        unsigned char ch,num;
        ES = 0;
        
        if (RI)                                        //如果接收完成則進入
        {
                ch = SBUF;
回復

使用道具 舉報

540#
ID:414900 發表于 2018-10-24 21:05 | 只看該作者
可以學,買一塊51單片機開發版,因為51的比較簡單,先按照開發版的教程碼代碼,把原理搞明白了再自己拓展。51學會了可以學32的。用一些仿真軟件慢慢練習
回復

使用道具 舉報

541#
ID:414974 發表于 2018-10-24 23:03 | 只看該作者
自學,C語言是必須要的
回復

使用道具 舉報

542#
ID:414979 發表于 2018-10-24 23:35 來自手機 | 只看該作者
c語言一定要補的,每天兩小時,堅持一個月就可以很熟練運用了
回復

使用道具 舉報

543#
ID:384353 發表于 2018-10-25 05:17 | 只看該作者
可以學單片機 但學習單片機的時候可能還需要鞏固c語言知識 觀察有什么差別 不過我覺得可以同時學習的
回復

使用道具 舉報

544#
ID:277063 發表于 2018-10-25 09:29 | 只看該作者
學單片機是可以提高C語言的,所以加油吧
回復

使用道具 舉報

545#
ID:415166 發表于 2018-10-25 13:08 | 只看該作者
可以,邊學邊練習,逐漸提高
回復

使用道具 舉報

546#
ID:415169 發表于 2018-10-25 13:15 | 只看該作者
學單片機,最好多學學匯編編程,了解基本的CPU內部結構、指令碼的組成執行方式等知識,為日后學習像ARM這種比較復雜的CPU建立好一些基礎的概念。
回復

使用道具 舉報

547#
ID:261175 發表于 2018-10-25 14:01 | 只看該作者
可以的,基礎的單片機編程只用到了一點點c語言,后面復雜的話也可以一邊學單片機一邊學c語言
回復

使用道具 舉報

548#
ID:415202 發表于 2018-10-25 14:10 | 只看該作者
其實單片機用的c語言都很基礎,主要是與數電相結合,只需要基礎就能編寫程序的,所以不過太擔心,只要想學就能學好的。花點時間就是了
回復

使用道具 舉報

549#
ID:415210 發表于 2018-10-25 14:14 | 只看該作者
可以的 先慢慢的學 單片機里面不會的再對照著查 很簡單的
回復

使用道具 舉報

550#
ID:415199 發表于 2018-10-25 14:19 | 只看該作者
說匯編的……匯編更加偏向基礎理解,如果要真正掌握微機原理,匯編更加好。但我們一般應用單片機還是用C語言更加易學易懂
回復

使用道具 舉報

551#
ID:415222 發表于 2018-10-25 14:34 | 只看該作者
可以,51單片機的編程最開始學的主要是調用函數
回復

使用道具 舉報

552#
ID:415241 發表于 2018-10-25 14:58 | 只看該作者
推薦郭天祥的10天學會單片機視頻,上手巨快,一個國慶假期就差不多,而且剛開始的C語言很簡單
回復

使用道具 舉報

553#
ID:415254 發表于 2018-10-25 15:03 | 只看該作者
可以,不過單片機也可以用匯編語言或者c語言
回復

使用道具 舉報

554#
ID:415254 發表于 2018-10-25 15:04 | 只看該作者
學單片機其實也是要學一部分C的
回復

使用道具 舉報

555#
ID:415278 發表于 2018-10-25 15:34 | 只看該作者
可以的,雖然我C語言,單片機都重修了,但其實沒學好并不妨礙單片機的學習。真的
回復

使用道具 舉報

556#
ID:415267 發表于 2018-10-25 15:39 | 只看該作者
關鍵是興趣,如果對單片機感興趣,C語言有什么可以難倒你
回復

使用道具 舉報

557#
ID:415306 發表于 2018-10-25 16:07 | 只看該作者
當然可以了,建議邊學邊復習c,在用的過程自然而然的就會了,c并不難,理解了邏輯就好。
回復

使用道具 舉報

558#
ID:415302 發表于 2018-10-25 16:11 來自手機 | 只看該作者
可以的,單片機對c語言的要求不是很高,只要認真學習都是可以的
回復

使用道具 舉報

559#
ID:415331 發表于 2018-10-25 16:34 | 只看該作者
可以的,這個只要入門就簡單了
回復

使用道具 舉報

560#
ID:413875 發表于 2018-10-25 17:37 | 只看該作者
當然可以,加油學習,慢慢來
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 毛片一区二区三区 | 国产中文原创 | 久久久久久免费观看 | 免费观看黄a一级视频 | 一区二区三区在线免费观看 | 范冰冰一级做a爰片久久毛片 | 亚洲啪啪一区 | 久久亚洲国产精品日日av夜夜 | 亚洲国产精品一区二区久久 | 成人三区 | h视频在线观看免费 | 国产精品99久久久久久www | 成人欧美一区二区三区在线播放 | 成年免费大片黄在线观看一级 | 国产高清精品一区二区三区 | 国产在线观看不卡一区二区三区 | 四虎影视一区二区 | 国产日韩精品一区 | 国产高清毛片 | 精品国产欧美一区二区三区不卡 | 欧美日韩一区二区在线 | 欧美日韩久久久 | 亚洲视频第一页 | 女人毛片a毛片久久人人 | www.一区二区三区 | 黄色大片在线免费观看 | 欧美日韩亚洲一区二区 | ww亚洲ww亚在线观看 | 日日干日日操 | 亚洲在线 | 婷婷桃色网 | 91免费版在线观看 | 久热9| 夜久久 | 91精品国产一区二区三区香蕉 | 亚洲精品一二三区 | 亚洲精品成人 | 91观看 | 天天操夜夜操 | 国产精品一区二区av | 一区在线免费视频 |