1.這次設計實驗設計任務由五個模塊組成,分別是單片機系統的制作,數碼管顯示模塊的設計制作,鍵盤電路的設計與制作, 模數轉換電路的制作,數模轉換電路。完成各個單獨模塊的調試之后需要進行對整個系統程序的編寫以及各模塊之間的聯調工作。對于整個系統而言,進行了分模塊設計與測試的流程,以便減小聯調過程中發生錯誤的可能性。 2.1單片機模塊概述 首先我們制作的是整個系統中最為重要的一個部分—單片機模塊。本系統的單片機選擇了目前應用最為廣泛的51系列單片機。為了使單片機能夠完成更加復雜的工作,故必須對單片機的引腳功能進行擴展。為了實現系統功能,在單片機模塊中配置了數據/地址分離電路以及地址譯碼電路。具體來說,單片機模塊中使用了74LS373對地址數據進行鎖存,使用74LS138作為部分地址譯碼電路。然后利用JTAG適配器將電腦中編寫的程序下載至單片機中,并利用示波器對單片機的輸出信號進行檢測。 2.2單片機模塊設計電路圖#include "C8051F020.h"
- #include "absacc.h"
- #include "data_define.c "
- #include " Init_Device.c "
- #define CS0 XBYTE[0x0005]
- #define CS1 XBYTE[0x200A]
- #define CS2 XBYTE[0x4005]
- #define CS3 XBYTE[0x600A]
- #define CS4 XBYTE[0x8005]
- #define CS5 XBYTE[0xA00A]
- void main(void)
- {
- uchar a;
- Init_Device();
- while(1)
- {
- CS0=0x55;
- a=CS1;
- CS2=0xaa;
- a=CS3;
- CS4=0x55;
- a=CS5;
- }
- }
復制代碼
3.1 數碼管顯示電路模塊概述 我們主要進行了顯示電路的設計與制作。對于整個顯示模塊而言,主要通過4個7段數碼管,將測量到的溫度與由鍵盤輸入的目標溫度進行顯示。此外,在數碼管顯示模塊中,還使用了4個74LS273對單片機的輸出數據進行鎖存,使得單片機能夠依次對數碼管進行數據傳輸時其余數碼管上顯示的內容能夠得以保留。此外還利用74LS138譯碼器,對需要進行數據傳輸的數碼管進行選擇。 3.2 數碼管顯示電路模塊設計電路圖#include "C8051F020.h"
- #include "absacc.h"
- #include "data_define.c"
- #define LED1 XBYTE[0x0002] //0010
- #define LED2 XBYTE[0x0003] //0011
- #define LED3 XBYTE[0x0008] //1000
- #define LED4 XBYTE[0x0009] //1001
- #define TIMER 0x8000
- #include "Init_Device.c"
- unsigned char table[ ]={0xC0,0xF9,0xA4,0xB0,0x99,
- 0x92,0x82,0xF8,0x80,0x90};
- void delay(void)
- {
- unsigned int i;
- for(i=0;i<TIMER;++i);
- }
- void main(void)
- {
- unsigned char i;
- Init_Device();
- LED1=LED2=0xff;
- while(1)
- {
- for(i=0;i<10;++i)
- {
- LED1=table[i];
- LED2=table[i];
- LED3=table[i];
- LED4=table[i];
- delay( );
- delay( );
- delay( );
- delay( );
- delay( );
-
- }
- }
- }
復制代碼4.鍵盤模塊 4.1鍵盤模塊概述 由于在本次工程設計中,已經提供了現成的鍵盤模塊。故只需設計并制作鍵盤模塊對應的讀取電路即可。在本次實驗中,我們選擇了地址掃描模式。該模式的特點是通過74LS138芯片依次對鍵盤的第一到四行輸出低電平,并在次過程中讀取每列的電平,進而判斷出是哪行哪列的按鍵被按下了。在該模塊中使用到了一塊74LS244,是一塊3態8位緩沖器芯片,作為驅動信號芯片使用。通常單片機的I/O口輸出電流很小,而74LS244就是用來放大電流的。需要注意的是74LS244是單向的,在連接過程中不要接反。 4.2鍵盤讀取模塊電設計路圖#include "C8051F020.h"
- #include "absacc.h"
- #include "data_define.c"
- #define DP1 XBYTE[0x0002]
- #define DP2 XBYTE[0x0003]
- #define DP3 XBYTE[0x0008]
- #define DP4 XBYTE[0x0009]
- #define TIMER 0x8000
- #include "Init_Device.c"
- unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- void display(unsigned char x,unsigned char y)
- {
- DP3=table[x];
- DP4=table[y];
- DP1=table[x];
- DP2=table[y];
- }
-
- void main(void)
- {
- unsigned char l_val,r_val,r_state,temp,conter,x,c;
- int key;
- DP1=DP2=DP3=DP4=0xff;
- Init_Device();
- while(1)
- {
- key=0x0004;
- for(x=1;x<5;x++,key++)
- {
- c=XBYTE[key];
- if(r_state=~c&0x1f)
- {
- for(conter=1,temp=0x01;conter<6;++conter,temp=temp<<1)
- if((r_state&temp)!=0)
- {
- r_val=conter;
- l_val=x;
- display(l_val,r_val);
- }
- }
- }
- }
- }
復制代碼對于該程序,當按下鍵盤中的某一個鍵時,在數碼管上會依次顯示出所按下按鍵的行和列的值,由此可以判斷出鍵盤鍵值讀取模塊是否正常工作。 5.模數轉換電路 5.1 模數轉換電路概述 對于模數轉換電路,在該實驗中選用了ADC0804逐次逼近式A/D轉換芯片,可以滿足對于將輸入的0~+5V的模擬信號轉換為8位的數字量。其轉換結果與模擬輸入電壓關系由關系式確定。 5.2模數轉換電路設計電路圖 圖5-1 模數轉換電路設計電路圖 - #include "C8051F020.h"
- #include "absacc.h"
- #include "data_define.c"
- #define CS1 XBYTE[0x2000]
- #define TIMER 0x8000
- #include "Init_Device.c"
- void delay(void);
- void main(void)
- {
- unsigned char x;
- Init_Device();
- while(1) { CS1=x; delay(); x=CS1; delay(); }
- }
- void delay(void)
- {
- unsigned int i;
- for(i=0;i<TIMER;++i);
- }
復制代碼對于該程序,在調試過程中,將變量x的值加入到觀察窗口中,不斷改變測試臺的輸出電壓模擬量的值,檢查變量x的值是否與與其結果一致。(0V時近似對應數字量0,+5V時近似對應數字量255)需要注意的是在進行數模轉換前,要將變送器的可變電阻調整到合適的阻值。 5.數模轉換模塊 6.1數模轉換模塊概述 在數模轉換模塊中,使用了一塊DAC0832以及由兩個LM358級聯的運算放大器,實現對于輸入的0到100攝氏度數字量和-10V—+10V的模擬量進行一個轉換,進而對后續的半導體制冷片進行控制。
|