本書針對Atmel公司的AVR系列單片機和ImageCraft公司的ICC AVR開發(fā)環(huán)境,詳細地介紹了AT90LS8535的C語言程序設計。全書共有13章,其內(nèi)容既涉及到了單片機的結構原理、指令系統(tǒng)、內(nèi)容資源和外部功能擴展,又包含了單片機的編程工具——ICC AVR C編程器的數(shù)據(jù)類型、控制流、函數(shù)和指針等。本書的特點是:深入淺出,從最基本的概念開始,循序漸進地講解單片機的應用開發(fā);列舉了大量實例,使讀者能從實際應用中掌握單片機的開發(fā)與應用技術。本書適合作為從事單片機開發(fā)人員的參考用書。書中先后講解了C語言基礎、AVR單片機基礎,并舉了一些簡單的實例。本書非常適合初學者。 【目錄信息】 第1章 單片機系統(tǒng)概述 1. 1 AVR系列單片機的特點 1. 2 AT90系列單片機簡介 第2章 AT90LS8535單片機的基礎知識 2. 1 AT90LS8535單片機的總體結構 2. 1. 1 AT90LS8535單片機的中央處理器 2. 1. 2 AT90LS8535單片機的存儲器組織 2. 1. 3 AT90LS8535單片機的I/O接口 2. 1. 4 AT90LS8535單片機的內(nèi)部資源 2. 1. 5 AT90LS8535單片機的時鐘電路 2. 1. 6 AT90LS8535單片機的系統(tǒng)復位 2. 1. 7 AT90LS8535單片機的節(jié)電方式 2. 1. 8 AT90LS8535單片機的芯片引腳 2. 2 AT90LS8535單片機的指令系統(tǒng) 2. 2. 1 匯編指令格式 2. 2. 2 尋址方式 2. 2. 3 偽指令 2. 2. 4 指令類型及數(shù)據(jù)操作方式 2. 3 應用程序設計 2. 3. 1 程序設計方法 2. 3. 2 應用程序舉例 第3章 AT90LS8535單片機的C編程 3. 1 支持高級語言編程的AVR系列單片機 3. 2 AVR的C編譯器 3. 3 ICCAVR介紹 3. 3. 1 安裝ICCAVR 3. 3. 2 設置ICCAVR 3. 4 用ICCAVR編寫應用程序 3. 5 下載程序文件 第4章 數(shù)據(jù)類型. 運算符和表達式 4. 1 ICCAVR支持的數(shù)據(jù)類型 4. 2 常量與變量 4. 2. 1 常量 4. 2. 2 變量 4. 3 AT90LS8535的存儲空間 4. 4 算術和賦值運算 4. 4. 1 算術運算符和算術表達式 4. 4. 2 賦值運算符和賦值表達式 4. 5 邏輯運算 4. 6 關系運算 4. 7 位操作 4. 7. 1 位邏輯運算 4. 7. 2 移位運算 4. 8 逗號運算 第5章 控制流 5. 1 C語言的結構化程序設計 5. 1. 1 順序結構 5. 1. 2 選擇結構 5. 1. 3 循環(huán)結構 5. 2 選擇語句 5. 2. 1 if語句 5. 2. 2 switch分支 5. 2. 3 選擇語句的嵌套 5. 3 循環(huán)語句 5. 3. 1 while語句 5. 3. 2 do…while語句 5. 3. 3 for語句 5. 3. 4 循環(huán)語句嵌套 5. 3. 5 break語句和continue語句 第6章 函數(shù) 6. 1 函數(shù)的定義 6. 1. 1 函數(shù)的定義的一般形式 6. 1. 2 函數(shù)的參數(shù) 6. 1. 3 函數(shù)的值 6. 2 函數(shù)的調用 6. 2. 1 函數(shù)的一般調用 6. 2. 2 函數(shù)的遞歸調用 6. 2. 3 函數(shù)的嵌套調用 6. 3 變量的類型及其存儲方式 6. 3. 1 局部變量 6. 3. 2 局部變量的存儲方式 6. 3. 3 全局變量 6. 3. 4 全局變量的存儲方式 6. 4 內(nèi)部函數(shù)和外部函數(shù) 6. 4. 1 內(nèi)部函數(shù) 6. 4. 2 外部函數(shù) 第7章 指針 7. 1 指針和指針變量 7. 2 指針變量的定義和引用 7. 2. 1 指針變量的定義 7. 2. 2 指針變量的引用 7. 2. 3 指針變量作為函數(shù)參數(shù) 7. 3 數(shù)組與指針 7. 3. 1 指向數(shù)組元素的指針變量 7. 3. 2 數(shù)組元素的引用 通過指針 7. 3. 3 數(shù)組名作為函數(shù)參數(shù) 7. 3. 4 指向多維數(shù)組的元素的指針變量 7. 4 字符串與指針 7. 4. 1 字符串的表示形式 7. 4. 2 字符串指針變量與字符數(shù)組的區(qū)別 7. 5 函數(shù)與指針 7. 5. 1 函數(shù)指針變量 7. 5. 2 指針型函數(shù) 7. 6 指向指針的指針 7. 7 有關指針數(shù)據(jù)類型和運算小結 7. 7. 1 有關指針的數(shù)據(jù)類型的小結 7. 7. 2 指針運算的小結 第8章 結構體和共用體 8. 1 結構體的定義和引用 8. 1. 1 結構體類型變量的定義 8. 1. 2 結構體類型變量的引用 8. 2 結構類型的說明 8. 3 結構體變量的初始化和賦值 8. 3. 1 結構體變量的初始化 8. 3. 2 結構體變量的賦值 8. 4 結構體數(shù)組 8. 4. 1 結構體數(shù)組的定義 8. 4. 2 結構體數(shù)組的初始化 8. 5 指向結構體類型變量的指針 8. 5. 1 指向結構體變量的指針 8. 5. 2 指向結構體數(shù)組的指針 8. 5. 3 指向結構體變量的指針做函數(shù)參數(shù) 8. 6 共用體 8. 6. 1 共用體的定義 8. 6. 2 共用體變量的引用 第9章 A190LS8535的內(nèi)部資源 9. 1 I/O 口 9. 1. 1 端口A 9. 1. 2 端口B 9. 1. 3 端口C 9. 1. 4 端口D 9. 1. 5 I/O口的編程 9. 2 中斷 9. 2. 1 單片機的中斷功能 9. 2. 2 AT90LS8535單片機的中斷系統(tǒng) 9. 2. 3 1CCAVRC編譯器的中斷操作 9. 2. 4 中斷的編程 9. 3 串行數(shù)據(jù)通信 9. 3. 1 數(shù)據(jù)通信基礎 9. 3. 2 AT90LS8535的同步串行接口 9. 3. 3 AT90LS8535的異步串行接口 9. 4 定時/計數(shù)器 9. 4. 1 定時/計數(shù)器的分頻器 9. 4. 2 8位定時/計數(shù)器0 9. 4. 3 16位定時/計數(shù)器1 9. 4. 4 8位定時/計數(shù)器2 9. 5 EEPROM 9. 5. 1 與EEPROM有關的寄存器 9. 5. 2 EEPROM讀/寫操作 9. 5. 3 EEPROM的應用舉例 9. 6 模擬量輸入接口 9. 6. 1 模數(shù)轉換器的結構 9. 6. 2 ADC的使用 9. 6. 3 與模數(shù)轉換器有關的寄存器 9. 6. 4 ADC的噪聲消除 9. 6. 5 ADC的應用舉例 9. 7 模擬比較器 9. 7. 1 模擬比較器的結構 9. 7. 2 與模擬比較器有關的寄存器 9. 7. 3 模擬比較器的應用舉例 第10章 AT90LS8535的人機接口編程 10. 1 鍵盤接口 10. 1. 1 非矩陣式鍵盤 10. 1. 2 矩陣式鍵盤 10. 2 LED顯示輸出 10. 2. 1 LED的靜態(tài)顯示 10. 2. 2 LED的動態(tài)掃描顯示 10. 2. 3 動態(tài)掃描顯示專用芯片MC14489 10. 3 LCD顯示輸出 10. 3. 1 字符型LCD 10. 3. 2 點陣型LCD 10. 4 ISD2500系列語音芯片的編程 10. 4. 1 ISD2500的片內(nèi)結構和引腳 10. 4. 2 ISD2500的操作 10. 4. 3 ISD2500和單片機的接口及編程 10. 5 TP-uP微型打印機 10. 5. 1 TP-uP打印機的接口和邏輯時序 10. 5. 2 P-uP打印機的打印命令和字符代碼 10. 5. 3 AT90LS8535與TP-uP系列打印機的接口及編程 10. 6 IC卡 10. 6. 1 IC卡讀寫裝置 10. 6. 2 IC卡軟件 第11章 AT90LS8535的外圍擴展 11. 1 簡單I/O擴展芯片 11. 1. 1 用74LS377擴展數(shù)據(jù)輸出接口 11. 1. 2 數(shù)據(jù)輸入接口 11. 2 模擬量輸出 11. 2. 1 D/A轉換器簡介 11. 2. 2 8位數(shù)模轉換器DAC0832 11. 2. 3 8位數(shù)模轉換器與單片機的接口及編程 11. 2. 4 12位數(shù)模轉換器DACl230 11. 2. 5 12位數(shù)模轉換器與單片機的接口及編程 11. 3 可編程I/O擴展芯片8255A 11. 3. 1 8255A的引腳和內(nèi)部結構 11. 3. 2 8255A的工作方式 11. 3. 3 8255A的控制字 11. 3. 4 AT90LS8535和8255A的接口 11. 4 帶片內(nèi)RAM的I/O擴展芯片8155 11. 4. 1 8155的引腳和內(nèi)部結構. 11. 4. 2 8155的I/O口工作方式 11. 4. 3 8155的定時/計數(shù)器 11. 4. 4 8155的命令和狀態(tài)字 11. 4. 5 AT90LS8535與8155的接口及編程 11. 5 定時/計數(shù)器芯片8253 11. 5. 1 8253的信號引腳和邏輯結構 11. 5. 2 8253的工作方式 11. 5. 3 8253的控制字 11. 5. 4 AT90LS8535與8253的接口及編程 11. 6 實時時鐘芯片DS1302 11. 6. 1 DS1302的引腳和內(nèi)部結構 11. 6. 2 DS1302的控制方式 11. 6. 3 AT90LS8535與DS1302的接口與編程 11. 7 數(shù)字溫度傳感器DS18B20 11. 7. 1 DSl8B20的引腳和內(nèi)部結構 11. 7. 2 DS18B20的溫度測量 11. 7. 3 AT90LS8535與DS18B20的接口與編程 第12章 AT90LS8535的通信編程 12. 1 串口通信 12. 1. 1 異步串口UART通信 12. 1. 2 同步串口SPI通信 12. 2 I2C總線 12. 2. 1 I2C總線協(xié)議 12. 2. 2 采用AT90LS8535的并行I/O口模擬I2C總線 12. 3 CAN總線 12. 3. 1 CAN總線的特點 12. 3. 2 CAN協(xié)議的信息格式 12. 3. 3 CAN控制器SJA1000 12. 3. 4 AT90LS8535與SJA1000的接口及編程 12. 4 AT90LS8535單片機與PC的串行通信 12. 4. 1 基于VC 6. 0的PC串口通信 12. 4. 2 應用實例 第13章 系統(tǒng)設計中的程序處理方法 13. 1 數(shù)字濾波處理 13. 1. 1 平滑濾波 13. 1. 2 中值濾波 13. 1. 3 程序判斷濾波 13. 2 非線性處理 13. 2. 1 查表法 13. 2. 2 線性插值法
上傳時間: 2013-11-04
上傳用戶:元宵漢堡包
單片機c語言學習和單片機制作資料: 函數(shù)的使用和熟悉 實例3:用單片機控制第一個燈亮 實例4:用單片機控制一個燈閃爍:認識單片機的工作頻率 實例5:將 P1口狀態(tài)分別送入P0、P2、P3口:認識I/O口的引腳功能 實例6:使用P3口流水點亮8位LED 實例7:通過對P3口地址的操作流水點亮8位LED 實例8:用不同數(shù)據(jù)類型控制燈閃爍時間 實例9:用P0口、P1 口分別顯示加法和減法運算結果 實例10:用P0、P1口顯示乘法運算結果 實例11:用P1、P0口顯示除法運算結果 實例12:用自增運算控制P0口8位LED流水花樣 實例13:用P0口顯示邏輯"與"運算結果 實例14:用P0口顯示條件運算結果 實例15:用P0口顯示按位"異或"運算結果 實例16:用P0顯示左移運算結果 實例17:"萬能邏輯電路"實驗 實例18:用右移運算流水點亮P1口8位LED 實例19:用if語句控制P0口8位LED的流水方向 實例20:用swtich語句的控制P0口8位LED的點亮狀態(tài) 實例21:用for語句控制蜂鳴器鳴笛次數(shù) 實例22:用while語句控制LED 實例23:用DO-while語句控制P0口8位LED流水點亮 實例24:用字符型數(shù)組控制P0口8位LED流水點亮 實例25: 用P0口顯示字符串常量 實例26:用P0 口顯示指針運算結果 實例27:用指針數(shù)組控制P0口8位LED流水點亮 實例28:用數(shù)組的指針控制P0 口8 位LED流水點亮 實例29:用P0 、P1口顯示整型函數(shù)返回值 實例30:用有參函數(shù)控制P0口8位LED流水速度 實例31:用數(shù)組作函數(shù)參數(shù)控制流水花樣 實例32:用指針作函數(shù)參數(shù)控制P0口8位LED流水點亮 實例33:用函數(shù)型指針控制P1口燈花樣 實例34:用指針數(shù)組作為函數(shù)的參數(shù)顯示多個字符串
上傳時間: 2013-10-21
上傳用戶:llandlu
C51 中的關鍵字關鍵字 用途 說明auto 存儲種類說明 用以說明局部變量,缺省值為此break 程序語句 退出最內(nèi)層循環(huán)case 程序語句 Switch 語句中的選擇項char 數(shù)據(jù)類型說明 單字節(jié)整型數(shù)或字符型數(shù)據(jù)const 存儲類型說明 在程序執(zhí)行過程中不可更改的常量值continue 程序語句 轉向下一次循環(huán)default 程序語句 Switch 語句中的失敗選擇項do 程序語句 構成do..while 循環(huán)結構double 數(shù)據(jù)類型說明 雙精度浮點數(shù)else 程序語句 構成if..else 選擇結構enum 數(shù)據(jù)類型說明 枚舉extern 存儲種類說明 在其他程序模塊中說明了的全局變量flost 數(shù)據(jù)類型說明 單精度浮點數(shù)for 程序語句 構成for 循環(huán)結構goto 程序語句 構成goto 轉移結構if 程序語句 構成if..else 選擇結構int 數(shù)據(jù)類型說明 基本整型數(shù)long 數(shù)據(jù)類型說明 長整型數(shù)register 存儲種類說明 使用CPU 內(nèi)部寄存的變量return 程序語句 函數(shù)返回short 數(shù)據(jù)類型說明 短整型數(shù)signed 數(shù)據(jù)類型說明 有符號數(shù),二進制數(shù)據(jù)的最高位為符號位sizeof 運算符 計算表達式或數(shù)據(jù)類型的字節(jié)數(shù)static 存儲種類說明 靜態(tài)變量struct 數(shù)據(jù)類型說明 結構類型數(shù)據(jù)swicth 程序語句 構成switch 選擇結構typedef 數(shù)據(jù)類型說明 重新進行數(shù)據(jù)類型定義union 數(shù)據(jù)類型說明 聯(lián)合類型數(shù)據(jù)unsigned 數(shù)據(jù)類型說明 無符號數(shù)數(shù)據(jù)void 數(shù)據(jù)類型說明 無類型數(shù)據(jù)volatile 數(shù)據(jù)類型說明 該變量在程序執(zhí)行中可被隱含地改變while 程序語句 構成while 和do..while 循環(huán)結構ANSIC 標準關鍵字關鍵字 用途 說明bit 位標量聲明 聲明一個位標量或位類型的函數(shù)sbit 位標量聲明 聲明一個可位尋址變量
標簽: C51
上傳時間: 2013-10-08
上傳用戶:waves_0801
C51基本結構程序設計1. 掌握if語句來實現(xiàn)選擇結構,能利用if語句編寫相應的分枝結構的程序。在嵌套if語句中,一定要搞清楚else與哪個if結合的問題。2.掌握switch語句來實現(xiàn)多向分枝選擇結構,能利用switch語句編寫相應的分枝結構的程序。 3. 掌握循環(huán)語句的即初始化、循環(huán)體、循環(huán)控制及結束四個部分,并能進行循環(huán)語句的程序設計。分別掌握for 語句、while語句以及DO-while語句的使用語法及方法,能利用這三種循環(huán)結構進行循環(huán)程序設計,理解這三種語句的異同。4.理解并掌握continue、break語句在循環(huán)結構和選擇結構中的作用。對于goto語句,理解該語句優(yōu)缺點。C51語言是結構化編程語言。結構化語言的基本元素是模塊,它是程序的一部分.只有一個出口和一個入口.不允許有偶然的中途插入或以模塊的其它路徑退出。結構化編程語言在沒有妥善保護或恢復堆棧和其它相關的寄存器之前,不應隨便跳入或跳出一個模塊。因此使用這種結構化語言進行編程,當要退出中斷時,堆棧不會因為程序使用了任何可以接受的命令而崩潰。 結構化程序由若干模塊組成,每個模塊中包含著若干個基本結構,而每個基本結構中可以有若干條語句。歸納起來,C51程序有順序結構、選擇結構、循環(huán)結構共三種結構。
上傳時間: 2013-11-01
上傳用戶:四只眼
第1章 單片機系統(tǒng)概述1.1 AVR系列單片機的特點1.2 AT90系列單片機簡介第2章 AT90LS8535單片機的基礎知識2.1 AT90LS8535單片機的總體結構2.1.1 AT90LS8535單片機的中央處理器2.1.2 AT90LS8535單片機的存儲器組織2.1.3 AT90LS8535單片機的I/O接口2.1.4 AT90LS8535單片機的內(nèi)部資源2.1.5 AT90LS8535單片機的時鐘電路2.1.6 AT90LS8535單片機的系統(tǒng)復位2.1.7 AT90LS8535單片機的節(jié)電方式2.1.8 AT90LS8535單片機的芯片引腳2.2 AT90LS8535單片機的指令系統(tǒng)2.2.1 匯編指令格式2.2.2 尋址方式2.2.3 偽指令2.2.4 指令類型及數(shù)據(jù)操作方式2.3 應用程序設計2.3.1 程序設計方法2.3.2 應用程序舉例第3章 AT90LS8535單片機的C編程3.1 支持高級語言編程的AVR系列單片機3.2 AVR的C編譯器3.3 ICC AVR介紹3.3.1 安裝ICC AVR3.3.2 設置ICC AVR3.4 用ICC AVR編寫應用程序3.5 下載程序文件第4章 數(shù)據(jù)類型、運算符和表達式4.1 ICC AVR支持的數(shù)據(jù)類型4.2 常量與變量4.2.1 常量4.2.2 變量4.3 AT90LS8535的存儲空間4.4 算術和賦值運算4.4.1 算術運算符和算術表達式4.4.2 賦值運算符和賦值表達式4.5 邏輯運算4.6 關系運算4.7 位操作4.7.1 位邏輯運算4.7.2 移位運算4.8 逗號運算第5章 控制流5.1 C語言的結構化程序設計5.1.1 順序結構5.1.2 選擇結構5.1.3 循環(huán)結構5.2 選擇語句5.2.1 if語句5.2.2 switch分支5.2.3 選擇語句的嵌套5.3 循環(huán)語句5.3.1 while語句5.3.2 do…while語句5.3.3 for語句5.3.4 循環(huán)語句嵌套5.3.5 break語句和continue語句第6章 函數(shù)6.1 函數(shù)的定義6.1.1 函數(shù)的定義的一般形式6.1.2 函數(shù)的參數(shù)6.1.3 函數(shù)的值6.2 函數(shù)的調用6.2.1 函數(shù)的一般調用6.2.2 函數(shù)的遞歸調用6.2.3 函數(shù)的嵌套使用6.3 變量的類型及其存儲方式6.3.1 局部變量6.3.2 局部變量的存儲方式6.3.3 全局變量6.3.4 全局變量的存儲方式6.4 內(nèi)部函數(shù)和外部函數(shù)6.4.1 內(nèi)部函數(shù)6.4.2 外部函數(shù)第7章 指針第8章 結構體和共用體第9章 AT90LS8535的內(nèi)部資源第10章 AT90LS8535的人機接口編程第11章 AT90LS8535的外圍擴展第12章 AT90LS8535的通信編程第13章 系統(tǒng)設計中的程序處理方法
上傳時間: 2013-10-31
上傳用戶:smthxt
目錄 C語言基礎知識 C 語言簡介 C 語言的特點… C 語言的發(fā)展和標準化…數(shù)據(jù)類型、運算、表達式和編譯預處理 數(shù)據(jù)類型… 基本類型與數(shù)據(jù)表示 整數(shù)類型和整數(shù)的表示… 實數(shù)類型和實數(shù)的表示… 字符類型和字符的表示… 運算符、表達式與計算… 算術運算符 算術表達式 表達式的求值… 變量——概念、定義和使用… 變量的定義0 變量的使用:取值與賦值 預處理 文件包含命令… 宏定義與宏替換…邏輯判斷與運算… 關系運算和邏輯運算 復雜條件的描述0 i f語句循環(huán)控制 whi le語句 for語句… 循環(huán)程序常用的若干機制 增量和減量運算符(++、--) 逗號運算符 控制結構和控制語句 DO-while循環(huán)結構… 流程控制語句… goto語句… 開關語句…函數(shù) 概述… 函數(shù)定義和程序的函數(shù)分解… 函數(shù)定義… 函數(shù)調用…數(shù)組 數(shù)組的概念、定義和使用 數(shù)組變量定義… 數(shù)組的使用 數(shù)組的初始化…結構 結構(struct) 結構說明與變量定義 結構變量的初始化和使用 結構與函數(shù) 處理結構的函數(shù)0指針 指針的概念 指針操作… 指針作為函數(shù)的參數(shù) 與指針有關的一些問題… 指針與數(shù)組 指向數(shù)組元素的指針 基于指針運算的數(shù)組程序設計 數(shù)組參數(shù)與指針 字符指針與字符數(shù)組0
上傳時間: 2013-11-16
上傳用戶:asdkin
這是個編譯原理的課程設計,是一個DO-while循環(huán)語句的翻譯程序設計,包括詞法分析,語法分析,生成中間代碼四元式。
標簽: 編譯原理
上傳時間: 2015-03-29
上傳用戶:yuzsu
if—else語句,switch語句,循環(huán)結構,DO-while語句,for語句, 跳轉語句
標簽: else
上傳時間: 2014-01-22
上傳用戶:zsjzc
數(shù)值計算方法在C語言中的應用 介紹了數(shù)值計算方法與計算機程序語言相結合的重要性,在給出牛頓迭代公式之后,闡述了牛頓迭代法在DO-while循環(huán)中的應用,然后通過實例基于曲線梯形面積求解方法,論述了矩形法和梯形法在for循環(huán)中的應用.最后指出:用正確的數(shù)值計算方法編寫高效的計算機程序解決復雜的實際問題應成為當代理工科大學生必備的基礎與技能
上傳時間: 2013-12-28
上傳用戶:qoovoop
C語言精彩百例第1-44例 實例1 數(shù)據(jù)類型轉換 實例2 轉義字符 實例3 關系和邏輯運算 實例4 自增自減 實例5 普通位運算 實例6 位移運算 實例7 字符譯碼 實例8 指針操作符 實例9 if判斷語句 實例10 else-if語句 實例11 嵌套if語句 實例12 switch語句 實例13 for語句 實例14 while語句 實例15 DO-while語句 實例16 break和continue語句 實例17 exit()語句 實例18 綜合實例 實例19 一維數(shù)組 實例20 二維數(shù)組 實例21 字符數(shù)組 實例22 數(shù)組初始化 實例23 數(shù)組應用 實例24 函數(shù)的值調用 實例25 函數(shù)的引用調用 實例26 數(shù)組函數(shù)的調用 實例27 命令行變元 實例28 函數(shù)的返回值 實例29 函數(shù)的嵌套調用 實例30 函數(shù)的遞歸調用 實例31 局部和全局變量 實例32 變量的存儲類別 實例33 內(nèi)部和外部函數(shù) 實例34 綜合實例1 實例35 綜合實例2 實例36 變量的指針 實例37 一維數(shù)組指針 實例38 二維數(shù)組指針 實例39 字符串指針 實例40 函數(shù)指針 實例41 指針數(shù)組 實例42 二維指針 實例43 指針的初始化 實例44 綜合實例
標簽: 字符 C語言 數(shù)據(jù)類型 減
上傳時間: 2014-01-16
上傳用戶:royzhangsz