資源簡介
基于51單片機3x4撥號系統,附加詳細代碼注釋講解,給大家帶來方便

代碼片段和文件信息
#include
#include?
#define?null
#define?u8??unsigned??char
#define?u16?unsigned??long?int?
unsigned?char?h=0;
sbit?LCDEN=P3^4;
sbit?RS=P3^5;
sbit?RW=P3^6;
sbit?BF=P0^7;
sbit?dx=P2^0;
sbit?wx=P2^1;
u8?ycount=0;
u8?key=12;//按鍵號,初值設置為12,目的是:沒有按鍵按下時返回12;
u8?code?keyval[]=“123456789*0#“;?//按鍵對應的符號?unsigned?int?code?chr1[]={7890456012300000};
unsigned?char?code?chr2[]=“input?number:“;
unsigned?char?code?chr3[100];
////////////////////?延時函數/////////////////////////////////
void?delay(unsigned?int?xms)
{
int?ij;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
////////////////掃描獲取按鍵值函數/////////////////////////////
u8?keypad4_3()//按鍵掃描函數:要去抖,若有按鍵按下,返回對應的按鍵值(0-11)沒有按鍵按下返回12
{
u8?irowtemp;
??????????//若不設初值(默認值為0),沒有按鍵按下時,將返回0,會誤認為0被按下??
row=0xef;?//從第一行開始??????
for(i=0;i<4;i++)
{
P1=0xff;??
P1=row; //第i行信號,對應行為低,其他全為高
row=_crol_(row1);? ??//生成下一行信號
temp=P1;?//讀入掃描信號
temp=temp&0x07;?//屏蔽高5位信號,只保留低3位列信號?
if(temp!=0x07)//有按鍵被按下,因為第i行某列有按鍵按下,則低3位中有一位為低??
? {??
delay(20);??//延時去抖
temp=P1;??
temp=temp&0x07;??
if(temp!=0x07)???//再次確認有按鍵被按下
?? {??
???????? switch(temp)??//根據低3位列信號,判斷哪個按鍵被按下
????????????{??
???????????? case?0x06:key=0+3*i;break;?//第i行第1列按鍵被按下?
????????????????case?0x05:key=1+3*i;break;?//第i行第2列按鍵被按下??
????????????????case?0x03:key=2+3*i;break;?//第i行第3列按鍵被按下 ????
????????????}
do
{
temp=P1;?? ????//再次掃描按鍵
?? temp=temp&0x07;??
?? }while(temp!=0x07);?//等待按鍵釋放???
?? }??
?????}
}??
return(key);//掃面結束,返回按鍵值
}
///////////////////////////////////////////////////////////////////////
//////////////////////////////4x4按鍵掃描//////////////////////////////////
u8?keypad4_4()//按鍵掃描函數:要去抖,若有按鍵按下,返回對應的按鍵值(0-15)沒有按鍵按下返回16
{
u8?irowtemp;
u8?key=16;//按鍵號,初值設置為16,目的是:沒有按鍵按下時返回16;
??????????//若不設初值(默認值為0),沒有按鍵按下時,將返回0,會誤認為0被按下??
row=0xef;?//從第一列開始??????
for(i=0;i<4;i++)
{
P1=0xff;??
P1=row; //第i列信號,對應列為低,其他全為高
row=_crol_(row1);? ??//生成下一列信號
temp=P1;?//讀入掃描信號
temp=temp&0x0f;?//屏蔽高4位列信號,只保留低4位行信號?
if(temp!=0x0f)//有按鍵被按下,因為第i列某行有按鍵按下,則低4位中有一位為低??
? {??
delay(20);??//延時去抖
temp=P1;??
temp=temp&0x0f;??
if(temp!=0x0f)???//再次確認有按鍵被按下
?? {??
???????? switch(temp)??//根據低4位行信號,判斷哪個按鍵被按下
????????????{??
???????????? case?0x0e:key=0+i;break;?//第i列第1行按鍵被按下?
????????????????case?0x0d:key=4+i;break;?//第i列第2行按鍵被按下??
????????????????case?0x0b:key=8+i;break;?//第i列第3行按鍵被按下
case?0x07:key=12+i;??????//第i列第4行按鍵被按下?
????????????}
do
{
temp=P1;?? ????//再次掃描按鍵
?? temp=temp&0x0f;??
?? }while(temp!=0x0f);?//等待按鍵釋放???
?? }??
?????}
}??
return(key);//掃面結束,返回按鍵值
}
//////////////////////////////////////////////////////////////////////////
unsigned?char?DectectBusyBit(void)//狀態判斷函數(忙/閑?)
{???
bit?result;
P0?=?0xff; //讀狀態前先置高電平,防止誤判
RS?=?0;
delay(5);
????RW?=?1;
LCDEN?=?1;
delay(5);
result=BF;?//若LCM忙則反復測試在此處原地踏步;當LCM閑時,才往下繼續
LCDEN?=?0;
return?resu
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-02-24?14:05??3x4撥號\
?????文件??????126487??2018-10-21?20:50??3x4撥號\3x4電話.DSN
?????文件?????????742??2018-11-05?23:37??3x4撥號\3x4電話.PWI
?????文件??????132396??2018-10-16?23:47??3x4撥號\Last?Loaded?3x4電話.DBK
?????目錄???????????0??2019-02-24?14:05??3x4撥號\project\
?????文件????????7022??2018-10-16?20:00??3x4撥號\project\34text.c
?????文件?????????742??2018-10-17?10:35??3x4撥號\project\3x4電話.PWI
?????文件????????2074??2018-10-06?17:50??3x4撥號\project\4x4矩陣按鍵掃描.c
?????文件??????132396??2018-10-16?23:47??3x4撥號\project\Last?Loaded?3x4電話.DBK
?????文件??????127682??2018-10-10?08:48??3x4撥號\project\Last?Loaded?液晶1602.DBK
?????文件??????124283??2018-10-06?15:52??3x4撥號\project\Last?Loaded?矩陣按鍵掃描keypad4_4.DBK
?????目錄???????????0??2019-02-24?14:05??3x4撥號\project\Listings\
?????文件???????14151??2018-10-16?18:32??3x4撥號\project\Listings\34text.lst
?????文件????????4459??2018-10-06?17:46??3x4撥號\project\Listings\4x4矩陣按鍵掃描.lst
?????文件???????14138??2018-10-21?21:40??3x4撥號\project\Listings\STARTUP.lst
?????文件???????13401??2018-10-21?21:40??3x4撥號\project\Listings\text6.lst
?????文件???????18915??2018-10-21?21:40??3x4撥號\project\Listings\text6.m51
?????文件????????4458??2018-10-06?15:45??3x4撥號\project\Listings\定時掃描.lst
?????文件?????????613??2018-10-06?16:29??3x4撥號\project\Listings\矩陣按鍵定時掃描.lst
?????目錄???????????0??2019-02-24?14:05??3x4撥號\project\ob
?????文件???????11625??2018-10-16?18:32??3x4撥號\project\ob
?????文件????????4929??2018-10-06?17:46??3x4撥號\project\ob
?????文件?????????819??2018-10-21?21:40??3x4撥號\project\ob
?????文件???????13317??2018-10-21?21:40??3x4撥號\project\ob
?????文件????????1252??2018-10-21?21:40??3x4撥號\project\ob
?????文件????????2772??2018-10-21?21:40??3x4撥號\project\ob
?????文件?????????102??2018-10-21?21:40??3x4撥號\project\ob
?????文件???????14518??2018-10-21?21:40??3x4撥號\project\ob
?????文件????????4810??2018-10-06?15:45??3x4撥號\project\ob
?????文件????????6376??2015-05-29?12:09??3x4撥號\project\STARTUP.A51
?????文件????????6001??2018-10-17?10:16??3x4撥號\project\text6.c
............此處省略5個文件信息
- 上一篇:基于51單片機的音樂播放器,源碼詳細注釋
- 下一篇:基于51單片機呼吸燈
評論
共有 條評論