『壹』 大疆無人機屬於哪種單片機
大疆飛控肯定不會只用一個方案,基本上全球能用於無人機的方案都有用到。
大疆早期的飛控用的nxp的lpc1768,消費級的32位處理器。後面用了一段時間的fpga+dsp。18年後的產品發現其用了意法半導體的STM32F303、英特爾的Movidius MA2155 VPU、聯芯的LC1860C SoC和Atheros/高通的AR1021X雙頻Wi-Fi SoC等多種方案。
『貳』 單片機中晶振的作用是什麼並聯諧振電路工作原理和作用 ...
單片機工作需要提供給工作周期,也就是晶振的振盪頻率除以12分頻。為什麼會起振,這要看高頻書的自激振盪了,首先並聯諧振有1個作用就是選擇頻率,頻率是更具f=1/(2根號(L*(C0*CP)/(C0+CP))C0是內部與電感串聯的電容,CP是內部與電感並聯,外部與晶振並聯的,電容並聯(也就是外部電容與內部並聯電容之和),並聯諧振最終目的就是為了選頻,原理就是利用LC電流與電壓同相的原理,說白了就是利用電感放電時,電容剛好充電
,反之電容放電,電感剛好充電,而充放電電流恰好基本上大小一致,導致外部電流無法流入(這里有1點,就是這是理想狀態),假設不理想,由於電感上有損耗電阻r,一致外部電流值提供給損耗電阻
『叄』 單片機定時器中斷
#include <pic.h> //調用頭文件,可以去PICC軟體下去查找PIC16F87XA單片機的頭文件
__CONFIG(XT&WDTEN&LVPDIS); //定義配置字,晶振類型:XT,啟動開門狗,禁止低電壓編程
#define HC138_A RE2 //定義U6、U7、U8的A為RE2埠
#define HC138_B RE1 //定義U6、U7、U8的B為RE1埠
#define HC138_C RE0 //定義U6、U7、U8的C為RE0埠
#define U6_E RA2 //定義U6_E為RA2埠,U6E=1時,U6使能否則失能
#define U7_E RA3 //定義U7_E為RA3埠,U7E=1時,U7使能否則失能
#define U8_E RA1 //定義U8_E為RA1埠,U8E=1時,U8使能否則失能
#define V1 RA5 //定義V1為RA5埠
unsigned int tmcon;
//---------------------------------------
//名稱: 初始化函數
//日期:20101001
//-----------------------------------------
void init(void)
{
ADCON1=0X06; //所有IO均為數字口,模擬量輸入禁止
OPTION=0x80; //關閉RB口電平變化功能
TRISA=0B11010001; //RA1,RA2,RA3,RA5置為輸出,其他未用設置為輸入
TRISB=0B11111111; //其他未用設置為輸入
TRISC=0B11111111; //其他未用設置為輸入
TRISD=0B11110011; //未用設置為輸入
TRISE=0B11111000; //RE0,RE1,RE2置為輸出,其他未用設置為輸入
RD2=0; //關閉蜂鳴器
RD3=0; //關閉繼電器
RA1=0; //關掉數碼管、發光二極體
RA2=0; //關掉LED點陣屏左8列
RA3=0; //關掉LED點陣屏右8列
RBIE=0; //RB口電平變化中斷禁止
}
//---------------------------------------
//名稱: T0初始化函數
//日期:20100501
//-----------------------------------------
void timer0init(void)
{
T0CS=0; //TMR0工作於定時器方式
PSA=1; //TMR0不分頻
T0IF=0; //清除TMR0中斷標志
T0IE=1; //TMR0中斷允許
TMR0=0x13; //賦初值,以便TMR0每250US中斷一次
GIE=1;
}
//---------------------------------------
//名稱: T0中斷函數(250US)
//日期:20101001
//-----------------------------------------
void interrupt ISR(void)
{
if(TMR0IF==1) //250us
{
TMR0=0x13;
T0IF=0;
if(++tmcon>3999) //計數4000次後,為1秒
{
tmcon=0;
V1=!V1;
}
}
}
//---------------------------------------
//名稱: 主函數
//日期:20101001
//-----------------------------------------
void main(void)
{
init();
timer0init();
V1=0; //熄滅V1
HC138_A=0; //使74HC138的Y0端為0,其他高阻
HC138_B=0; //使74HC138的Y0端為0,其他高阻
HC138_C=0; //使74HC138的Y0端為0,其他高阻
U6_E=0; //U6關閉
U7_E=0; //U7關閉
U8_E=1; //U8打開
while(1)
{
asm("CLRWDT");
}
}//[email protected]
『肆』 單片機最小系統EA/VPP孔為什麼接VCC要加電阻
晶振加電容構成LC震盪電路產生脈沖作為單片機的時鍾。復位電路電容和電阻構成RC延時電路供復位用。EA加電路是為了限流。
『伍』 如何用51單片機調整LC振盪器
調整LC振盪器,就是調揩頻率吧,需要用變容二極體,然後單片機要通過D/A轉換電路,
輸出一個模擬電壓加到變容二極體上,改變容量實際調頻。不過,這種電路,只是畫模擬圖玩玩還可以,真要做實物,難度很大的。
『陸』 求一個51單片機的簡單數字鍾。附上匯編程序或C也行
學過幾天,我自己編過,但是失敗了。看看大牛的吧,沒有按鍵功能,只能走動,我的單片機壞了,忘記怎麼加監聽器了:
---------------------------------------------------------------------------------------------------------------------
/*時鍾程序,大家是否想到用定時器,對,也可用定時器的中斷來處理,這樣的程序我想不用我說了吧!
你們可自己發輝下,本程序採用外元件DS1302時鍾IC,使用此IC不增加系統資源,要時鍾時直接去讀取就可以了
本IC跟ADC0831一樣以串口方式傳送數據,不同的是協議,只要你讀懂它的串口協議,就可以用P口來模擬協議進行
,這樣更能使你對傳送數據協議的了解,在看本程序之前,先看看晶元的串口協議*/
#include <reg51.h>
#include <intrins.h>
sbit SCL2=P1^3; //SCL2定義為P1口的第3位腳,連接DS1302SCL和ADC0831SCL腳
sbit SDA2=P1^4; //SDA2定義為P1口的第4位腳,連接DS1302SCL和ADC0831SDA腳
//sbit CS2=P1^6; //CS2定義為P1口的第4位腳,連接ADC0831CS腳
sbit RST = P1^5; // DS1302片選腳
unsigned char l_tmpdate[8]={0x00,0x06,0x03,0x18,0x0c,0x07,0x06,0};
unsigned char l_tmpdisplay[8]={0x40,0x40,0x40,0x40,0x40,0x40,0x40,0};
code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //地址為:秒分小時月日年
code unsigned char read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
code unsigned char table[]=
{0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x40,0x00};
//共陰數碼管 0-9 '-' '熄滅『表
void delay();//延時子函數,5個空指令
void display(unsigned char *lp,unsigned char lc);//數字的顯示函數;lp為指向數組的地址,lc為顯示的個數
void Write_Ds1302_byte(unsigned char temp);
void Write_Ds1302( unsigned char address,unsigned char dat );
unsigned char Read_Ds1302 ( unsigned char address );
void Read_RTC(void);//read RTC
void Set_RTC(void);//set RTC
void main(void) //入口函數
{
Set_RTC();
while(1){
Read_RTC();
switch (l_tmpdate[0]/5) //設計每個5秒 交替顯示 年月日 時分秒
{
case 0:
case 2:
case 4:
case 6:
case 8:
case 10:
l_tmpdisplay[0]=l_tmpdate[2]/16; //數據的轉換,因我們採用數碼管0~9的顯示,將數據分開
l_tmpdisplay[1]=l_tmpdate[2]&0x0f;
l_tmpdisplay[2]=10; //加入"-"
l_tmpdisplay[3]=l_tmpdate[1]/16;
l_tmpdisplay[4]=l_tmpdate[1]&0x0f;
l_tmpdisplay[5]=10;
l_tmpdisplay[6]=l_tmpdate[0]/16;
l_tmpdisplay[7]=l_tmpdate[0]&0x0f;
break;
case 1:
case 3:
case 5:
case 7:
case 9:
case 11:
l_tmpdisplay[0]=l_tmpdate[6]/16;
l_tmpdisplay[1]=l_tmpdate[6]&0x0f;
l_tmpdisplay[2]=10;
l_tmpdisplay[3]=l_tmpdate[4]/16;
l_tmpdisplay[4]=l_tmpdate[4]&0x0f;
l_tmpdisplay[5]=10;
l_tmpdisplay[6]=l_tmpdate[3]/16;
l_tmpdisplay[7]=l_tmpdate[3]&0x0f;
break;
default:
break;
}
display(l_tmpdisplay,8);
}
}
void display(unsigned char *lp,unsigned char lc)//顯示
{
unsigned char i; //定義變數
P2=0; //埠2為輸出
P1=P1&0xF8; //將P1口的前3位輸出0,對應138譯門輸入腳,全0為第一位數碼管
for(i=0;i<lc;i++){ //循環顯示
P2=table[lp[i]]; //查表法得到要顯示數字的數碼段
delay(); //延時
P2=0; //清0埠,准備顯示下位
if(i==7) //檢測顯示完8位否,完成直接退出,不讓P1口再加1,否則進位影響到第四位數據
break;
P1++; //下一位數碼管
}
}
void delay(void) //空5個指令
{
unsigned char i=10;
while(i)
i--;
}
void Write_Ds1302_Byte(unsigned char temp)
{
unsigned char i;
for (i=0;i<8;i++) //循環8次 寫入數據
{
SCL2=0;
SDA2=temp&0x01; //每次傳輸低位元組
temp>>=1; //右移一位
SCL2=1;
}
}
/****************************************************************************/
void Write_Ds1302( unsigned char address,unsigned char dat )
{
RST=0;
_nop_();
SCL2=0;
_nop_();
RST=1;
_nop_(); //啟動
Write_Ds1302_Byte(address); //發送地址
Write_Ds1302_Byte(dat); //發送數據
RST=0; //恢復
}
/****************************************************************************/
unsigned char Read_Ds1302 ( unsigned char address )
{
unsigned char i,temp=0x00;
RST=0;
_nop_();
SCL2=0;
_nop_();
RST=1;
_nop_();
Write_Ds1302_Byte(address);
for (i=0;i<8;i++) //循環8次 讀取數據
{
if(SDA2)
temp|=0x80; //每次傳輸低位元組
SCL2=0;
temp>>=1; //右移一位
SCL2=1;
}
RST=0;
_nop_(); //以下為DS1302復位的穩定時間
RST=0;
SCL2=0;
_nop_();
SCL2=1;
_nop_();
SDA2=0;
_nop_();
SDA2=1;
_nop_();
return (temp); //返回
}
/****************************************************************************/
void Read_RTC(void) //讀取 日歷
{
unsigned char i,*p;
p=read_rtc_address; //地址傳遞
for(i=0;i<7;i++) //分7次讀取 年月日時分秒星期
{
l_tmpdate[i]=Read_Ds1302(*p);
p++;
}
}
/***********************************************************************/
void Set_RTC(void) //設定 日歷
{
unsigned char i,*p,tmp;
for(i=0;i<7;i++){
tmp=l_tmpdate[i]/10;
l_tmpdate[i]=l_tmpdate[i]%10;
l_tmpdate[i]=l_tmpdate[i]+tmp*16;
}
Write_Ds1302(0x8E,0X00);
p=write_rtc_address; //傳地址
for(i=0;i<7;i++) //7次寫入 年月日時分秒星期
{
Write_Ds1302(*p,l_tmpdate[i]);
p++;
}
Write_Ds1302(0x8E,0x80);
}
『柒』 單片機型號的命名規則是什麼
STM32系列單片機命名規則
略
PIC單片機型號命名規則
1.前綴: PIC MICROCHIP 公司產品代號,
特別地:dsPIC為集成DSP功能的新型PIC單片機
2.系列號:10、12、16、18、24、30、33、32,其中
PIC10、PIC12、PIC16、PIC18為8位單片機
PIC24、dsPIC30、dsPIC33為16位單片機
PIC32為32位單片機
3.器件型號(類型):
C CMOS 電路
CR CMOS ROM
LC 小功率CMOS 電路
LCS 小功率保護
AA 1.8V
LCR 小功率CMOS ROM
LV 低電壓
F 快閃可編程存儲器
HC 高速CMOS
FR FLEX ROM
4.改進類型或選擇
54A 、58A 、61 、62 、620 、621
622 、63 、64 、65 、71 、73 、74
42 、43 、44等
5.晶體標示:
LP 小功率晶體,
RC 電阻電容,
XT 標准晶體/振盪器
HS 高速晶體
6.頻率標示:
-02 2MHZ,
-04 4MHZ,
-10 10MHZ,
-16 16MHZ
-20 20MHZ,
-25 25MHZ,
-33 33MHZ
7.溫度范圍:
空白 0℃至70℃,
I -45℃至85℃,
E -40℃至125℃
8.封裝形式:
L PLCC 封裝
JW 陶瓷熔封雙列直插,有窗口
P 塑料雙列直插
PQ 塑料四面引線扁平封裝
W 大圓片
SL 14腿微型封裝-150mil
JN 陶瓷熔封雙列直插,無窗口
SM 8腿微型封裝-207mil
SN 8腿微型封裝-150 mil
VS 超微型封裝8mm×13.4mm
SO 微型封裝-300 mil
ST 薄型縮小的微型封裝-4.4mm
SP 橫向縮小型塑料雙列直插
CL 68腿陶瓷四面引線,帶窗口
SS 縮小型微型封裝
PT 薄型四面引線扁平封裝
TS 薄型微型封裝8mm×20mm
TQ 薄型四面引線扁平封裝
『捌』 單片機數字時鍾程序
#include <reg51.h> #include <intrins.h> sbit SCL2=P1^3; //SCL2定義為P1口的第3位腳,連接DS1302SCL和ADC0831SCL腳 sbit SDA2=P1^4; //SDA2定義為P1口的第4位腳,連接DS1302SCL和ADC0831SDA腳 //sbit CS2=P1^6; //CS2定義為P1口的第4位腳,連接ADC0831CS腳 sbit RST = P1^5; // DS1302片選腳 unsigned char l_tmpdate[8]={0x00,0x06,0x03,0x18,0x0c,0x07,0x06,0}; unsigned char l_tmpdisplay[8]={0x40,0x40,0x40,0x40,0x40,0x40,0x40,0}; code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //地址為:秒分小時月日年 code unsigned char read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; code unsigned char table[]= {0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0x40,0x00}; //共陰數碼管 0-9 '-' '熄滅『表 void delay();//延時子函數,5個空指令 void display(unsigned char *lp,unsigned char lc);//數字的顯示函數;lp為指向數組的地址,lc為顯示的個數 void Write_Ds1302_byte(unsigned char temp); void Write_Ds1302( unsigned char address,unsigned char dat ); unsigned char Read_Ds1302 ( unsigned char address ); void Read_RTC(void);//read RTC void Set_RTC(void);//set RTC void main(void) //入口函數 { Set_RTC(); while(1){ Read_RTC(); switch (l_tmpdate[0]/5) //設計每個5秒 交替顯示 年月日 時分秒 { case 0: case 2: case 4: case 6: case 8: case 10: l_tmpdisplay[0]=l_tmpdate[2]/16; //數據的轉換,因我們採用數碼管0~9的顯示,將數據分開 l_tmpdisplay[1]=l_tmpdate[2]&0x0f; l_tmpdisplay[2]=10; //加入"-" l_tmpdisplay[3]=l_tmpdate[1]/16; l_tmpdisplay[4]=l_tmpdate[1]&0x0f; l_tmpdisplay[5]=10; l_tmpdisplay[6]=l_tmpdate[0]/16; l_tmpdisplay[7]=l_tmpdate[0]&0x0f; break; case 1: case 3: case 5: case 7: case 9: case 11: l_tmpdisplay[0]=l_tmpdate[6]/16; l_tmpdisplay[1]=l_tmpdate[6]&0x0f; l_tmpdisplay[2]=10; l_tmpdisplay[3]=l_tmpdate[4]/16; l_tmpdisplay[4]=l_tmpdate[4]&0x0f; l_tmpdisplay[5]=10; l_tmpdisplay[6]=l_tmpdate[3]/16; l_tmpdisplay[7]=l_tmpdate[3]&0x0f; break; default: break; } display(l_tmpdisplay,8); } } void display(unsigned char *lp,unsigned char lc)//顯示 { unsigned char i; //定義變數 P2=0; //埠2為輸出 P1=P1&0xF8; //將P1口的前3位輸出0,對應138譯門輸入腳,全0為第一位數碼管 for(i=0;i<lc;i++){ //循環顯示 P2=table[lp[i]]; //查表法得到要顯示數字的數碼段 delay(); //延時 P2=0; //清0埠,准備顯示下位 if(i==7) //檢測顯示完8位否,完成直接退出,不讓P1口再加1,否則進位影響到第四位數據 break; P1++; //下一位數碼管 } } void delay(void) //空5個指令 { unsigned char i=10; while(i) i--; } void Write_Ds1302_Byte(unsigned char temp) { unsigned char i; for (i=0;i<8;i++) //循環8次 寫入數據 { SCL2=0; SDA2=temp&0x01; //每次傳輸低位元組 temp>>=1; //右移一位 SCL2=1; } } /****************************************************************************/ void Write_Ds1302( unsigned char address,unsigned char dat ) { RST=0; _nop_(); SCL2=0; _nop_(); RST=1; _nop_(); //啟動 Write_Ds1302_Byte(address); //發送地址 Write_Ds1302_Byte(dat); //發送數據 RST=0; //恢復 } /****************************************************************************/ unsigned char Read_Ds1302 ( unsigned char address ) { unsigned char i,temp=0x00; RST=0; _nop_(); SCL2=0; _nop_(); RST=1; _nop_(); Write_Ds1302_Byte(address); for (i=0;i<8;i++) //循環8次 讀取數據 { if(SDA2) temp|=0x80; //每次傳輸低位元組 SCL2=0; temp>>=1; //右移一位 SCL2=1; } RST=0; _nop_(); //以下為DS1302復位的穩定時間 RST=0; SCL2=0; _nop_(); SCL2=1; _nop_(); SDA2=0; _nop_(); SDA2=1; _nop_(); return (temp); //返回 } /****************************************************************************/ void Read_RTC(void) //讀取 日歷 { unsigned char i,*p; p=read_rtc_address; //地址傳遞 for(i=0;i<7;i++) //分7次讀取 年月日時分秒星期 { l_tmpdate[i]=Read_Ds1302(*p); p++; } } /***********************************************************************/ void Set_RTC(void) //設定 日歷 { unsigned char i,*p,tmp; for(i=0;i<7;i++){ tmp=l_tmpdate[i]/10; l_tmpdate[i]=l_tmpdate[i]%10; l_tmpdate[i]=l_tmpdate[i]+tmp*16; } Write_Ds1302(0x8E,0X00); p=write_rtc_address; //傳地址 for(i=0;i<7;i++) //7次寫入 年月日時分秒星期 { Write_Ds1302(*p,l_tmpdate[i]); p++; } Write_Ds1302(0x8E,0x80); } 希望對你有所幫助 本程序採用外元件DS1302
『玖』 《單片機C語言程序設計實訓100例——基於8051+Proteus模擬》 第03篇源代碼
單片機c語言編程100個實例目錄1
函數的使用和熟悉
實例3:用單片機控制第一個燈亮
實例4:用單片機控制一個燈閃爍:認識單片機的工作頻率
實例5:將 P1口狀態分別送入P0、P2、P3口:認識I/O口的引腳功能
實例6:使用P3口流水點亮8位LED
實例7:通過對P3口地址的操作流水點亮8位LED
實例8:用不同數據類型控制燈閃爍時間
實例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的點亮狀態
實例21:用for語句控制蜂鳴器鳴笛次數
實例22:用while語句控制LED
實例23:用do-while語句控制P0口8位LED流水點亮
實例24:用字元型數組控制P0口8位LED流水點亮
實例25: 用P0口顯示字元串常量
實例26:用P0 口顯示指針運算結果
實例27:用指針數組控制P0口8位LED流水點亮
實例28:用數組的指針控制P0 口8 位LED流水點亮
實例29:用P0 、P1口顯示整型函數返回值
實例30:用有參函數控制P0口8位LED流水速度
實例31:用數組作函數參數控制流水花樣
實例32:用指針作函數參數控制P0口8位LED流水點亮
實例33:用函數型指針控制P1口燈花樣
實例34:用指針數組作為函數的參數顯示多個字元串
單片機c語言編程100個實例目錄2
實例35:字元函數ctype.h應用舉例
實例36:內部函數intrins.h應用舉例
實例37:標准函數stdlib.h應用舉例
實例38:字元串函數string.h應用舉例
實例39:宏定義應用舉例2
實例40:宏定義應用舉例2
實例41:宏定義應用舉例3
* 中斷、定時器中斷、定時器 *中斷、定時器*中斷、定時器 /
實例42:用定時器T0查詢方式P2口8位控制LED閃爍
實例43:用定時器T1查詢方式控制單片機發出1KHz音頻
實例44:將計數器T0計數的結果送P1口8位LED顯示
實例45:用定時器T0的中斷控制1位LED閃爍
實例46:用定時器T0的中斷實現長時間定時
實例47:用定時器T1中斷控制兩個LED以不同周期閃爍
實例48:用計數器T1的中斷控制蜂鳴器發出1KHz音頻
實例49:用定時器T0的中斷實現"渴望"主題曲的播放
實例50-1:輸出50個矩形脈沖
實例50-2:計數器T0統計外部脈沖數
實例51-2:定時器T0的模式2測量正脈沖寬度
實例52:用定時器T0控制輸出高低寬度不同的矩形波
實例53:用外中斷0的中斷方式進行數據採集
實例54-1:輸出負脈寬為200微秒的方波
實例54-2:測量負脈沖寬度
實例55:方式0控制流水燈循環點亮
實例56-1:數據發送程序
實例56-2:數據接收程序
實例57-1:數據發送程序
實例57-2:數據接收程序
實例58:單片機向PC發送數據
實例59:單片機接收PC發出的數據
*數碼管顯示*數碼管顯示 數碼管顯示數碼管顯示*/
實例60:用LED數碼顯示數字5
實例61:用LED數碼顯示器循環顯示數字0~9
實例62:用數碼管慢速動態掃描顯示數字"1234"
實例63:用LED數碼顯示器偽靜態顯示數字1234
實例64:用數碼管顯示動態檢測結果
實例65:數碼秒錶設計
實例66:數碼時鍾設計
實例67:用LED數碼管顯示計數器T0的計數值
實例68:靜態顯示數字「59」
單片機c語言編程100個實例目錄3
鍵盤控制*鍵盤控制* *鍵盤控制 *鍵盤控制 */
實例69:無軟體消抖的獨立式鍵盤輸入實驗
實例70:軟體消抖的獨立式鍵盤輸入實驗
實例71:CPU控制的獨立式鍵盤掃描實驗
實例72:定時器中斷控制的獨立式鍵盤掃描實驗
實例73:獨立式鍵盤控制的4級變速流水燈
實例74:獨立式鍵盤的按鍵功能擴展:"以一當四"
實例75:獨立式鍵盤調時的數碼時鍾實驗
實例76:獨立式鍵盤控制步進電機實驗
實例77:矩陣式鍵盤按鍵值的數碼管顯示實驗
//實例78:矩陣式鍵盤按鍵音
實例79:簡易電子琴
實例80:矩陣式鍵盤實現的電子密碼鎖
液晶顯示LCD*液晶顯示LCD *液晶顯示LCD * *液晶顯示LCD*液晶顯示LCD *液晶顯示LCD */
實例81:用LCD顯示字元'A'
實例82:用LCD循環右移顯示"Welcome to China"
實例83:用LCD顯示適時檢測結果
實例84:液晶時鍾設計
*一些晶元的使用*24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302 紅外遙控/
實例85:將數據"0x0f"寫入AT24C02再讀出送P1口顯示
實例86:將按鍵次數寫入AT24C02,再讀出並用1602LCD顯示
實例87:對I2C匯流排上掛接多個AT24C02的讀寫操作
實例88:基於AT24C02的多機通信 讀取程序
實例89:基於AT24C02的多機通信 寫入程序
實例90:DS18B20溫度檢測及其液晶顯示
實例91:將數據"0xaa"寫入X5045再讀出送P1口顯示
實例92:將流水燈控制碼寫入X5045並讀出送P1口顯示
實例93:對SPI匯流排上掛接多個X5045的讀寫操作
實例94:基於ADC0832的數字電壓表
實例95:用DAC0832產生鋸齒波電壓
實例96:用P1口顯示紅外遙控器的按鍵值
實例97:用紅外遙控器控制繼電器
實例98:基於DS1302的日歷時鍾
實例99:單片機數據發送程序
實例100:電機轉速表設計
模擬霍爾脈沖
http://www.dzkfw.com.cn/myxin/51c_language.chm 單片機c語言一百例子
『拾』 求助,我想知道與單片機相連的兩個30pf瓷片電容,一個10k電阻,一個10uf電容,是什麼作用
C1和R4以及RESET按鈕組成了單片機復位電路,剛上電時C1沒有電,上電後電源對電容充電,充電迴路中R4的存在導致充電時R4兩端有壓降,也就是說剛剛上電時RST引腳會出現一個高電平。電容充電結束後,充電電流為0,R4兩端沒有分壓,RST變為低電平結束復位。組裝時,C1一般使用電解電容器,4.7μF-47μF之間都可以,取值越大復位時間越長,一般不超過10μF。R4也能影響復位時間,取值越大復位時間越長,一般使用10k
C2和C3這兩個電容與晶振構成振盪電路,類似於LC振盪,這兩個電容必須有,使用12MHz晶振時一般使用22pF或者30pF的瓷片電容。