單片機應用技術c語言版答案
單片機c語言編程入門教程說難不難,說易不易,學習單片機c語言首先就要明白這兩樣東西是啥?單片機入門編程主要是學C語言,其次就是電路跟編程語言。
單片機c語言編程學習必看的關於模電,數電,電路這三本書,為接下來的學習做鋪墊。看書的目的是因為網上的教程太多太混雜,容易帶偏,做單片機軟體開發其實只要看得懂電路原理就可以了。
簡介
單片機又稱單片微控制器,它不是完成某一個邏輯功能的晶元,而是把一個計算機系統集成到一個晶元上。相當於一個微型的計算機,和計算機相比,單片機只缺少了I/O設備。
概括的講:一塊晶元就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。
單片機的使用領域已十分廣泛,如智能儀表、實時工控、通訊設備、導航系統、家用電器等。
從二十世紀九十年代開始,單片機技術就已經發展起來,隨著時代的進步與科技的發展,目前該技術的實踐應用日漸成熟,單片機被廣泛應用於各個領域。現如今,人們越來越重視單片機在智能電子技術方面的開發和應用,單片機的發展進入到新的時期。
無論是自動測量還是智能儀表的實踐,都能看到單片機技術的身影。當前工業發展進程中,電子行業屬於新興產業,工業生產中人們將電子信息技術成功運用,讓電子信息技術與單片機技術相融合,有效提高了單片機應用效果。
作為計算機技術中的一個分支,單片機技術在電子產品領域的應用,豐富了電子產品的功能,也為智能化電子設備的開發和應用提供了新的出路,實現了智能化電子設備的創新與發展。
以上內容參考:網路-單片機
❷ 單片機應用技術c語言版 李文華編著的課後習題答案
是這個嗎?
❸ 單片機技術及應用(基於Proteus的匯編和c語言版)求大神指導。問題在圖
#include<reg51.h>
#include<INTRINS.h>
#defineu16unsignedint
#defineu8unsignedchar
#definePin00x01
#definePin10x02
#definePin20x04
#definePin30x08
#definePin40x10
#definePin50x20
#definePin60x40
#definePin70x80
/****************************************/
voidinit() //初始化函數
{TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
}/////////////////////////
sbitkey0=P1^0;
sbitkey1=P3^0;
#defineK_RUNPin1
#defineK_ZTPin0
u8key=0xff;//消抖後的有效按鍵值
u8key_down=0x00;//按鍵下降沿掃描結果,1有效
u8key_up=0x00; //上升沿掃描結果,1有效
u8key_sc=0xff;//上次掃描的按鍵值
//按鍵掃描程序
voids(){
staticu8temp0;
staticu8ms;
u8temp=0;
if(key0==1)temp|=Pin0;
if(key1==1)temp|=Pin1;
if(temp==temp0){//按鍵消抖
if(++ms>=5){//連續5次掃描的值一樣,則認為是穩定狀態
key=temp;
ms=0;
}
}else{
temp0=temp;
ms=0;
}
key_down=key_sc&(~key);//下降沿掃描
key_up=(~key_sc)&key;//下降沿掃描
key_sc=key;
}
///////////////////////
#defineSIZE13
codeu8table[]={~Pin0,~Pin1,~Pin2,~Pin3,~Pin4,~Pin5,~Pin6,~Pin7,
~Pin6,~Pin5,~Pin4,~Pin2,~Pin1,};
u8ledzt=Pin7;//led任務zt為0xff表示待機
u16ledjs;//倒計時
voidled_start(){//啟動程序
if((ledzt&(~Pin7))!=0)ledjs=500;
ledzt&=0x3f;
}
voidled_zt(){//暫停程序
ledzt|=Pin6;
}
voidledcx(){//led流程程序
if(ledzt<SIZE){
if(ledjs==0){
ledzt++;
if(ledzt==SIZE)ledzt=0;
ledjs=500;
}
P2=table[ledzt];
}
}/***********************************/
voidmain()//主函數
{
init();//系統初始化
TR0=1;//定時器開始計時
while(1){
s();//讀取按鍵值
if((key_down&K_RUN)!=0){
led_start();
}
if((key_down&K_ZT)!=0){
led_zt();
}
ledcx();
}
}
/****************************/
voidtimer0()interrupt1//1ms定時器
{
TH0=(65536-1000)/256;//重載初值
TL0=(65536-1000)%256;
if((ledjs>0)&&(ledzt<0xc0))ledjs--;
}
❹ 單片機編程知識九大問答知識
單片機編程知識九大問答知識
為幫助大家更加了解單片機編程知識,下面,我為大家分享單片機編程知識問答知識,希望對大家有所幫助!
搞單片機開發,一定要會C嗎?
答:匯編語言是一種用文字助記符來表示機器指令的符號語言,是最接近機器碼的一種語言。其主要優點是佔用資源少、程序執行效率高。但是不同的CPU,其匯編語言可能有所差異,所以不易移植。
對於目前普遍使用的RISC架構的8bit MCU來說,其內部ROM、RAM、STACK等資源都有限,如果使用C語言編寫,一條C語言指令編譯後,會變成很多條機器碼,很容易出現ROM空間不夠、堆棧溢出等問題。而且一些單片機廠家也不一定能提供C編譯器。而匯編語言,一條指令就對應一個機器碼,每一步執行什麼動作都很清楚,並且程序大小和堆棧調用情況都容易控制,調試起來也比較方便。所以在資源較少單片機開發中,我們還是建議採用匯編語言比較好。
而C語言是一種編譯型程序設計語言,它兼顧了多種高級語言的特點,並具備匯編語言的功能。C語言有功能豐富的庫函數、運算速度快、編譯效率高、有良好的可移植性,而且可以直接實現對系統硬體的控制。C語言是一種結構化程序設計語言,它支持當前程序設計中廣泛採用的由頂向下結構化程序設計技術。此外,C語言程序具有完善的模塊程序結構,從而為軟體開發中採用模塊化程序設計方法提供了有力的保障。因此,使用C語言進行程序設計已成為軟體開發的一個主流。用C語言來編寫目標系統軟體,會大大縮短開發周期,且明顯地增加軟體的可讀性,便於改進和擴充,從而研製出規模更大、性能更完備的系統。
綜上所述,用C語言進行單片機程序設計是單片機開發與應用的必然趨勢。所以作為一個技術全面並涉足較大規模的軟體系統開發的單片機開發人員最好能夠掌握基本的C語言編程。
當開發一個較復雜而又開發時間短的項目時,用C還是用匯編開發好?
答:對於復雜而開發時間緊的項目時,可以採用C語言,但前提是要求對該MCU系統的C語言和C編譯器非常熟悉,特別要注意該C編譯系統所能支持的數據類型和演算法。雖然C語言是最普遍的一種高級語言,但不同的MCU廠家其C語言編譯系統是有所差別的,特別是在一些特殊功能模塊的操作上。如果對這些特性不了解,那調試起來就有的煩了,到頭來可能還不如用匯編來的快。
C語言和匯編語言在開發單片機時各有哪些優缺點?
答:匯編語言是一種用文字助記符來表示機器指令的符號語言,是最接近機器碼的.一種語言。其主要優點是佔用資源少、程序執行效率高。但是不同的CPU,其匯編語言可能有所差異,所以不易移植。
C語言是一種結構化的高級語言。其優點是可讀性好,移植容易,是普遍使用的一種計算機語言。缺點是佔用資源較多,執行效率沒有匯編高。
對於目前普遍使用的RISC架構的8bit MCU來說,其內部ROM、RAM、STACK等資源都有限,如果使用C語言編寫,一條C語言指令編譯後,會變成很多條機器碼,很容易出現ROM空間不夠、堆棧溢出等問題,而且一些單片機廠家也不一定能提供C編譯器。而匯編語言,一條指令就對應一個機器碼,每一步執行什幺動作都很清楚,並且程序大小和堆棧調用情況都容易控制,調試起來也比較方便。所以在單片機開發中,我們還是建議採用匯編語言比較好。
如果對單片機C語言有興趣,HOLTEK的單片機就有提供C編譯器,可以到HOLTEK的網站免費下載使用。
C或匯編語言可以用於單片機,C++能嗎?
答:在單片機開發中,主要是匯編和C,沒有用C++的。
在教學中要用到8088和196晶元單片機教材,請問哪裡可以找到關於這方面的書或資料?
答:有關這方面的教材,大學里常用的一本是《IBM-PC匯編語言程序設計》清華大學出版社出版的,在網上以及書店都是可以找到的,另外網上還可以搜索到很多其他的教材如:《微機原理及匯編語言教程》(楊延雙 張曉冬 等編著 )和《16/32 位微機原理、匯編語言及介面技術》(作者: 鍾曉捷 陳濤 ,機械工業出版社 出版)等,可以在較大型的科技書店裡查找或者直接從網上訂購。
初學者到底是應該先學C還是匯編?
答:對於單片機的初學者來說,應該從匯編學起。因為匯編語言是最接近機器碼的一種語言,可以加深初學者對單片機各個功能模塊的了解,從而打好扎實的基礎。
我是一名武漢大學電子科技大3的學生,學了電子線路、數字邏輯、匯編和介面、C語言,但是總是感覺很迷茫,覺好象什麼都不會,怎麼辦?
答:大學過程是一個理論過程,實踐的機會比較少,往往會造成理論與實踐相脫節,這是國內大學教育系統的通病,不過對於學生來說切不可好高騖遠。一般從大三會開始接觸到一些專業課程,電子相關專業會開設相關的單片機應用課程並且會有簡單的實驗項目,那麼要充分把握實驗課的機會,多多地實際上機操作練習。平時可以多看看相關的電子技術雜志網站,看看別人的開發經驗,硬體設計方案以及他人的軟體設計經驗。有可能的話,還可以參加一些電子設計大賽,藉此機會2-3個人合作做一個完整系統,會更有幫助。到了大四畢業設計階段,也可以選擇相關的課題作些實際案例增長經驗。做什麼事情都有個經驗的積累過程,循序漸進。
請問作為學生,如何學好單片機?
答:學習好單片機,最主要的是實踐,在實踐中增長經驗。在校學生的話,實踐機會的確會比較少,但是有機會的話,可以畢業實習選擇相關的課題,這樣就可以接觸到實際的項目。而且如果單片機微機原理是一門主課的話,相信學校會安排比較多的實踐上機機會。有能力的話,可以找一些相關兼職工作做做,會更有幫助。而且單片機開發應用需要軟硬體結合,所以不能只滿足於編程技巧如何完美,平時也要注意硬體知識的積累,多上上電子論壇網站,買一些相關雜志。可能的話,可以到電子市場去買一些小零件,自己搭一個小系統讓它工作起來。
如何才能成為單片機的高手啊?
答:要成為單片機高手,應該多實踐,時常關注單片機的發展趨勢;經常上一些相關網站,從那裡可以找到許多有用的資料。
;❺ 單片機應用技術的目錄
序
前言
第1章單片機技術概述
1.1微型計算機的基本概念、組成及分類
1.1.1微型計算機的組成
1.1.2微型計算機的分類
1.2單片機技術發展的特點
1.3常見的單片機
1.3.18051內核的單片機
1.3.2其他單片機
1.4單片機的應用
1.4.1單片機的應用范圍
1.4.2單片機應用系統的設計
1.5習題
第2章STC12C5410AD的增強型8051內核
2.1STC12C5410AD單片機的引腳
2.2STC12C5410AD單片機的結構
2.2.1STC12C5410AD單片機的內部結構
2.2.2CPU結構
2.3STC12C5410AD單片機的存儲器
2.3.1存儲器空間及存儲器
2.3.2數據Flash存儲器的操作
2.4習題
第3章數字輸入/輸出埠
3.1STC12C5410AD單片機的I/O口及工作模式
3.2STC12C5410AD單片機I/O口的結構
3.3STC12C5410AD單片機I/O口的使用
3.4習題
第4章指令系統
4.1助記符語言
4.1.1助記符語言概述
4.1.2操作碼
4.1.3操作數
4.2指令格式及分類
4.2.1匯編語言的概念及格式
4.2.2指令代碼的存儲格式
4.2.3指令中的符號約定
4.3定址方式
4.4數據傳送類指令
4.4.1數據傳送指令
4.4.2數據交換指令
4.4.3棧操作指令
4.5邏輯操作類指令
4.5.1對累加器A進行的邏輯操作
4.5.2雙操作數邏輯操作指令
4.6算術運算類指令
4.6.1加減運算指令
4.6.2乘除運算指令
4.6.3增量、減量指令
4.6.4二一十進制調整指令
4.7位操作指令
4.7.1位數據傳送指令
4.7.2位狀態控制指令
4.7.3位邏輯操作指令
4.7.4位條件轉移指令
4.8控制轉移類指令
4.9習題
第5章匯編語言程序設計及模擬調試
5.1匯編語言程序設計基礎知識
5.1.1偽指令
5.1.2匯編語言程序設計的一般步驟和基本框架
5.2匯編語言程序設計舉例
5.3利用KeilμVision2集成開發環境調試程序
5.3.1KeilμVision2集成開發環境簡介
5.3.2KeilμVision2集成開發環境中調試8051單片機匯編語言程序的方法
5.4利用ISP工具將程序下載到單片機中驗證程序
5.4.1ISP下載程序的運行過程
5.4.2使用ISP工具下載程序的步驟
5.5習題
第6章C語言程序設計及模擬調試
6.1C語言程序設計基礎
6.1.1數據類型
6.1.2基本運算符和表達式
6.1.3C語言程序設計
6.1.4函數
6.1.5指針
6.1.6結構與聯合
6.1.7枚舉和位運算
6.1.8預處理
6.2KeilC對ANSIC的擴展
6.2.1KeilC51擴展關鍵字
6.2.2KeilC51指針
6.2.3KeilC51函數
6.2.4STC12C5410AD單片機C51程序框架
6.3習題
第7章中斷
7.1中斷的概念
7.2STC12C5410AD單片機的中斷系統及其管理
7.2.1中斷源及其優先順序管理
7.2.2單片機中斷處理過程
7.2.3中斷請求的撤除
7.2.4關於外部中斷
7.2.5中斷程序編程舉例
7.2.6中斷使用過程中需要注意的問題
7.3習題
第8章定時/計數器
8.1STC12C5410AD單片機的定時/計數器
8.1.1定時/計數器的結構及工作原理
8.1.2定時/計數器方式和控制寄存器
8.1.3定時/計數器的工作方式
8.1.4定時/計數器量程的擴展
8.1.5定時/計數器編程舉例
8.1.6定時/計數器應用中應注意的問題
8.2STC12C5410AD的PCA/PWM模塊
8.2.1PCA/PWM模塊的結構
8.2.2PCA/PWM模塊的特殊功能寄存器
8.2.3PCA/PWM模塊的工作模式
8.2.4PCA/PWM模塊韻應用
8.3習題
第9章串列通信
9.1通信的一般概念
9.1.1並行通信與串列通信
9.1.2串列通信的兩種基本方式
9.2STC12C5410AD單片機的串列介面
9.2.1串列介面的控制寄存器
9.2.2串列介面的工作方式
9.2.3多處理機通信
9.2.4波特率的設定
9.2.5串列介面通信應用舉例
9.2.6計算機與單片機之間的串列通信
9.3STC112C5410AD單片機的SPI介面
9.3.1SPI介面的結構
9.3.2SPI介面的數據通信
9.3.3SPI介面的應用舉例
9.4習題
第10章模數轉換器
10.1模數轉換器的結構及相關寄存器
10.1.1模數轉換器的結構
10.1.2參考電壓源
10.1.3與ADC有關的特殊功能寄存器
10.2模數轉換器的應用
10.3習題
第11章復位、省電方式和時鍾
11.1復位
11.2省電方式
11.2.1省電方式的控制
11.2.2省電方式的應用
11.3時鍾
11.4習題
第12章單片機應用系統設計舉例
12.1系統要求
12.2需求分析
12.3系統硬體設計
12.4系統軟體設計
12.5習題
附錄
附錄ASTC12C5410AD單片機指令表
附錄BSTC12C5410單片機寄存器定義文件STC12.INC內容
附錄CSTC12C5410AD單片機寄存器頭文件STC12.H內容
附錄DMSComm控制項簡介
附錄E邏輯符號對照表
附錄FASCII碼表
參考文獻
……
❻ 單片機應用技術,C語言。例題。用while和for兩種循環方式書1.3.5.7.9……99的所有數
C語言是一種編程語言,是一種工業嵌入式微控制器是一個平台,是用C語言鏈接編輯代碼的工具,然後移植到單個晶元上運行,兩者的結合,使該最終移植的程序到(如手機,MP4,MP3等)上的嵌入式產品,請確保您可以完美兼容,運行。
這是當然的關系,具體操作比較復雜,如微控制器(MCU已經過時了,主要是在一系列與ARM開發板,為博創科技2410開發板)是什麼系統(Linux的\ WinCE的等),並且即使在這些系統中使用的編輯版本,等等,等等,這些有差異,但總的過程是相同的。
❼ 用單片機C語言控制6位密碼鎖。要求有一個清除鍵和確認鍵,密碼輸錯了會有報警音。請高手幫助了
我找到了一個,來自《51單片機C語言應用技術開發大全》
SCH圖正在繪制中。。。
#include <REGX51.H>//51單片機的頭文件
typedef unsigned char uchar; //類型定義,定義uchar類型
typedef unsigned int uint; //類型定義,定義uint 類型
//鍵盤子程序相關說明。
#define BLANKCHAR 10 //定義空白常量
#define PCHAR 11 //定義字元P常量
#define OPENCHAR 12 //定義開鎖字元常量
#define ALARMCHAR 13 //定義字元A常量
#define LINECHAR 14 //定義字元-常量
#define BACKKEY 0X0D //定義退格鍵常量
#define ENTERKEY 0X0F //定義確認鍵常量
#define LOCKKEY 0X0E //定義閉鎖鍵常量
#define NO_KEY 20 //定義無按鍵返回值
#define KEYPORT P2 //定義鍵盤埠
//Delay1Ms
void Delay1Ms()
{
uint i;
for (i=0;i<1000;i++);
}
//定義按鍵掃描碼表 按鍵掃描時,4位列線和4位行線組成位元組數據表
uchar code KEYCODE[]=
{0XEE,0XED,0XEB,0XE7,
0XDE,0XDD,0XDB,0XD7,
0XBE,0XBD,0XBB,0XB7,
0X7E,0X7D,0X7B,0X77};
uchar KeyPre; //保存上次掃描按鍵的鍵值
uchar KeyUp;
//用於控制按鍵去抖動操作。1:掃描時去抖動 2:等待釋放 3:釋放時去抖動。
#define LEDPORT P0 //定義顯示器段碼輸出埠
#define LEDCON P1 //定義顯示器位控制埠
uchar code SEGCODE[]=
{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,// 0~9的共陽極代碼
0xff,//不顯示的共陽極段碼
0X8C,//字元P的共陽極段碼
0X8F,//┝的共陽極段碼
0X88,//字元A的共陽極段碼
0XBF,//字元-的共陽極段碼
};
//定義LED位碼控制碼
uchar code BITCODE[]={0Xfe,0Xfd,0Xfb,0Xf7,0Xef,0Xdf,0Xbf,0X7f};
uchar DispBuf[6]; //保存顯示的字元
bit DispNormal; //控制顯示時,是正常顯示還是閃爍顯示。
uchar DispCnt; //控制閃爍顯示時的頻率。
#define SHORT_TIME 10 //蜂鳴器響200ms
#define LONG_TIME 100 //蜂鳴器響2s
#define LONGER_TIME 9000 //蜂鳴器響3 minutes
sbit ALARMCON=P3^4; //定義報警控制引腳
bit AlarmEnable; //是否報警或聲音提示
uint AlarmTime; //控制報警時間長度
sbit LOCKCON=P3^3; //定義電子鎖控制引腳
uchar code PassWord[]={1,2,3,4,5}; //定義初時密碼表
uchar PassInBuf[6]; //保存輸入的密碼字元
uchar PassPosi; //用戶輸入密碼字元存放在PassInBuf[]的位置。
bit TimerBit; //20ms定時時間到
uchar SysMode; //系統所處模式 0:輸入密碼模式 1:報警模式 2:開鎖模式
uchar ErrorCnt; //用戶連續輸入密碼出錯次數。
/*
入口參數:
FillChar:寫入緩沖區的字元
出口參數:無
*/
void Fill_Buf(uchar FillChar)
{
uchar i;
for(i=0;i<6;i++)
{
DispBuf[i]=FillChar;//用字元FillChar填充DispBuf[i]
PassInBuf[i]=FillChar; //用字元FillChar填充PassInBuf [i]
}
}
void Fill_Buf_P()
{
Fill_Buf(BLANKCHAR); // DispBuf[1..5]= ' '
DispBuf[0]=PCHAR;// DispBuf[0]='P'
}
void Fill_Buf_O()
{
Fill_Buf(BLANKCHAR); // DispBuf[1..5]= ' '
DispBuf[0]=OPENCHAR; // DispBuf[0]='┝'
}
void Fill_Buf_A()
{
Fill_Buf(LINECHAR); // DispBuf[1..5]= ' -----'
DispBuf[0]=ALARMCHAR; // DispBuf[0]='A'
}
/*
入口參數:
DispPosi:要顯示數據的LED號。
DispChar:要顯示的內容。
出口參數:無
*/
void Disp_Led_Sin(uchar DispChar,uchar DispPosi)
{
LEDPORT=SEGCODE[DispChar];//輸出顯示段碼
LEDCON&=BITCODE[DispPosi];//輸出顯示位碼
Delay1Ms(); //延時1MS
LEDCON|=0X3F;//關閉顯示器
}
/*(2)關閉顯示函數Disp_Led_OFF。
函數Disp_Led_OFF在顯示器上顯示空白字元,主要用在閃爍顯示。函數通過6次調用Disp_Led_Sin實現所需功能。代碼如下:*/
void Disp_Led_OFF()
{
uchar i;
LEDCON|=0X3F;// 關閉顯示器
for(i=0;i<6;i++)
{
Disp_Led_Sin(BLANKCHAR,i);//逐個顯示空白字元
}
}
void Disp_Led_All()
{
uchar i;
LEDCON|=0X3F; // 關閉顯示器
for(i=0;i<6;i++)
{
Disp_Led_Sin(DispBuf[i],i); //顯示DispBuf[]中的數值
}
}
void Disp_LED()
{
DispCnt++;
DispCnt%=10;
if(DispCnt==0)
{
DispNormal=~DispNormal;//200ms將閃爍顯示控制位取反
}
if(SysMode==1)
{//報警模式,閃爍顯示
if(!DispNormal)
{
Disp_Led_OFF();//顯示空白字元
return;
}
}
Disp_Led_All();//顯示DispBuf[]中的數值
}
/*
入口參數:
stime:蜂鳴器鳴叫時間。
出口參數:無
*/
void Sys_Speaker(uint stime)
{
AlarmEnable=1;//允許報警
AlarmTime=stime;//報警時間長短
}
void Sys_Alarm()
{
if(AlarmEnable==1)
{//允許報警
ALARMCON=0;//報警
AlarmTime--;
if(AlarmTime==0)
{//停止報警時間到
AlarmEnable=0;
ALARMCON=1;//禁止報警
if(SysMode==1)
{//報警發生在模式1時,要返回模式0
SysMode=0;
Fill_Buf_P();//顯示P
}
}
}
}
/*
入口參數:無
出口參數:按鍵值或無按鍵
*/
uchar Find_Key()
{
uchar KeyTemp,i;
KEYPORT=0xf0;//行線輸出0,列線輸出全1
KeyTemp=KEYPORT;//讀按鍵埠值
if(KeyTemp==0xf0)
return NO_KEY;//無鍵按下,返回
KEYPORT=KeyTemp|0x0f;//列線輸出,行線輸入
KeyTemp=KEYPORT;//讀取按鍵埠值
for(i=0;i<16;i++)
{
if(KeyTemp==KEYCODE[i])//根據按鍵埠掃描值,查找按鍵值
return i;//返回按鍵值
}
return NO_KEY;
}
/*
入口參數:無
出口參數:按鍵值或無按鍵
*/
uchar Scan_Key()
{
uchar KeyTemp;
KeyTemp=Find_Key();//掃描鍵盤,獲得按鍵值
if(KeyTemp==NO_KEY)
{
if(KeyUp<2)
{//無按鍵按下,返回
KeyUp=0;
return NO_KEY;
}
if(KeyUp==2)
{//按鍵要釋放,延時去抖動
KeyUp=3;
return NO_KEY;
}
if(KeyUp==3)
{//按鍵釋放,返回鍵值
KeyUp=0;
return KeyPre;
}
}
else
{
if(KeyUp==0)
{//有鍵按下,保存鍵值
KeyUp=1;
KeyPre=KeyTemp;
}
else if(KeyUp==1)
{//去抖動後,再次測到有按鍵按下
if( KeyPre==KeyTemp)
KeyUp=2;
else
KeyPre=KeyTemp;
} else if(KeyUp==3)
{//等待按鍵釋放
KeyUp=2;
}
}
return NO_KEY;
}
/*
入口參數:
Key:按鍵值
出口參數:無
*/
void Key_Process(uchar Key)
{
uchar i;
if(Key==NO_KEY)
return ;//無按鍵,不處理
switch(SysMode)
{
case 0://輸入密碼
switch(Key)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
DispBuf[PassPosi]=LINECHAR;//顯示'-'
PassInBuf[PassPosi]=Key;//保存用戶輸入的密碼
if(PassPosi<5)
PassPosi++;//調整密碼輸入位置
Sys_Speaker(SHORT_TIME);//發按鍵提示音
break;
case BACKKEY://退格鍵
DispBuf[PassPosi]=BLANKCHAR;//顯示' '
PassInBuf[PassPosi]=BLANKCHAR;//清除當前位置的密碼
if(PassPosi>1)
PassPosi--;//調整顯示位置
Sys_Speaker(SHORT_TIME);//發按鍵提示音
break;
case ENTERKEY://確定按鍵
for(i=0;i<5;i++)
{//比較用戶輸入密碼與系統預設密碼是否一致
if(PassInBuf[i+1]!=PassWord[i])
break;
}
if(i>=5)
{//輸入密碼正確
Fill_Buf_O();//顯示開鎖狀態
PassPosi=1;
LOCKCON=1;//開鎖
ErrorCnt=0;
Sys_Speaker(LONG_TIME);//發長提示音
SysMode=2;//轉模式2
}
else
{
ErrorCnt++;//出錯次數加一
if(ErrorCnt>2)
{//次數超過3次
ErrorCnt=0;
Fill_Buf_A();//顯示報警狀態
PassPosi=1;
Sys_Speaker(LONGER_TIME);//發報警音
SysMode=1;
}
else
{//出錯次數少於3次,用戶重新輸入
Fill_Buf_P();
PassPosi=1;
Sys_Speaker(LONG_TIME);
}
}
break;
case LOCKKEY://閉鎖鍵
Fill_Buf_P();//顯示P
PassPosi=1;
Sys_Speaker(SHORT_TIME);
break;
}
break;
case 2://開鎖狀態
if(Key==LOCKKEY)
{//用戶按動閉鎖按鍵
Fill_Buf_P();
SysMode=0;
LOCKCON=0;//閉鎖
Sys_Speaker(SHORT_TIME);
}
break;
}
}
void Ini_Timer0()
{
TMOD&=0XF0;
TMOD|=0X01;// 初始化T0,模式1
TR0=0;
TH0=(65536-20000)/256;//T0 賦計數初值
TL0=(65536-20000)%256;
TR0=1;//啟動T0
ET0=1;//允許T0中斷
}
void Timer0() interrupt 1
{
TR0=0;
TH0=(65536-20000)/256; //T0 賦計數初值
TL0=(65536-20000)%256;
TR0=1;
TimerBit=1;//定時時間到
}
void Ini_System()
{
PassPosi=1;
LOCKCON=0;//閉鎖
Ini_Timer0();//初始化T0
Fill_Buf_P();
EA=1;//允許系統中斷
}
void main()
{
uchar KeyTemp;
Ini_System();
while(1)
{
if (TimerBit==1)
{//定時時間到
Disp_LED();//刷新顯示器
Sys_Alarm();//報警處理
KeyTemp=Scan_Key();//掃描按鍵
Key_Process(KeyTemp);//按鍵處理
TimerBit=0;
}
}
}
❽ 求一份單片機答辯的題目和答案 我不是計算機專業的 簡單點就行 拜託了
36個單片機新手入門問題:
1.C語言和匯編語言在各有哪些優缺點? 2.初學者到底是應該先學C還是匯編? 3.400減50,程序語句上如何SUBB實現呢?
4.C或匯編語言可以用於單片機,C++能嗎? 5.學了電子線路、C語言,感覺很迷茫怎麼辦? 6.8位機還能延續多久?
7.搞單片機開發,一定要會C嗎? 8.請問作為學生,如何學好單片機? 9.單片機的生命期還有多長?
10.當開發項目時,用C還是用匯編開發好? 11.如何才能才為單片機的高手啊? 12.符合44PIN的80系列8位單片機的MCU有哪些?
13.請問那裡可以找到關於這方面的書或資料? 14.女性是否適合單片機軟體編程這個行業? 15.從51轉到ARM會有困難嗎?
16.利用單片機來檢測手機電池的充放電時間? 17.商業級晶元和工業及晶元區別? 18.低輻射MCU方法可以減少,有什麼別的方法?
19.96單片機開發系統時,有那些注意事項? 20.在demo板上采樣電壓,不穩定,如何消除? 21.在車載DVD系統中,如何設計電子防震系統?
22.電子防震技術中,那些IC或器件可供選擇? 23.如何進行編程可以減少程序的bug? 24.有沒有解決加密問題又不破壞MCU的方法?
25.如何使生成的代碼具有和匯編一樣的效率? 26.ARM單片機和哪種內核的單片機比較接近? 27.測試中如何用一些比較短的時間來工作?
28.怎樣學51系列和cygnal系列單片機? 29.MCU的C匯編優化,有沒有通用的原則? 30.估計一個演算法的MIPS,有什麼好的途徑?
31.AT89S51,復位RAM中數據被修改怎麼回事? 32.如何正確的使用IO功能? 33.頻率100kHz,atiny15那樣怎麼辦?
34.單片機應注重哪幾個方面的學習? 35.汽車電子用的單片機是8位多,還是32位? 36.復用技術的使用在實際應用?
單片機開發與測試中的若干問題:
1.Delta-Sigma軟體測量方式,是什麼概念? 2.要同時用到3個counter,該怎麼辦? 3.有那些是衡量系統的穩定性的標准?
4.晶元封裝及設計過程中需要注意哪些問題? 5.抗干擾技術對軟體的可靠性懷疑。怎麼辦? 6.12M的晶振,如何實現480MB/S數據傳輸率呢?
7.當今世界單片機的應用與發展有什麼不同? 8.在中國,單片機在哪方面有較好的前景? 9.高性能要求選用32位單片機這樣認為對嗎?
10.51系統過渡到ARM系統,要注意哪些事情? 11.能否用PSoC嵌入式代替部分單片機系統呢? 12.如何理解如下概念?
13.選用什麼型號的模擬器和編程器比較好? 14.C語言是否有關於位操作地址的指令 15.運行以後看到從R0到R7都被佔用,為什麼?
16.發電機系統,如何設計復位電路? 17.PWM做到100kHz(8bit上)的方法有哪些? 18.醫療電子應用的最多是幾位單片機?
19.單片機對modem要進行哪些初始化操作? 20.各種各樣的輸入怎麼樣與MCU進行通訊? 21.兩個串口、16KEPROM、512個位元組的RAM?
22.在嵌入式開發中軟體抗干擾有哪些問題? 23.語音識別會不會是單片機下個消費熱點? 24.如何設計實現低成本測量電池組電壓的裝置?
25.調用函數會不會影響定時/計數器的中斷? 26.LM4915是什麼IC? 27.被嵌套高優先順序中斷程序怎樣返回主程序?
28.介紹單片機系統的故障自診斷的知識? 29.如何使照的相片可存儲,看的時候可調用? 30.將Wafer切割成Die後對單個Die進行?
31.測試整個MCU的功能是否正確? 32.如何測試程序達到較高的測試覆蓋度? 33.MCU邏輯電路是測試合格的,如何解決呢?
34.cpu一直工作在復位狀態,會不會有問題? 35.單片機系統的故障相關問題如何解決?
holtek單片機常見問題匯總:
1.Holtek的數據手冊在哪裡下載? 2.學單片機缺乏實踐經驗請問該怎麼辦? 3.A/D,D/A的采樣速率有什麼優勢?
4.學習ARM是否比學習單片機更有使用前景? 5.遙控的編解碼思路和設計流程是怎樣的? 6.Holtek的編程語句是否就是C51或是相關?
7.介紹一下MCU的測試方法。 8.如何理解預分頻,12時鍾模式等概念? 9.請推薦配套的編譯模擬燒錄的硬軟體?
10.在ARM編程中又應當如何? 11.採用什麼方法來測試單片機系統的可靠性? 12.Holtek如何解決測試問題?
13.如何使PIC16F87X寬溫度內誤差盡量小呢? 14.如何適當的喂狗,判定軟體的運行時間? 15.RISC架構的單片機它的主要特點是什麼?
16.RISC和CISC內核的MCU,代碼量哪個更大? 17.單片機的I/O口何種狀態能獲得最低功耗? 18.Holtek和AT系列編程有何不同?
19.Holtek和AT系列有FLASH可電擦寫的型號? 20.Holtek的單片機能符合該項應用要求嗎? 21.WATCHDOG功能的單片機,如何確認其起作用?
22.能否推薦一個DSP或現在的高速單片機? 24.HT48系列單片機支持串列通信嗎? 24.返回指令能用跳轉指令替代到主程序中?
8051單片機設計教程與實例---指令基礎教程
1.什麼是嵌入式系統? 2.單片機的技術發展歷史 3.單片機應用模式
4.單片機的開發過程 5.單片機基本結構與工作原理 6.單片機內部資源的配置
7.單片機的外部特性 8.80C51的SFR運行管理模式 9.單片機I/O埠及應用特性
10.80C51單片機存儲器系統及操作方式 11.單片機的指令系統 12.指令系統的分類與速解
13.指令的應用例子 14.定時器/計數器的基本結構與操作方式 15.定時器/計數器的SFR
16.定時器/計數器的工作方式 17.定時器/計數器的編程和使用 18.定時器應用舉例
19.中斷系統的基本組成 20.中斷系統中的SFR 21.中斷響應的自主操作過程
22.串列口的基本結構與操作方式 23.串列口的特殊功能寄存器 24.串口的工作方式
25.匯編語言應用程序設計的一般格式 26.匯編語言程序的設計方法 27.常用的偽指令
28.簡單結構程序 29.分支結構程序 30.循環結構程序
31.子程序結構程序 32.查表程序 33.查鍵程序
8051單片機設計教程與實例---實戰程序設計
1.顯示程序 2. 閃爍LED小燈的設計 3.閃爍LED控製程序
4.閃爍LED小燈主程序圖 5.數碼管時鍾電路的設計 6.8*8點陣LED字元顯示器的設計
7.數碼管時鍾電路的主程序 8.8路輸入模擬信號數值顯示電路的設計 9.8路輸入模擬信號數值顯示電路程序
10.單鍵學習型遙控器的設計 11.單鍵學習型遙控器的程序 12.電路主要性能指標
13.15路電器遙控器的設計 14.系統的功能實現方法 15.遙控發射及接收控製程序流程圖
16.自行車里程/速度計的設計 17.系統內存的規劃 18.系統內存設計的程序
19.自動往返行駛小汽車的設計 20.系統內存資源的分配 21.系統內存資源的程序
22.遙控小汽車的設計 23.發射板控製程序的設計 24.汽車行駛信息發送與接收器的設計
25.數據幀的編碼格式及發送/接收過程 26.汽車行駛信息發送與接收器的程序 27.系統調試中的問題及解決方法
28.數控調頻發射台的設計 29.內存單元的使用要求 30.W78E516B的功能特點
31.W78E516B中的幾個特殊寄存器 32.W78E516B在線編程的規則 33.W78E516B在線編程的硬體電路
34.W78E516B應用系統的程序設計 35.電子定時器的設計 36.電子定時器的程序
37.電子定時器的程序流程圖
單片機相關資料
(1)單片機的圖形化編程方法探討 (2)單片機應用編程技巧 (3)單片機自身的抗干擾若干措施
(4)單片機編音樂程序 (5)用89C51做直流穩壓電源 (6)王款主流CMMB調諧器的特性比較
(7)紅外遙控器控制的風扇溫控器 (8)用單片機89S52製作計算器 (9)用單片機89C51製作程式控制交換機
(10)數據採集和記錄系統單片機AT89C51 (11)簡單的製作AT89SXX的單片機教程板 (12)熱敏電阻溫度計:液晶版
(14)熱敏電阻溫度計 (15)使用DS1307的數字鬧鍾 (16)SPI快閃記憶體編程器的製作
(17)8051SBC單片機微處理器學習板 (18)Atmel 89系列編程器的製作 (19)ISP微控制器編程
(20)製作簡單的S51學習板 (21)89S52單片機開發板 (22)keil 與protues安裝的詳細步驟和說明
詳見:http://www.51c51.com/JIAOXUE4.HTM
❾ 單片機C語言應用技術題目求解答
你下載一個軟體。以後就不用再來問了。51單片機波特率計算軟體