本書分三部分介紹在美國廣泛應用的、高功能的M68HC11系列單片機(8位機 ,Motorola公司)。內容包括M68HC11的結構與其基本原理、開發工具EVB(性能評估板)以及開發和應用技術。本書在介紹單片機硬、軟件的基礎上,進一步介紹了在美國實驗室內,如何應用PC機及EVB來進行開發工作。通過本書的介紹,讀者可了解這種單片機的原理并學會開發和應用方法。本書可作為大專院校單片機及其實驗的教材(本科、短訓班)。亦可供開發、應用單片機的各專業(計算機、機電、化工、紡織、冶金、自控、航空、航海……)有關技術人員參考。 第一部分 M68HC11 結構與原理Motorola單片機 1 Motorla單片機 1.1 概述 1.1.1 Motorola 單片機發展概況(3) 1.1.2 Motorola 單片機結構特點(4) 1.2 M68HC11系列單片機(5) 1.2.1 M68HC11產品系列(5) 1.2.2 MC68HC11E9特性(6) 1.2.3 MC68HC11E9單片機引腳說明(8) 1.3 Motorola 32位單片機(14) 1.3.1中央處理器(CPU32)(15) 1.3.2 定時處理器(TPU)(16) 1.3.3 串行隊列模塊(QSM)(16) 1.3.4 系統集成模塊 (SIM)(16) 1.3.5 RAM(17) 2 系統配置與工作方式 2.1 系統配置(19) 2.1.1 配置寄存器CONFIG(19) 2.1.2 CONFIG寄存器的編程與擦除(20) 2?2 工作方式選擇(21) 2.3 M68HC11的工作方式(23) 2.3.1 普通單片工作方式(23) 2.3.2 普通擴展工作方式(23) 2.3.3 特殊自舉方式(27) 2.3.4 特殊測試方式(28) 3 中央處理器(CPU)與片上存儲器 3.1 CPU寄存器(31) 3?1?1 累加器A、B和雙累加器D(32) 3.1.2 變址寄存器X、Y(32) 3.1.3 棧指針SP(32) 3.1.4 程序計數器PC(33) 3.1.5 條件碼寄存器CCR(33) 3.2 片上存儲器(34) 3.2.1 存儲器分布(34) 3.2.2 RAM和INIT寄存器(35) 3.2.3 ROM(37) 3.2.4 EEPROM(37) 3.3 M68HC11 CPU的低功耗方式(39) 3.3.1 WAIT方式(39) 3.3.2 STOP方式(40) 4 復位和中斷 4.1 復位(41) 4.1.1 M68HC11的系統初始化條件(41) 4.1.2 復位形式(43) 4.2 中斷(48) 4.2.1 條件碼寄存器CCR中的中斷屏蔽位(48) 4.2.2 中斷優先級與中斷矢量(49) 4.2.3 非屏蔽中斷(52) 4.2.4 實時中斷(53) 4.2.5 中斷處理過程(56) 5 M68HC11指令系統 5.1 M68HC11尋址方式(59) 5.1.1 立即尋址(IMM)(59) 5.1.2 擴展尋址(EXT)(60) 5.1.3 直接尋址(DIR)(60) 5.1.4 變址尋址(INDX、INDY)(61) 5.1.5 固有尋址(INH)(62) 5.1.6 相對尋址(REL)(62) 5.1.7 前置字節(63) 5.2 M68HC11指令系統(63) 5.2.1 累加器和存儲器指令(63) 5.2.2 棧和變址寄存器指令(68) 5.2.3 條件碼寄存器指令(69) 5.2.4 程序控制指令(70) 6 輸入與輸出 6.1 概述(73) 6.2 并行I/O口(74) 6.2.1 并行I/O寄存器(74) 6.2.2 應答I/O子系統(76) 6?3 串行通信接口SCI(82) 6.3.1 基本特性(83) 6.3.2 數據格式(83) 6.3.3 SCI硬件結構(84) 6.3.4 SCI寄存器(86) 6.4 串行外圍接口SPI(92) 6.4.1 SPI特性(92) 6.4.2 SPI引腳信號(92) 6.4.3 SPI結構(93) 6.4.4 SPI寄存器(95) 6.4.5 SPI系統與外部設備進行串行數據傳輸(99) 7 定時器系統與脈沖累加器 7.1 概述(105) 7.2 循環計數器(107) 7.2.1 時鐘分頻器(107) 7.2.2 計算機正常工作監視功能(110) 7.2.3 定時器標志的清除(110) 7.3 輸入捕捉功能(111) 7.3.1 概述(111) 7.3.2 定時器輸入捕捉鎖存器(TIC1、TIC2、TIC3) 7.3.3 輸入信號沿檢測邏輯(113) 7.3.4 輸入捕捉中斷(113) 7.4 輸出比較功能(114) 7.4.1 概述(114) 7.4.2 輸出比較功能使用的寄存器(116) 7.4.3 輸出比較示例(118) 7.5 脈沖累加器(119) 7.5.1 概述(119) 7.5.2 脈沖累加器控制和狀態寄存器(121) 8 A/D轉換系統 8.1 電荷重新分布技術與逐次逼近算法(125) 8.1.1 基本電路(125) 8.1.2 A/D轉換逐次逼近算法原理(130) 8.2 M68HC11中A/D轉換的實現方法(131) 8.2.1 逐次逼近A/D轉換器(131) 8.2.2 控制寄存器(132) 8.2.3 系統控制邏輯(135)? 9 單片機的內部操作 9.1 用立即> 圖書前言 美國Motorola公司從80年代中期開始推出的M68HC11系列單片機是當今功能最強、性能/價格比最好的八位單片微計算機之一。在美國,它已被廣泛地應用于教學和各種工業控制系統中。? 該單片機有豐富的I/O功能,完善的系統保護功能和軟件控制的節電工作方式 。它的指令系統與早期Motorola單片機MC6801等兼容,同時增加了91條新指令。其中包含16位乘法、除法運算指令等。 為便于用戶開發和應用M68HC11單片機,Motorola公司提供了多種開發工具。M68HC11 EVB (Evaluation Board)性能評估板就是一種M68HC11系列單片機的廉價開發工具。它既可用來 調試用戶程序,又可在仿真方式下運行。為方便用戶,M68HC11 EVB可與IBM?PC連接 ,借助于交叉匯編、通信程序等軟件,在IBM?PC上調試程序。? 本書分三部分(共15章)介紹了M68HC11的結構和基本原理、開發工具-EVB及開發應用實例等。第一部分(1~9章),介紹M68HC11的結構和基本原理。包括概述,系統配置與工作方式、CPU和存儲器、復位和中斷、指令系統、I/O、定時器系統和脈沖累加器、A/D轉換系統、單片機的內部操作等。第二部分(10~11章),介紹M68HC11 EVB的原理和技術特性以及EVB的應用。第三部分(12~15章),介紹M68HC11的開發與應用技術。包括基本的編程練習、應用程序設計、接口實驗、接口設計及應用等。 讀者通過學習本書,不僅可了解M68HC11的硬件、軟件,而且可了解使用EVB開發和應用M68HC11單片機的方法。在本書的第三部分專門提供了一部分實驗和應用程序。? 本書系作者張寧作為高級訪問學者,應邀在美國馬薩諸塞州洛厄爾大學(University of Massachusetts Lowell)工作期間完成的。全書由張寧執筆。在編著過程中,美國洛厄爾大學的R·代克曼教授?(Professor Robert J. Dirkman)多次與張寧一起討論、研究,并提供部分資料及實驗數據。參加編寫和審校等工作的還有王云霞、孫曉芳、劉安魯、張籍、來安德、張楊等同志。? 為將M68HC11系列單片機盡快介紹給我國,美國Motorola公司的Terrence M.S.Heng先生曾大力支持本書的編著和出版。在此表示衷心感謝。
上傳時間: 2013-10-27
上傳用戶:rlgl123
大數的模運算。 a^b % m a可以為1000位的大數,b,m在int 范圍內
上傳時間: 2014-01-01
上傳用戶:heart520beat
VK元泰原廠LED的面板驅動產品主要應用于段式和點陣式LED的顯示驅動包括但不局限以下產品: 儀表顯示、大小家電、標志牌、健身器材顯示面板等,同時涉及顯示器控制器、雙斜率與顯示驅動ADC及顯示器驅動計數器相關產品,產品具備顯示、背光、按鍵掃描、單線、兩線及三線通訊等不同特色。LED面板顯示驅動控制芯片/段式和點陣式LED顯示驅動專家。樣品免費,大量原裝現貨!歡迎加Q索取產品PDF資料。 VK元泰原廠LED顯示屏驅動主要大量應用于以下這些產品簡介: 1:VCR、VCD、DVD 及家庭影院等產品的顯示屏驅動。 2:電磁爐、微波爐、冰箱、空調 、家庭影院等產品的高段位顯示屏驅動。 3:電子產品LED顯示屏驅動,電子秤及小家電產品的顯示屏驅動。 4:機頂盒、各種家電設備、智能電表等數碼管、多段位顯示屏驅動 VK1628概述 VK1628 是 1/5~1/8 占空比的 LED 顯示控制驅動電路。由 10 根段輸出、4 根柵輸出、3 根段/柵輸出,1 個顯示存儲器、控制電路、鍵掃描電路組成了一個高可靠性的單片機外圍 LED 驅動電路。串行數據通過4線串行接口輸入到 VK1628采用 SOP28 的封裝形式。 通訊接口:STB/CLK/DIO 電源電壓:5V(4.5~5.5V) 驅動點陣:70/52 共陰驅動:10段7位/13段4位 共陽驅動:7段10位 按鍵:10x2 封裝SOP28 VK1629A概述 VK1629A 是LED(發光二極管顯示器)驅動控制專用電路,內部集成有MCU 數字接口、數據鎖存器、LED 高壓驅動等電路。主要應用于冰箱、空調、家庭影院等產品的高段位顯示屏驅動。 通訊接口:STB/CLK/DIO 電源電壓:5V(4.5~5.5V) 驅動點陣:128 共陰驅動:16段8位 共陽驅動:8段16位 按鍵:--- 封裝SOP32 VK1629B概述 VK1629B 是 LED(發光二極管顯示器)驅動控制專用電路,內部集成有 MCU 數字接口、數據鎖存器、鍵盤掃描、LED 高壓驅動等電路。主要應用于冰箱、空調、家庭影院等產品的高段位顯示屏驅動。 通訊接口:STB/CLK/DIO 電源電壓:5V(4.5~5.5V) 驅動點陣:112 共陰驅動:14段8位 共陽驅動:8段14位 按鍵:8x2 封裝SOP32 VK1629C 概述 VK1629C 是帶鍵盤掃描接口的 LED(發光二極管顯示器)驅動控制專用電路,內部集成有 MCU 數字接口、數據鎖存器、LED 高壓驅動、鍵盤掃描等電路。主要應用于冰箱、空調、家庭影院等產品的高段位顯示屏驅動。 通訊接口:STB/CLK/DIO 電源電壓:5V(4.5~5.5V) 驅動點陣:120 共陰驅動:15段8位 共陽驅動:8段15位 按鍵:8x1 封裝SOP32 VK1629D 概述 VK1629D 是 LED(發光二極管顯示器)驅動控制專用電路,內部集成有 MCU 數字接口、數據鎖存器、LED 高壓驅動等電路。主要應用于冰箱、空調、家庭影院等產品的高段位顯示屏驅動。 通訊接口:STB/CLK/DIO 電源電壓:5V(4.5~5.5V) 驅動點陣:96 共陰驅動:12段8位 共陽驅動:8段12位 按鍵:8x4 封裝SOP32 VK1640 概述 VK1640 是一款 LED(發光二極管顯示器)驅動控制專用電路,內部集成有 MCU 數字接口、數據鎖存器、LED 高壓驅動。本產品采用 CMOS 工藝,主要應用于小型 LED 顯示屏驅動。 通訊接口: CLK/DIN 電源電壓:5V(4.5~5.5V) 驅動點陣:128 共陰驅動:8段16位 共陽驅動:16段8位 按鍵:--- 封裝SOP28 VK1640B概述 ----- SSOP24 超小封裝體積方便開發設計,更低成本單價! VK1640B 是一款 LED(發光二極管顯示器)驅動控制專用電路,內部集成有 MCU 數字接口、 數據鎖存器、LED 高壓驅動。本產品采用 CMOS 工藝,主要應用于小型 LED 顯示屏驅動。 通訊接口: CLK/DIN 電源電壓:5V(4.5~5.5V) 驅動點陣:96 共陰驅動:8段12位 共陽驅動:12段8位【封裝小,價格低】封裝SSOP24 VK1650概述 VK1650 是一種帶鍵盤掃描電路接口的 LED 驅動控制專用電路。內部集成有 MCU 輸入輸出控制數字接口、數據鎖存器、LED 驅動、鍵盤掃描、輝度調節等電路。本芯片性能穩定、質量可靠、抗干擾能力強,可適應于 24 小時長期連續工作的應用場合。 通訊接口: SCL/SDA 電源電壓:5V(3.0~5.5V) 驅動點陣:8x16 共陰驅動:8段4位 共陽驅動:4段8位 按鍵:7x4 封裝SOP16/DIP16 VK1651概述 VK1651 是一種帶鍵盤掃描接口的 LED(發光二極管顯示器)驅動控制專用電路,內部集成有 MCU 數字接口、數據鎖存器、LED 高壓驅動、鍵盤掃描等電路。本產品性能優良,質量可靠。主要應用于電磁爐。微波爐及小家電產品的顯示屏驅動。 通訊接口: SCL/SDA 電源電壓:5V(3.0~5.5V) 驅動點陣:8x14 共陰驅動:7段4位 共陽驅動:4段7位 按鍵:7x4 封裝SOP16/DIP16 VK1668概述 VK1668 是 1/5~1/8 占空比的 LED 顯示控制驅動電路。由 10 根段輸出、4 根柵輸出、3 根段/柵輸出,1 個顯示存儲器、控制電路、鍵掃描電路組成了一個高可靠性的單片機外圍 LED 驅動電路。串行數據通過4線串行接口輸入到 VK1668采用 SOP24 的封裝形式。 通訊接口:STB/CLK/DIO 電源電壓:5V(4.5~5.5V) 驅動點陣:70/52 共陰驅動:10段7位/13段4位 共陽驅動:7段10位 按鍵:10x2 封裝SOP24 VK6932概述 VK6932 是一款 LED(發光二極管顯示器)驅動控制專用電路,內部集成有 MCU 數字接口、數據鎖存器、LED 高壓驅動。本產品采用 CMOS 工藝,主要應用于 LED 顯示屏驅動。 通訊接口:STB/CLK/DIN 電源電壓:5V(4.5~5.5V) 驅動點陣:128 共陰驅動:8段16位17.5/140mA 共陽驅動:16段8位 按鍵:--- 封裝SOP32 VK16K33 概述 --- RAM映射16*8 LED控制器驅動器,帶按鍵控制 VK16K33是一個內存映射和多功能LED控制器驅動程序。最大顯示設備中的段是128個模式(16個SEG 和 8個COM),矩陣鍵為13*3(最大值)。掃描路。VK16K33的軟件配置特點使其適用于多個LED應用包括LED模塊和顯示子系統。VK16K33與大多數微控制器兼容,并且通過雙線雙向I2c總線進行通信。 內存映射的LED控制器及驅動器 通訊接口:SCL/SDA 電源電壓:5V(4.5V~5.5V) 驅動點陣:128/96/64 共陰驅動:16段8位/12段8位/8段8位 共陽驅動:8段16位/8段12位/8段8位 LCD/LED液晶控制器及驅動器系列 芯片簡介如下: RAM映射LCD控制器和驅動器系列 VK1024B 2.4V~5.2V 6seg*4com 6*3 6*2 偏置電壓1/2 1/3 S0P-16 VK1056B 2.4V~5.2V 14seg*4com 14*3 14*2 偏置電壓1/2 1/3 SOP-24/SSOP-24 VK1072B 2.4V~5.2V 18seg*4com 18*3 18*2 偏置電壓1/2 1/3 SOP-28 VK1072C 2.4V~5.2V 18seg*4com 18*3 18*2 偏置電壓1/2 1/3 SOP-28 VK1088B 2.4V~5.2V 22seg*4com 22*3 偏置電壓1/2 1/3 QFN-32L(4MM*4MM) VK0192 2.4V~5.2V 24seg*8com 偏置電壓1/4 LQFP-44 VK0256 2.4V~5.2V 32seg*8com 偏置電壓1/4 QFP-64 VK0256B 2.4V~5.2V 32seg*8com 偏置電壓1/4 LQFP-64 VK0256C 2.4V~5.2V 32seg*8com 偏置電壓1/4 LQFP-52 VK1621S-1 2.4V~5.2V 32*4 32*3 32*2 偏置電壓1/2 1/3 LQFP44/48/SSOP48/SKY28/DICE裸片 VK1622B 2.7V~5.5V 32seg*8com 偏置電壓1/4 LQFP-48 VK1622S 2.7V~5.5V 32seg*8com 偏置電壓1/4 LQFP44/48/52/64/QFP64/DICE裸片 VK1623S 2.4V~5.2V 48seg*8com 偏置電壓1/4 LQFP-100/QFP-100/DICE裸片 VK1625 2.4V~5.2V 64seg*8com 偏置電壓1/4 LQFP-100/QFP-100/DICE VK1626 2.4V~5.2V 48seg*16com 偏置電壓1/5 LQFP-100/QFP-100/DICE (高品質 高性價比:液晶顯示驅動IC 原廠直銷 工程技術支持!) (所有型號全部封裝均有現貨,歡迎加Q查詢 191 888 5898 許生) 高抗干擾LCD液晶控制器及驅動系列 VK2C21A 2.4~5.5V 20seg*4com 16*8 偏置電壓1/3 1/4 I2C通訊接口 SOP-28 VK2C21B 2.4~5.5V 16seg*4com 12*8 偏置電壓1/3 1/4 I2C通訊接口 SOP-24 VK2C21C 2.4~5.5V 12seg*4com 8*8 偏置電壓1/3 1/4 I2C通訊接口 SOP-20 VK2C21D 2.4~5.5V 8seg*4com 4*8 偏置電壓1/3 1/4 I2C通訊接口 NSOP-16 VK2C22A 2.4~5.5V 44seg*4com 偏置電壓1/2 1/3 I2C通訊接口 LQFP-52 VK2C22B 2.4~5.5V 40seg*4com 偏置電壓1/2 1/3 I2C通訊接口 LQFP-48 VK2C23A 2.4~5.5V 56seg*4com 52*8 偏置電壓1/3 1/4 I2C通訊接口 LQFP-64 VK2C23B 2.4~5.5V 36seg*8com 偏置電壓1/3 1/4 I2C通訊接口 LQFP-48 VK2C24 2.4~5.5V 72seg*4com 68*8 60*16 偏置電壓1/3 1/4 1/5 I2C通訊接口 LQFP-80 超低功耗LCD液晶控制器及驅動系列 VKL060 2.5~5.5V 15seg*4com 偏置電壓1/2 1/3 I2C通訊接口 SSOP-24 VKL128 2.5~5.5V 32seg*4com 偏置電壓1/2 1/3 I2C通訊接口 LQFP-44 VKL144A 2.5~5.5V 36seg*4com 偏置電壓1/2 1/3 I2C通訊接口 TSSOP-48 VKL144B 2.5~5.5V 36seg*4com 偏置電壓1/2 1/3 I2C通訊接口 QFN48L (6MM*6MM) 靜態顯示LCD液晶控制器及驅動系列 VKS118 2.4~5.2V 118seg*2com 偏置電壓 -- 4線通訊接口 LQFP-128 VKS232 2.4~5.2V 116seg*2com 偏置電壓1/1 1/2 4線通訊接口 LQFP-128 內存映射的LED控制器及驅動器 VK1628 --- 通訊接口:STB/CLK/DIO 電源電壓:5V(4.5~5.5V) 驅動點陣:70/52 共陰驅動:10段7位/13段4位 共陽驅動:7段10位 按鍵:10x2 封裝SOP28 VK1629 --- 通訊接口:STB/CLK/DIN/DOUT 電源電壓:5V(4.5~5.5V) 驅動點陣:128 共陰驅動:16段8位 共陽驅動:8段16位 按鍵:8x4 封裝QFP44 VK1629A --- 通訊接口:STB/CLK/DIO 電源電壓:5V(4.5~5.5V) 驅動點陣:128 共陰驅動:16段8位 共陽驅動:8段16位 按鍵:--- 封裝SOP32 VK1629B --- 通訊接口:STB/CLK/DIO 電源電壓:5V(4.5~5.5V) 驅動點陣:112 共陰驅動:14段8位 共陽驅動:8段14位 按鍵:8x2 封裝SOP32 VK1629C --- 通訊接口:STB/CLK/DIO 電源電壓:5V(4.5~5.5V) 驅動點陣:120 共陰驅動:15段8位 共陽驅動:8段15位 按鍵:8x1 封裝SOP32 VK1629D --- 通訊接口:STB/CLK/DIO 電源電壓:5V(4.5~5.5V) 驅動點陣:96 共陰驅動:12段8位 共陽驅動:8段12位 按鍵:8x4 封裝SOP32 VK1640 --- 通訊接口: CLK/DIN 電源電壓:5V(4.5~5.5V) 驅動點陣:128 共陰驅動:8段16位 共陽驅動:16段8位 按鍵:--- 封裝SOP28 VK1650 --- 通訊接口: SCL/SDA 電源電壓:5V(3.0~5.5V) 驅動點陣:8x16 共陰驅動:8段4位 共陽驅動:4段8位 按鍵:7x4 封裝SOP16/DIP16 VK1668 ---通訊接口:STB/CLK/DIO 電源電壓:5V(4.5~5.5V) 驅動點陣:70/52 共陰驅動:10段7位/13段4位 共陽驅動:7段10位 按鍵:10x2 封裝SOP24 VK6932 --- 通訊接口:STB/CLK/DIN 電源電壓:5V(4.5~5.5V) 驅動點陣:128 共陰驅動:8段16位17.5/140mA 共陽驅動:16段8位 按鍵:--- 封裝SOP32 VK16K33 --- 通訊接口:SCL/SDA 電源電壓:5V(4.5V~5.5V) 驅動點陣:128/96/64 共陰驅動:16段8位/12段8位/8段8位 共陽驅動:8段16位/8段12位/8段8位 按鍵:13x3 10x3 8x3 封裝SOP20/SOP24/SOP28 (所有型號全部封裝均有現貨,歡迎加Q查詢 191 888 5898 許生) 以上介紹內容為IC參數簡介,難免有錯漏,且相關IC型號眾多,未能一一收錄。歡迎聯系索取完整資料及樣品! 請加許先生 QQ:191 888 5898聯系!謝謝 生意無論大小,做人首重誠信!本公司全體員工將既往開來,再接再厲。爭取為各位帶來更專業的技術支持,更優質的銷售服務,更高性價比的好產品.竭誠希望能與各位客戶朋友深入溝通,攜手共進,共同成長,合作共贏!謝謝。
上傳時間: 2019-07-03
上傳用戶:shubashushi66
b+樹源碼,b+樹結構,刪除,插入,等值搜索,範圍搜索等功能
標簽:
上傳時間: 2015-03-23
上傳用戶:tianjinfan
除法器的設計本文所采用的除法原理是:對于八位無符號被除數A,先對A轉換成高八位是0低八位是A的數C,在時鐘脈沖的每個上升沿C 向左移動一位,最后一位補零,同時判斷C的高八位是否大于除數B,如是則C的高八位減去B,同時進行移位操作,將C的第二位置1。否則,繼續移位操作。經過八個周期后,所得到的C的高八位為余數,第八位為商。從圖(1)可清楚地看出此除法器的工作原理。此除法器主要包括比較器、減法器、移位器、控制器等模塊。
上傳時間: 2014-11-23
上傳用戶:皇族傳媒
溫度華氏轉變攝氏 #include <stdio.h> #include <stdlib.h> enum x {A,B,C,D,E} int main(void) { int a=73,b=85,c=66 { if (a>=90) printf("a=A等級!!\n") else if (a>=80) printf("73分=B等級!!\n") else if (a>=70) printf("73分=C等級!!\n") else if (a>=60) printf("73分=D等級!!\n") else if (a<60) printf("73分=E等級!!\n") } { if (b>=90) printf("b=A等級!!\n") else if (b>=80) printf("85分=B等級!!\n") else if (b>=70) printf("85分=C等級!!\n") else if (b>=60) printf("85分=D等級!!\n") else if (b<60) printf("85分=E等級!!\n") } { if (c>=90) printf("c=A等級!!\n") else if (c>=80) printf("66分=B等級!!\n") else if (c>=70) printf("66分=C等級!!\n") else if (c>=60) printf("66分=D等級!!\n") else if (c<60) printf("66分=E等級!!\n") } system("pause") return 0 }
上傳時間: 2014-11-10
上傳用戶:wpwpwlxwlx
溫度華氏轉變攝氏 #include <stdio.h> #include <stdlib.h> enum x {A,B,C,D,E} int main(void) { int a=73,b=85,c=66 { if (a>=90) printf("a=A等級!!\n") else if (a>=80) printf("73分=B等級!!\n") else if (a>=70) printf("73分=C等級!!\n") else if (a>=60) printf("73分=D等級!!\n") else if (a<60) printf("73分=E等級!!\n") } { if (b>=90) printf("b=A等級!!\n") else if (b>=80) printf("85分=B等級!!\n") else if (b>=70) printf("85分=C等級!!\n") else if (b>=60) printf("85分=D等級!!\n") else if (b<60) printf("85分=E等級!!\n") } { if (c>=90) printf("c=A等級!!\n") else if (c>=80) printf("66分=B等級!!\n") else if (c>=70) printf("66分=C等級!!\n") else if (c>=60) printf("66分=D等級!!\n") else if (c<60) printf("66分=E等級!!\n") } system("pause") return 0 }
上傳時間: 2013-12-12
上傳用戶:亞亞娟娟123
除法器的設計本文所采用的除法原理是:對于八位無符號被除數A,先對A轉換成高八位是0低八位是A的數C,在時鐘脈沖的每個上升沿C 向左移動一位,最后一位補零,同時判斷C的高八位是否大于除數B,如是則C的高八位減去B,同時進行移位操作,將C的第二位置1。否則,繼續移位操作。經過八個周期后,所得到的C的高八位為余數,第八位為商。從圖(1)可清楚地看出此除法器的工作原理。此除法器主要包括比較器、減法器、移位器、控制器等模塊。
上傳時間: 2017-07-20
上傳用戶:redmoons
function g=distance_classify(A,b) 距離判別法程序。 輸入已分類樣本A(元胞數組),輸入待分類樣本b 輸出待分類樣本b的類別g 注:一般還應計算回代誤差yita 輸入已知分類樣本的總類別數n 每類作為元胞數組的一列
標簽: distance_classify function 判別 分類
上傳時間: 2013-11-25
上傳用戶:yyyyyyyyyy
/****************temic*********t5557***********************************/ #include <at892051.h> #include <string.h> #include <intrins.h> #include <stdio.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //STC12C2051AD的SFR定義 sfr WDT_CONTR = 0xe1;//stc2051的看門狗?????? /**********全局常量************/ //寫卡的命令 #define write_command0 0//寫密碼 #define write_command1 1//寫配置字 #define write_command2 2//密碼寫數據 #define write_command3 3//喚醒 #define write_command4 4//停止命令 #define TRUE 1 #define FALSE 0 #define OK 0 #define ERROR 255 //讀卡的時間參數us #define ts_min 250//270*11.0592/12=249//取近似的整數 #define ts_max 304//330*11.0592/12=304 #define t1_min 73//90*11.0592/12=83:-10調整 #define t1_max 156//180*11.0592/12=166 #define t2_min 184//210*11.0592/12=194 #define t2_max 267//300*11.0592/12=276 //***********不采用中斷處理:采用查詢的方法讀卡時關所有中斷****************/ sbit p_U2270B_Standby = P3^5;//p_U2270B_Standby PIN=13 sbit p_U2270B_CFE = P3^3;//p_U2270B_CFE PIN=6 sbit p_U2270B_OutPut = P3^7;//p_U2270B_OutPut PIN=2 sbit wtd_sck = P1^7;//SPI總線 sbit wtd_si = P1^3; sbit wtd_so = P1^2; sbit iic_data = P1^2;//lcd IIC sbit iic_clk = P1^7; sbit led_light = P1^6;//測試綠燈 sbit led_light1 = P1^5;//測試紅燈 sbit led_light_ok = P1^1;//讀卡成功標志 sbit fengmingqi = P1^5; /***********全局變量************************************/ uchar data Nkey_a[4] = {0xA0, 0xA1, 0xA2, 0xA3};//初始密碼 //uchar idata card_snr[4]; //配置字 uchar data bankdata[28] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7}; //存儲卡上用戶數據(1-7)7*4=28 uchar data cominceptbuff[6] = {1,2,3,4,5,6};//串口接收數組ram uchar command; //第一個命令 uchar command1;// //uint temp; uchar j,i; uchar myaddr = 8; //uchar ywqz_count,time_count; //ywqz jishu: uchar bdata DATA; sbit BIT0 = DATA^0; sbit BIT1 = DATA^1; sbit BIT2 = DATA^2; sbit BIT3 = DATA^3; sbit BIT4 = DATA^4; sbit BIT5 = DATA^5; sbit BIT6 = DATA^6; sbit BIT7 = DATA^7; uchar bdata DATA1; sbit BIT10 = DATA1^0; sbit BIT11 = DATA1^1; sbit BIT12 = DATA1^2; sbit BIT13 = DATA1^3; sbit BIT14 = DATA1^4; sbit BIT15 = DATA1^5; sbit BIT16 = DATA1^6; sbit BIT17 = DATA1^7; bit i_CurrentLevel;//i_CurrentLevel BIT 00H(Saves current level of OutPut pin of U2270B) bit timer1_end; bit read_ok = 0; //緩存定時值,因用同一個定時器 union HLint { uint W; struct { uchar H;uchar L; } B; };//union HLint idata a union HLint data a; //緩存定時值,因用同一個定時器 union HLint0 { uint W; struct { uchar H; uchar L; } B; };//union HLint idata a union HLint0 data b; /**********************函數原型*****************/ //讀寫操作 void f_readcard(void);//全部讀出1~7 AOR喚醒 void f_writecard(uchar x);//根據命令寫不同的內容和操作 void f_clearpassword(void);//清除密碼 void f_changepassword(void);//修改密碼 //功能子函數 void write_password(uchar data *data p);//寫初始密碼或數據 void write_block(uchar x,uchar data *data p);//不能用通用指針 void write_bit(bit x);//寫位 /*子函數區*****************************************************/ void delay_2(uint x) //延時,時間x*10us@12mhz,最小20us@12mhz { x--; x--; while(x) { _nop_(); _nop_(); x--; } _nop_();//WDT_CONTR=0X3C;不能頻繁的復位 _nop_(); } ///////////////////////////////////////////////////////////////////// void initial(void) { SCON = 0x50; //串口方式1,允許接收 //SCON =0x50; //01010000B:10位異步收發,波特率可變,SM2=0不用接收到有效停止位才RI=1, //REN=1允許接收 TMOD = 0x21; //定時器1 定時方式2(8位),定時器0 定時方式1(16位) TCON = 0x40; //設定時器1 允許開始計時(IT1=1) TH1 = 0xfD; //FB 18.432MHz 9600 波特率 TL1 = 0xfD; //fd 11.0592 9600 IE = 0X90; //EA=ES=1 TR1 = 1; //啟動定時器 WDT_CONTR = 0x3c;//使能看門狗 p_U2270B_Standby = 0;//單電源 PCON = 0x00; IP = 0x10;//uart you xian XXXPS PT1 PX1 PT0 PX0 led_light1 = 1; led_light = 0; p_U2270B_OutPut = 1; } /************************************************/ void f_readcard()//讀卡 { EA = 0;//全關,防止影響跳變的定時器計時 WDT_CONTR = 0X3C;//喂狗 p_U2270B_CFE = 1;// delay_2(232); //>2.5ms /* // aor 用喚醒功能來防碰撞 p_U2270B_CFE = 0; delay_2(18);//start gap>150us write_bit(1);//10=操作碼讀0頁 write_bit(0); write_password(&bankdata[24]);//密碼block7 p_U2270B_CFE =1 ;// delay_2(516);//編程及確認時間5.6ms */ WDT_CONTR = 0X3C;//喂狗 led_light = 0; b.W = 0; while(!(read_ok == 1)) { //while(p_U2270B_OutPut);//等一個穩定的低電平?超時判斷? while(!p_U2270B_OutPut);//等待上升沿的到來同步信號檢測1 TR0 = 1; //deng xia jiang while(p_U2270B_OutPut);//等待下降沿 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//定時器晚啟動10個周期 //同步頭 if((324 < a.W) && (a.W < 353)) ;//檢測同步信號1 else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //等待上升沿 while(!p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//b.N1<<=8; if(a.B.L < 195);//0.5p else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //讀0~7塊的數據 for(j = 0;j < 28;j++) { //uchar i; for(i = 0;i < 16;i++)//8個位 { //等待下降沿的到來 while(p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_max < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2;//先左移再賦值 b.B.L += 0xc0; i++; } else if(t1_min < a.B.L/*)&&(a.B.L < t1_max)*/)//0.5p { b.W >>= 1; b.B.L += 0x80; } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; while(!p_U2270B_OutPut);//上升 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_min < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2; i++; } else if(t1_min < a.B.L/*a.W)&&(a.B.L < t1_max)*/)//0.5P //else if(!(a.W==0)) { b.W >>= 1; //temp+=0x00; //led_light1=0;led_light=1;delay_2(40000); } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; } //取出奇位 DATA = b.B.L; BIT13 = BIT7; BIT12 = BIT5; BIT11 = BIT3; BIT10 = BIT1; DATA = b.B.H; BIT17 = BIT7; BIT16 = BIT5; BIT15 = BIT3; BIT14 = BIT1; bankdata[j] = DATA1; } read_ok = 1;//讀卡完成了 read_error: _nop_(); } } /***************************************************/ void f_writecard(uchar x)//寫卡 { p_U2270B_CFE = 1; delay_2(232); //>2.5ms //psw=0 standard write if (x == write_command0)//寫密碼:初始化密碼 { uchar i; uchar data *data p; p = cominceptbuff; p_U2270B_CFE = 0; delay_2(31);//start gap>330us write_bit(1);//寫操作碼1:10 write_bit(0);//寫操作碼0 write_bit(0);//寫鎖定位0 for(i = 0;i < 35;i++) { write_bit(1);//寫數據位1 } p_U2270B_CFE = 1; led_light1 = 0; led_light = 1; delay_2(40000);//測試使用 //write_block(cominceptbuff[4],p); p_U2270B_CFE = 1; bankdata[20] = cominceptbuff[0];//密碼存入 bankdata[21] = cominceptbuff[1]; bankdata[22] = cominceptbuff[2]; bankdata[23] = cominceptbuff[3]; } else if (x == write_command1)//配置卡參數:初始化 { uchar data *data p; p = cominceptbuff; write_bit(1);//寫操作碼1:10 write_bit(0);//寫操作碼0 write_bit(0);//寫鎖定位0 write_block(cominceptbuff[4],p); p_U2270B_CFE= 1; } //psw=1 pssword mode else if(x == write_command2) //密碼寫數據 { uchar data*data p; p = &bankdata[24]; write_bit(1);//寫操作碼1:10 write_bit(0);//寫操作碼0 write_password(p);//發口令 write_bit(0);//寫鎖定位0 p = cominceptbuff; write_block(cominceptbuff[4],p);//寫數據 } else if(x == write_command3)//aor //喚醒 { //cominceptbuff[1]操作碼10 X xxxxxB uchar data *data p; p = cominceptbuff; write_bit(1);//10 write_bit(0); write_password(p);//密碼 p_U2270B_CFE = 1;//此時數據不停的循環傳出 } else //停止操作碼 { write_bit(1);//11 write_bit(1); p_U2270B_CFE = 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /************************************/ void f_clearpassword()//清除密碼 { uchar data *data p; uchar i,x; p = &bankdata[24];//原密碼 p_U2270B_CFE = 0; delay_2(18);//start gap>150us //操作碼10:10xxxxxxB write_bit(1); write_bit(0); for(x = 0;x < 4;x++)//發原密碼 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT0); DATA >>= 1; } } write_bit(0);//鎖定位0:0 p = &cominceptbuff[0]; write_block(0x00,p);//寫新配置參數:pwd=0 //密碼無效:即清除密碼 DATA = 0x00;//停止操作碼00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /*********************************/ void f_changepassword()//修改密碼 { uchar data *data p; uchar i,x,addr; addr = 0x07;//block7 p = &Nkey_a[0];//原密碼 DATA = 0x80;//操作碼10:10xxxxxxB for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } for(x = 0;x < 4;x++)//發原密碼 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT7); DATA >>= 1; } } write_bit(0);//鎖定位0:0 p = &cominceptbuff[0]; write_block(0x07,p);//寫新密碼 p_U2270B_CFE = 1; bankdata[24] = cominceptbuff[0];//密碼存入 bankdata[25] = cominceptbuff[1]; bankdata[26] = cominceptbuff[2]; bankdata[27] = cominceptbuff[3]; DATA = 0x00;//停止操作碼00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /***************************子函數***********************************/ void write_bit(bit x)//寫一位 { if(x) { p_U2270B_CFE = 1; delay_2(32);//448*11.0592/120=42延時448us p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26寫1 } else { p_U2270B_CFE = 1; delay_2(92);//192*11.0592/120=18 p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26寫0 } } /*******************寫一個block*******************/ void write_block(uchar addr,uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)//block0數據 { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } DATA = addr <<= 5;//0地址 for(i = 0;i < 3;i++) { write_bit(BIT7); DATA <<= 1; } } /*************************************************/ void write_password(uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)// { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } } /*************************************************/ void main() { initial(); TI = RI = 0; ES = 1; EA = 1; delay_2(28); //f_readcard(); while(1) { f_readcard(); //讀卡 f_writecard(command1); //寫卡 f_clearpassword(); //清除密碼 f_changepassword(); //修改密碼 } }
標簽: 12345
上傳時間: 2017-10-20
上傳用戶:my_lcs