『壹』 單片機最小系統原理圖,求詳細講解
我是一名單片機老玩家.
STC89C52單片機最小系統比較復雜,需要
STC89C52晶元 1 個,晶元底座 1 個,單排針 2 排
晶振電路:晶振 1 個,30pF電容 2 個
復位電路:10K電阻 1 個,10uF/16V電容 1 個
P0口上拉:10K排阻一個
電源去耦:10uF/16V電容 1 個,104 電容一個
建議使用STC最新的單片機STC15W4K32S4
完全兼容STC89C52,單獨一個晶元就是最小系統
內部集成了高精度晶振和復位電路
P0、P1、P2、P3、P4、P5 口都可以配置為
開漏輸出(和STC89C52的P0口一樣)
或者弱上拉輸出(和STC89C52的 P1、P2、P3 口一樣)
或者推挽輸出(最大驅動電流 20 mA)
『貳』 理解89c52單片機開發板的電路原理圖
這個圖應該很清楚了,各個功能模塊都歸納到一個方框裡面:
1、LCD1602顯示模塊介面
2、LCD12864顯示模塊介面
3、LED介面
4、蜂鳴器介面
5、ISP下載介面
6、PL2303驅動電路
7、電源電路
8、數碼管電路介面及獨立按鍵介面
9、DS18B20溫度感測器介面及紅外接收電路介面
10、CPU
11、復位電路和時鍾電路。
這個開發板缺少4*4矩陣鍵盤。
『叄』 這是單片機4X4的鍵盤識別程序,請幫我解釋,最好每句執行操作和原理都有,特別是case 0X0e; key=7的原因
temp等於0x0e時,鍵值key等於7 : 這個鍵值是你自己定義的,就是起一個標志位的作用,然後用程序判斷鍵值,當鍵值等於7時,該進行什麼動作,這就相當於當你那個按鍵按下時執行什麼動作
寫單片機C程序 一定要活用標志位
還有你好像都大四了,怎麼這樣普通的矩陣鍵盤程序還看不懂,該好好學習呀 兄弟
I和J 只是一個變數 用來決定延時時間的長短 延時是為了消除按鍵的抖動
畢竟機械按鍵存在抖動(按下去並不是電平直接就跳變並穩定下來了)
延時是軟體消抖 增強系統的穩定性
『肆』 單片機 4*4矩陣鍵盤
這個電路圖,只是你使用哪幾個口在程序中對應上就可以了
程序
//行列掃描程序,可以自己定義埠和掃描方式,這里做簡單介紹
#include<reg52.h>//包含頭文件
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
ucharkeyscan(void);
voiddelay(uinti);
voidmain()
{
ucharkey;
P2=0x00;//1數碼管亮按相應的按鍵,會顯示按鍵上的字元
while(1)
{
key=keyscan();//調用鍵盤掃描,
switch(key)
{
case0x7e:P0=dofly[0];break;//0按下相應的鍵顯示相對應的碼值
case0x7d:P0=dofly[1];break;//1
case0x7b:P0=dofly[2];break;//2
case0x77:P0=dofly[3];break;//3
case0xbe:P0=dofly[4];break;//4
case0xbd:P0=dofly[5];break;//5
case0xbb:P0=dofly[6];break;//6
case0xb7:P0=dofly[7];break;//7
case0xde:P0=dofly[8];break;//8
case0xdd:P0=dofly[9];break;//9
case0xdb:P0=dofly[10];break;//a
case0xd7:P0=dofly[11];break;//b
case0xee:P0=dofly[12];break;//c
case0xed:P0=dofly[13];break;//d
case0xeb:P0=dofly[14];break;//e
case0xe7:P0=dofly[15];break;//f
}
}
}
ucharkeyscan(void)//鍵盤掃描函數,使用行列反轉掃描法
{
ucharcord_h,cord_l;//行列值
P3=0x0f;//行線輸出全為0
cord_h=P3&0x0f;//讀入列線值
if(cord_h!=0x0f)//先檢測有無按鍵按下
{
delay(100);//去抖
if(cord_h!=0x0f)
{
cord_h=P3&0x0f;//讀入列線值
P3=cord_h|0xf0;//輸出當前列線值
cord_l=P3&0xf0;//讀入行線值
return(cord_h+cord_l);//鍵盤最後組合碼值
}
}return(0xff);//返回該值
}
voiddelay(uinti)//延時函數
{
while(i--);
}
不明白的在聯系我,也可以直接訪問我的Blog:hi..com/lyzhangxiang