單片基礎開發 9_第1頁
單片基礎開發 9_第2頁
單片基礎開發 9_第3頁
單片基礎開發 9_第4頁
單片基礎開發 9_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

【藍橋杯】《單片機設計與開發》教學課件【共4篇】1.基礎篇;2.應用篇;3.器件篇;4.實戰篇。No.08驅動數碼管(2)dpgfedcba00000110DigitalTubeunsignedcharcodeSEGcode[]=//共陽數碼管段碼表0123456789AbCdEF

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,

0x88,0x83,0xc6,0xa1,0x86,0x8e};【REVIEW】共陰極字形“1”編碼示例:06H4位一體數碼管共陰數碼管內部結構(CC:commoncathode)共陽數碼管內部結構(CA:commonanode)4位一體數碼管驅動原理【REVIEW】編程方式選擇:【IO模式】J13:2-3【MM模式】J3:2-1//文件名user.h#defineLED_enP2=P2&0x1F|0x80#defineDTseg_enP2=P2&0x1F|0xE0#defineDTbit_enP2=P2&0x1F|0xC0#defineBEEP_enP2=P2&0x1F|0xA0#defineRELAY_enP2=P2&0x1F|0xA0#defineALL_offP2&=0x1F//文件名user.c#include“user.h”//共陽數碼管段碼表:0123456789//AbCdEF-(blank)unsignedcharcodeSEGcode[]=

{0xc0,0xf9,0xa4,0xb0,0x99,

0x92,

0x82,0xf8,0x80,0x90,0x88,0x80,

0xc6,0xc0,

0x86,0x8e,0xbf,0xff

};unsignedcharBRstate;//發光二極管驅動子程序:LED_drvvoidLED_drv(unsignedcharLEDdat){P0=LEDdat;LED_en;ALL_off;}//蜂鳴器驅動子程序:BEEP_on和BEEP_offvoidBEEP_on(void)

{BRstate

|=0x40;P0=BRstate;BEEP_en;ALL_off;}voidBEEP_off(void)

{BRstate&=0xBF;P0=BRstate;BEEP_en;

ALL_off;}//繼電器驅動子程序:RELAY_on和RELAY_onffvoidRELAY_on(void){BRstate|=0x10;P0=BRstate;RELAY_en;ALL_off;}voidRELAY_off(void){BRstate&=0xEF;P0=BRstate;RELAY_en;ALL_off;}//數碼管驅動子程序:DT_drvvoidDT_drv(unsignedchark,unsignedcharDIG){P0=0x01<<k;DTbit_en;ALL_off;P0=SEGcode[DIG];DTseg_en;ALL_off;}voidAllDT_off(void){P0=0xffDTbit_en;ALL_off;P0=0xff;DTseg_en;ALL_off;}//延時子函數:Delay1ms(1ms,@12MHz)voidDelay1ms(unsignedintxms){unsignedinti;while(xms--)for(i=0;i<628;i++);}//數碼顯示數據緩存數組,初設數據為”19491001”unsignedcharDTbuf[]={1,9,4,9,1,0,0,1};//頻率值顯示子程序(1)voidDispFreqValue(){DT_drv(0,DTbuf[0]);Delay1ms(2);

DT_drv(1,DTbuf[1]);Delay1ms(2);

DT_drv(2,DTbuf[2]);Delay1ms(2);

DT_drv(3,DTbuf[3]);Delay1ms(2);

DT_drv(4,DTbuf[4]);Delay1ms(2);

DT_drv(5,DTbuf[5]);Delay1ms(2);

DT_drv(6,DTbuf[6]);Delay1ms(2);

DT_drv(7,DTbuf[7]);Delay1ms(2);}

數碼管顯示刷新率分析:取刷新延時2ms時,完成8個數碼管刷新需要(約)16ms,故數碼管每秒能夠刷新60次以上。voidmain(){while(1)DispFreqValue();}【REVIEW】8位數碼管的動態掃描

(1.定義數碼管顯示數據緩沖區;

2.編寫動態掃描子程序;)//頻率值顯示子程序(2)voidDispFreqValue()

{unsignedchari;for(i=0;i<8;i++)

{

DT_drv(i,DTbuf[i]);

Delay1ms(2);

}}

【應用實踐】應用定時器T1(或T0)驅動8位數碼管STEP1:設置T1(或T0)為定時器,工作模式為0,對TMOD進行賦值;STEP2:設置定時間為2ms,計算定時初值,裝入TH1(或TH0)和TL1(或TL0);STEP3:開放定時器中斷ET1(或ET0),并開總中斷(EA);STEP4:設置TR1(或TR0)=1啟動定時器T1(或TR0)。2.定時器初始化子程序1.思路分析【12T】定時器初值如下:

TH1=(65536-2000)/256;TL1=(65536-2000)%256;注:OSC=12MHz時。

3.中斷服務程序STEP0:

定義數碼管序號靜態變量

DTno,并設初值為0xff;STEP1:數碼序號變量DTno加1;STEP2:截取后3位;STEP3:讀取數碼管顯示緩沖區相應位的數值,并驅動相當前數碼管顯示;4.主程序處理流程STEP1:定義數碼管顯示緩沖區數組;STEP2:開發板外圍設備初始化;STEP3:定時器T1/T0初始化;STEP3:空循環,等待定時器

T1/T0中斷。STEP1:定義數碼管顯示緩沖區數組;STEP2:開發板外圍設備初始化;STEP3:定時器T1(或T0)初始化;STEP3:空循環,等待定時器

T1(或T0)中斷。#include<reg52.h>#include"user.c"http://設置數碼管顯示數據緩存區,設顯示”19491001”unsignedcharDTbuf[]={1,9,4,9,1,0,0,1};//定時器T1初始化子程序voidTimer1init(){//IAP15:設置T1為模式0(16位定時,自動重裝初值)TMOD&=0x0f;//0000_XXXX

//2ms定時,[12T]賦初值TH1=(65536-2000)/256;TL1=(65536-2000)%256;ET1=1;

//允許T1中斷EA=1;

//開總中斷TR1=1;

//啟動T1

}

//定時器T1中斷服務程序

void

Timer1isr()interrupt3{

//定義數碼管序號變量,并賦初值為255staticunsignedcharDTno=0xff;

DTno++;

//數碼管序號變量加1

DTno&=0x07;//截取后3位//驅動當前數碼管顯示DT_drv(DTno,DTbuf[DTno]);}//主程序voidmain()

{BEEP_off();

RELAY_off();LED_drv(0xff);Timer1init();while(1);}【12T】應用定時器T1驅動8位數碼管#include<reg52.h>#include"user.c"sfrAUXR=0x8e;//設置數碼管顯示數據緩存區,設顯示”19491001”unsignedcharDTbuf[]={1,9,4,9,1,0,0,1};//定時器T1初始化子程序voidTimer1init(){//STC15:設置T1為模式0(16位定時,自動重裝方式)

AUXR|=0x40;//設置比特位T1x12=1

TMOD=0x0f;//0000_xxxx

//2ms定時,[1T]賦初值

AUXR=0x40;//設置為1T時鐘模式TH1=(65536-24000)/256;TL1=(65536-24000)%256;ET1=1;

//允許T1中斷EA=1;

//開總中斷

TR1=1;

}//啟動T1

//定時器T1中斷服務子程序void

Timer1isr()interrupt3{

//定義數碼管序號變量,并賦初值為255staticunsignedcharDTno=0xff;

DTno++;

//數碼管序號變量加1

DTno&=0x07;

//截取后3位//驅動當前數碼管顯示DT_drv(DTno,DTbuf[DTno]);}//主程序voidmain()

{BEEP_off();

RELAY_off();LED_drv(0xff);Timer1init();while(1);

}【1T】應用定時器T1驅動8位數碼管IAP15F2K61S2單片機定時/計數器T2的應用InteruptEnable#include<STC15F2K60S2.h>#include"user.c"http://設置數碼管顯示數據緩存區,設顯示”19491001”unsignedcharDTbuf[]={1,9,4,9,1,0,0,1};//定時器T2初始化子程序voidTimer2Init(void)

{

//設置T2為定時,12T模式

AUXR&=0xF3;

//1111_0011

//定時2ms@12MHz,賦初值

T2H=(65536-2000)/256;

T2L=(65536-2000)%256;

//啟動定時器2

AUXR|=0x10;}//定時器T2中斷服務子程序

voidTimer2isr()interrupt

12

{//定義數碼管序號變量,并賦初值為255staticunsignedcharDTno=0xff;

//數碼管序號變量加1

DTno++;//截取后3位

DTno&=0x07;//驅動當前數碼管顯示DT_drv(DTno,DTbuf[DTno]);}voidmain()//主程序{BEEP_off();RELAY_off();LED_drv(0xff);Timer2Init();IE2|=0x04;//允許T2中斷EA=1;//開總中斷

while(1);

}【12T】應用定時器T2驅動8位數碼管【工程實踐】驅動數碼信息流動顯示//文件名DTflow_disp.c#include<reg52.h>#include"user.c"http://共陽數碼管段碼表:”(滅)(滅)(滅)(滅)(滅)(滅)(滅)(滅)0123456789AbCdEF”unsignedcharcodeDTseg_tab[24]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xa1,0x86,0x8e};//共陽數碼管位碼表unsignedcharcodeDTbit_tab[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

//定時器T1初始化子程序voidTimer1Init(){//AUXR&=0xBF;//設置定時器T1為12T時鐘//設置T1為模式0(16位定時,自動重裝初值)TMOD&=0x0f;//位與后賦值

//2ms定時,[12T]賦初值TH1=(65536-2000)/256;TL1=(65536-2000)%256;

ET1=1;//允許T1中斷EA=1;//開放總中斷TR1=1;//啟動T1}voidTimer1isr()interrupt3{//定義數碼管序號變量,并賦初值為255staticunsignedcharDTno=0xff;staticunsignedcharoffset=0;//定義偏移指針staticunsignedchartimes=0;//中斷次數統計變量DTno++;//數碼管序號變量加1DTno&=0x07;//截取后3位DTseg_en;//打開段碼通道if((DTno+offset)<24)//指針沒有超出24(8位blank+16位數碼)P0=DTseg_tab[DTno+offset];//直接查找段碼elseP0=DTseg_tab[DTno+offset-24];//指針超過24位,折返查找段碼DTbit_en;//打開位碼通道P0=DTbit_tab[DTno];

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論