找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 10118|回復(fù): 32
收起左側(cè)

從單片機(jī)基礎(chǔ)到程序框架(全集PDF)

  [復(fù)制鏈接]
ID:540927 發(fā)表于 2020-9-8 13:52 | 顯示全部樓層 |閱讀模式
吳堅(jiān)鴻先生在21ic論壇上連載的帖子最終整理成的書,前期內(nèi)容是C語言基礎(chǔ),后面是51單片機(jī)的基礎(chǔ),文章很有思想深度,不同于市場(chǎng)上所賣的單片機(jī)書籍,它從項(xiàng)目開發(fā)的角度來寫,有很多內(nèi)容是一般書籍上沒有的,值得推廣學(xué)習(xí)。吳堅(jiān)鴻先生免費(fèi)把書籍分享給社會(huì),在此感謝他的付出。

從單片機(jī)基礎(chǔ)到程序框架(全集 2019pdf版).pdf

4.21 MB, 下載次數(shù): 728, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

ID:108573 發(fā)表于 2020-9-9 10:15 | 顯示全部樓層
這個(gè)作者真的好偉大。要是有目錄就完美了
回復(fù)

使用道具 舉報(bào)

ID:59830 發(fā)表于 2020-9-9 10:49 | 顯示全部樓層
講的比較仔細(xì),初學(xué)者有可能說教程單片機(jī)比較老了.我們學(xué)習(xí)的是思路.
國產(chǎn)的51單片機(jī) 增強(qiáng)型51比較多些. 模塊功能的寄存器稍作修改就可以.
例如:賽元的SC92F8003

/*
*****************************************************
* 文件名: main.c
* 備注: 主函數(shù)
* 測(cè)試功能 :C語言學(xué)習(xí)程序 P15發(fā)送數(shù)據(jù)
   UART0 串口發(fā)送數(shù)據(jù)后,占小部分data,其它IO資源釋放
     //--sc92f8003.h--
          //P1PH |= 0x20; // P15 上拉使能(測(cè)試上拉可用可不用)
                SCON |= 0x50; //模式1 10位全雙工;允許接收     
                tmp = 16000000L / 9600; //
                   //--使用定時(shí)器1--
                //T2CON &= 0xCF; //選擇定時(shí)器1(默認(rèn))
                TH1 = (u8)(tmp >> 8); //定時(shí)器1計(jì)數(shù)器的 高8位
                TL1 = (u8) tmp; //        //定時(shí)器1計(jì)數(shù)器的 低8位
          //IPUART = 1; // 串口高優(yōu)先級(jí) 使能
                //EA = 1; //使能總中斷
                //EUART = 0; //串口中斷 使能               
          //TI = 0;       

//--注銷部分開始---
* 測(cè)試功能:UART0串口功能 IO輸入(P17 P00 P01) 輸出(P12 P13 P14)
* 功能說明:
* 硬件資源:
//芯片設(shè)置內(nèi)部時(shí)鐘 16MHZ ,看門狗除能 低電壓2.9V  復(fù)位腳做 P17IO
//                sbit LED1 = P1^2; // LED口
//                sbit LED2 = P1^3; //
//                sbit LED3 = P1^4; //
//                sbit KEY_INPUT1 = P1^7; // 按鍵口
//                sbit KEY_INPUT2 = P0^0; //
//                sbit KEY_INPUT3 = P0^1; //
//                UART0 串口
//                ConfigUART0(0,9600); //-串口配置參數(shù)-引腳 P15(TX0) P16(RX0)
//                // ConfigUART0(1,9600); //串口配置參數(shù)-引腳 P20(TX0A) P11(RX0A)
//--注銷部分結(jié)束---
*
*****************************************************
*/
  //#include "REG52.H"
#include "sc92f8003.h"
void View(unsigned long u32ViewData);
void to_BufferData(unsigned long u32Data,unsigned char *pu8Buffer,unsigned char u8Type);
void SendString(unsigned char *pu8String);
/*---C語言學(xué)習(xí)區(qū)域的開始。-----------------------------------------------*/
void main() //主函數(shù)
{
                unsigned char a; //定義一個(gè)變量 a。
                unsigned int b; //定義一個(gè)變量 b。
                unsigned long c; //定義一個(gè)變量 c。
                a=100; //給變量 a 賦值。
                b=10000; //給變量 b 賦值。
                c=1000000000; //給變量 c 賦值。
                View(a); //在電腦串口端查看第 1個(gè)數(shù) a。
                View(b); //在電腦串口端查看第 2個(gè)數(shù) b。
                View(c); //在電腦串口端查看第 3個(gè)數(shù) c。
       
                while(1)
                {
                }
}
/*---C語言學(xué)習(xí)區(qū)域的結(jié)束。-----------------------------------------------*/
void View(unsigned long u32ViewData)
{
                static unsigned char Su8ViewBuffer[43];
                code unsigned char Cu8_0D_0A[]={0x0d,0x0a,0x00};
                code unsigned char Cu8Start[]={"開始..."};
                static unsigned char Su8FirstFlag=0;
                static unsigned int Su16FirstDelay;
                if(0==Su8FirstFlag)
                {
                        Su8FirstFlag=1;
                        for(Su16FirstDelay=0;Su16FirstDelay<10000;Su16FirstDelay++);
                        SendString(Cu8Start);
                        SendString(Cu8_0D_0A);
                        SendString(Cu8_0D_0A);
                }
                to_BufferData(u32ViewData,Su8ViewBuffer,1);
                SendString(Su8ViewBuffer);
                to_BufferData(u32ViewData,Su8ViewBuffer,2);
                SendString(Su8ViewBuffer);
                to_BufferData(u32ViewData,Su8ViewBuffer,3);
                SendString(Su8ViewBuffer);
                to_BufferData(u32ViewData,Su8ViewBuffer,4);
                SendString(Su8ViewBuffer);
                SendString(Cu8_0D_0A);
}


void to_BufferData(unsigned long u32Data,unsigned char *pu8Buffer,unsigned char u8Type)
{
                code unsigned char Cu8Array1[]={0xB5,0xDA,0x4E,0xB8,0xF6,0xCA,0xFD,0x00};
                code unsigned char Cu8Array2[]="十進(jìn)制:";
                code unsigned char Cu8Array3[]="十六進(jìn)制:";
                code unsigned char Cu8Array4[]="二進(jìn)制:";
                static unsigned char Su8SerialNumber=1;
                static unsigned int Su16BufferCnt;
                static unsigned int Su16TempCnt;
                static unsigned int Su16TempSet;
                static unsigned long Su32Temp1;
                static unsigned long Su32Temp2;
                static unsigned long Su32Temp3;
                static unsigned char Su8ViewFlag;
               
                if(1==u8Type)
                {
                        for(Su16BufferCnt=0;Su16BufferCnt<7;Su16BufferCnt++)
                        {
                                pu8Buffer[Su16BufferCnt]=Cu8Array1[Su16BufferCnt];
                        }
                        pu8Buffer[2]=Su8SerialNumber+'0';
                        pu8Buffer[Su16BufferCnt]=0x0d;
                        pu8Buffer[Su16BufferCnt+1]=0x0a;
                        pu8Buffer[Su16BufferCnt+2]=0;
                        Su8SerialNumber++;
                        return;
                }
                else if(2==u8Type)
                {
                        for(Su16BufferCnt=0;Su16BufferCnt<7;Su16BufferCnt++)
                        {
                                pu8Buffer[Su16BufferCnt]=Cu8Array2[Su16BufferCnt];
                        }
                        Su32Temp1=1000000000;
                        Su32Temp2=10;
                        Su16TempSet=10;
                }
                else if(3==u8Type)
                {
                        for(Su16BufferCnt=0;Su16BufferCnt<9;Su16BufferCnt++)
                        {
                                pu8Buffer[Su16BufferCnt]=Cu8Array3[Su16BufferCnt];
                        }
                        Su32Temp1=0x10000000;
                        Su32Temp2=0x00000010;
                        Su16TempSet=8;
                }
                else
                {
                        for(Su16BufferCnt=0;Su16BufferCnt<7;Su16BufferCnt++)
                        {
                                pu8Buffer[Su16BufferCnt]=Cu8Array4[Su16BufferCnt];
                        }
                        Su32Temp1=0x80000000;
                        Su32Temp2=0x00000002;
                        Su16TempSet=32;
                }

          Su8ViewFlag=0;
                for(Su16TempCnt=0;Su16TempCnt<Su16TempSet;Su16TempCnt++)
                {
                                Su32Temp3=u32Data/Su32Temp1%Su32Temp2;
                                if(Su32Temp3<10)
                                {
                                        pu8Buffer[Su16BufferCnt]=Su32Temp3+'0';
                                }
                                else
                                {
                                        pu8Buffer[Su16BufferCnt]=Su32Temp3-10+'A';
                                }

                                if(0==u32Data)
                                {
                                        Su16BufferCnt++;
                                        break;
                                }
                                else if(0==Su8ViewFlag)
                                {
                                        if('0'!=pu8Buffer[Su16BufferCnt])
                                        {
                                                Su8ViewFlag=1;
                                                Su16BufferCnt++;
                                        }
                                }
                                else
                                {
                                        Su16BufferCnt++;
                                }       
                                Su32Temp1=Su32Temp1/Su32Temp2;
                }
                pu8Buffer[Su16BufferCnt]=0x0d;
                pu8Buffer[Su16BufferCnt+1]=0x0a;
                pu8Buffer[Su16BufferCnt+2]=0;
}


void SendString(unsigned char *pu8String)
{
        static unsigned int Su16SendCnt;
        static unsigned int Su16Delay;
        u32 tmp; //
         //-REG52.H-
        //SCON=0x50;
        //TMOD=0X21;
        //TH1=TL1=256-(11059200L/12/32/9600);
        //TR1=1; //sc92f8003 芯片 不能開啟
        //ES = 0;
        //TI = 0;
       
    //--sc92f8003.h--
          //P1PH |= 0x20; // P15 上拉使能(測(cè)試上拉可用可不用)
                SCON |= 0x50; //模式1 10位全雙工;允許接收     
                tmp = 16000000L / 9600; //
                   //--使用定時(shí)器1--
                //T2CON &= 0xCF; //選擇定時(shí)器1(默認(rèn))
                TH1 = (u8)(tmp >> 8); //定時(shí)器1計(jì)數(shù)器的 高8位
                TL1 = (u8) tmp; //        //定時(shí)器1計(jì)數(shù)器的 低8位
          //IPUART = 1; // 串口高優(yōu)先級(jí) 使能
                //EA = 0; //使能總中斷
                EUART = 0; //串口中斷 使能               
          TI = 0;       
       
        for(Su16SendCnt=0;Su16SendCnt<43;Su16SendCnt++)
        {
                if(0==pu8String[Su16SendCnt])
                {
                        break;
                }
                else
                {
                        SBUF =pu8String[Su16SendCnt];
                        //for(Su16Delay=0;Su16Delay<800;Su16Delay++);//-REG52.H-延時(shí)
                        for(Su16Delay=0;Su16Delay<2400;Su16Delay++);//-sc92f8003.h-延時(shí)
                        TI = 0;
                }
        }
}
回復(fù)

使用道具 舉報(bào)

ID:448556 發(fā)表于 2020-9-9 11:00 | 顯示全部樓層
有目錄版的 在他群文件里
回復(fù)

使用道具 舉報(bào)

ID:540927 發(fā)表于 2020-9-11 16:23 | 顯示全部樓層
yygdzjs 發(fā)表于 2020-9-9 10:49
講的比較仔細(xì),初學(xué)者有可能說教程單片機(jī)比較老了.我們學(xué)習(xí)的是思路.
國產(chǎn)的51單片機(jī) 增強(qiáng)型51比較多些.  ...

謝謝您的回復(fù)呢,真的覺得這本書很不錯(cuò),一般的單片機(jī)書籍講解的沒有這么仔細(xì),而且單片機(jī)部分也只涉及最基本的,這本書中單片機(jī)部分把項(xiàng)目中能用到的知識(shí)也做了深入講解,真希望有更多的人能夠看到
回復(fù)

使用道具 舉報(bào)

ID:797195 發(fā)表于 2020-9-13 10:12 | 顯示全部樓層
很好的學(xué)習(xí)資料,感謝作者
回復(fù)

使用道具 舉報(bào)

ID:292876 發(fā)表于 2020-9-13 14:40 來自觸屏版 | 顯示全部樓層
中間水準(zhǔn)的設(shè)計(jì)開發(fā)人員,看吳師傅的教程,也會(huì)有很多的啟發(fā),這本書不會(huì)教你太多如何寫代碼,而是教你單片機(jī)思路。是不可多得神作。我看了好多遍,每一次都有所啟發(fā),特別是在不注意的邊邊角角,總有些許收獲。神作
回復(fù)

使用道具 舉報(bào)

ID:164385 發(fā)表于 2020-9-15 19:53 | 顯示全部樓層
偉大的作者!
回復(fù)

使用道具 舉報(bào)

ID:253767 發(fā)表于 2020-9-16 07:56 | 顯示全部樓層
吳堅(jiān)鴻先生奉獻(xiàn)社會(huì)!!!
回復(fù)

使用道具 舉報(bào)

ID:540927 發(fā)表于 2020-9-29 13:19 | 顯示全部樓層
希望不要沉啊,讓更多需要的人看到
回復(fù)

使用道具 舉報(bào)

ID:83634 發(fā)表于 2020-9-29 21:36 | 顯示全部樓層
不可多得神作
回復(fù)

使用道具 舉報(bào)

ID:540927 發(fā)表于 2020-10-27 11:18 | 顯示全部樓層
這么好的東西竟然沉了,大家需要的趕緊下啊
回復(fù)

使用道具 舉報(bào)

ID:246635 發(fā)表于 2020-10-27 21:42 | 顯示全部樓層
還能下載吧?謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:517691 發(fā)表于 2022-6-22 22:23 | 顯示全部樓層
很好的資料
回復(fù)

使用道具 舉報(bào)

ID:299910 發(fā)表于 2022-9-3 16:51 | 顯示全部樓層
看了第一頁 捐權(quán)聲明 我就感受到了作者胸懷的寬廣。瀏覽了一下內(nèi)容,圖片標(biāo)注的很認(rèn)真詳細(xì),應(yīng)該對(duì)我們很有幫助。感謝作者,感謝樓主分享!
回復(fù)

使用道具 舉報(bào)

ID:690831 發(fā)表于 2022-9-4 00:52 | 顯示全部樓層
這本書看過好幾次,每次都有新的啟發(fā)
回復(fù)

使用道具 舉報(bào)

ID:765334 發(fā)表于 2022-9-5 17:40 來自觸屏版 | 顯示全部樓層
佩服,佩服,下載來學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:949074 發(fā)表于 2022-9-5 23:04 | 顯示全部樓層
正在無頭緒的學(xué)習(xí)單片機(jī),謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:970790 發(fā)表于 2022-9-6 00:08 | 顯示全部樓層
佩服,佩服,下載來學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:248392 發(fā)表于 2022-9-6 08:55 | 顯示全部樓層
感謝吳老師!
回復(fù)

使用道具 舉報(bào)

ID:15745 發(fā)表于 2022-11-30 16:28 | 顯示全部樓層
還沒入門,學(xué)習(xí)看看
回復(fù)

使用道具 舉報(bào)

ID:748788 發(fā)表于 2022-12-1 12:50 | 顯示全部樓層
傳一個(gè)帶目錄的,方便查看 手把手教你單片機(jī)程序框架—吳堅(jiān)鴻(共1209頁pdf下載).pdf (3.96 MB, 下載次數(shù): 57)


回復(fù)

使用道具 舉報(bào)

ID:15745 發(fā)表于 2023-4-20 16:28 | 顯示全部樓層
正好在學(xué)習(xí)51單片機(jī),學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:1064915 發(fā)表于 2023-4-21 17:35 | 顯示全部樓層
已下載,拜讀中
回復(fù)

使用道具 舉報(bào)

ID:1108782 發(fā)表于 2024-1-16 09:26 | 顯示全部樓層
wwh2382 發(fā)表于 2022-12-1 12:50
傳一個(gè)帶目錄的,方便查看

U are hero!
回復(fù)

使用道具 舉報(bào)

ID:149799 發(fā)表于 2024-4-6 11:01 | 顯示全部樓層
多謝樓主,仔細(xì)看看資料確實(shí)有幫助的。
回復(fù)

使用道具 舉報(bào)

ID:934176 發(fā)表于 2025-4-13 16:09 | 顯示全部樓層
講的比較仔細(xì),初學(xué)者有可能說教程單片機(jī)比較老了.我們學(xué)習(xí)的是思路. 國產(chǎn)的51單片機(jī) 增強(qiáng)型51比較多些. 模塊功能的寄存器稍作修改就可以.
回復(fù)

使用道具 舉報(bào)

ID:889188 發(fā)表于 2025-4-14 13:08 | 顯示全部樓層
這個(gè)作者真的好偉大。
回復(fù)

使用道具 舉報(bào)

ID:1148523 發(fā)表于 2025-4-20 14:23 | 顯示全部樓層
TKS
回復(fù)

使用道具 舉報(bào)

ID:91165 發(fā)表于 2025-4-21 10:57 | 顯示全部樓層
內(nèi)容詳細(xì),適合初學(xué)者
回復(fù)

使用道具 舉報(bào)

ID:1148769 發(fā)表于 2025-4-23 15:22 | 顯示全部樓層
cayboy1988 發(fā)表于 2025-4-13 16:09
講的比較仔細(xì),初學(xué)者有可能說教程單片機(jī)比較老了.我們學(xué)習(xí)的是思路. 國產(chǎn)的51單片機(jī) 增強(qiáng)型51比較多些. 模 ...

有沒有教程集 樓主
回復(fù)

使用道具 舉報(bào)

ID:18253 發(fā)表于 2025-4-24 16:51 | 顯示全部樓層
真不錯(cuò)!資料老了一些,但核心的東西真不過時(shí)。
回復(fù)

使用道具 舉報(bào)

ID:940483 發(fā)表于 2025-5-15 11:28 | 顯示全部樓層
好東西啊,造福入門的人
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表