資源簡介
基于51單片機的4路搶答器的源代碼程序。希望覺得有用。

代碼片段和文件信息
#include?“l(fā)cd.h“
/*******************************************************************************
*?函?數(shù)?名?????????:?Lcd1602_Delay1ms
*?函數(shù)功能 ???:?延時函數(shù),延時1ms
*?輸????入?????????:?c
*?輸????出?????????:?無
*?說????名?????????:?該函數(shù)是在12MHZ晶振下,12分頻單片機的延時。
*******************************************************************************/
void?Lcd1602_Delay1ms(uint?c)???//誤差?0us
{
????uchar?ab;
for?(;?c>0;?c--)
{
?for?(b=199;b>0;b--)
?{
?? for(a=1;a>0;a--);
?}??????
}
????
}
/**交換數(shù)據(jù)的高低位,因為P2口接反了v**/
uchar?datachange(uchar?a)
{
a=(a<<4)|(a>>4);
a=((a<<2)&0xcc)|((a>>2)&0x33);
a=((a<<1)&0xaa)|((a>>1)&0x55);
return?a;
}
/*******************************************************************************
*?函?數(shù)?名?????????:?LcdWriteCom
*?函數(shù)功能 ???:?向LCD寫入一個字節(jié)的命令
*?輸????入?????????:?com
*?輸????出?????????:?無
*******************************************************************************/
#ifndef? LCD1602_4PINS ?//當沒有定義這個LCD1602_4PINS時
void?LcdWriteCom(uchar?com) ??//寫入命令
{
LCD1602_E?=?0;?????//使能
LCD1602_RS?=?0; ???//選擇發(fā)送命令
LCD1602_RW?=?0; ???//選擇寫入
LCD1602_DATAPINS?=?datachange(com);?????//放入命令
Lcd1602_Delay1ms(1); //等待數(shù)據(jù)穩(wěn)定
LCD1602_E?=?1; ??????????//寫入時序
Lcd1602_Delay1ms(5); ??//保持時間
LCD1602_E?=?0;
}
#else?
void?LcdWriteCom(uchar?com) ??//寫入命令
{
LCD1602_E?=?0; ?//使能清零
LCD1602_RS?=?0; ?//選擇寫入命令
LCD1602_RW?=?0; ?//選擇寫入
LCD1602_DATAPINS?=?com; //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E?=?1; ?//寫入時序
Lcd1602_Delay1ms(5);
LCD1602_E?=?0;
LCD1602_DATAPINS?=?com?<4;?//發(fā)送低四位
Lcd1602_Delay1ms(1);
LCD1602_E?=?1; ?//寫入時序
Lcd1602_Delay1ms(5);
LCD1602_E?=?0;
}
#endif
/*******************************************************************************
*?函?數(shù)?名?????????:?LcdWriteData
*?函數(shù)功能 ???:?向LCD寫入一個字節(jié)的數(shù)據(jù)
*?輸????入?????????:?dat
*?輸????出?????????:?無
*******************************************************************************/ ???
#ifndef? LCD1602_4PINS ???
void?LcdWriteData(uchar?dat) //寫入數(shù)據(jù)
{
LCD1602_E?=?0; //使能清零
LCD1602_RS?=?1; //選擇輸入數(shù)據(jù)
LCD1602_RW?=?0; //選擇寫入
LCD1602_DATAPINS?=?datachange(dat);?//寫入數(shù)據(jù)
Lcd1602_Delay1ms(1);
LCD1602_E?=?1;???//寫入時序
Lcd1602_Delay1ms(5);???//保持時間
LCD1602_E?=?0;
}
#else
void?LcdWriteData(uchar?dat) //寫入數(shù)據(jù)
{
LCD1602_E?=?0; ??//使能清零
LCD1602_RS?=?1; ??//選擇寫入數(shù)據(jù)
LCD1602_RW?=?0; ??//選擇寫入
LCD1602_DATAPINS?=?dat; //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E?=?1; ??//寫入時序
Lcd1602_Delay1ms(5);
LCD1602_E?=?0;
LCD1602_DATAPINS?=?dat?<4;?//寫入低四位
Lcd1602_Delay1ms(1);
LCD1602_E?=?1; ??//寫入時序
Lcd1602_Delay1ms(5);
LCD1602_E?=?0;
}
#endif
/*******************************************************************************
*?函?數(shù)?名???????:?LcdInit()
*?函數(shù)功能 ?:?初始化LCD屏
*?輸????入???????:?無
*?輸????出???????:?無
*******************************************************************************/ ???
#ifndef LCD1602_4PINS
void?LcdInit() ??//LCD初始化
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-05-04?16:30??立項\
?????目錄???????????0??2019-05-04?16:27??立項\Listings\
?????文件????????6960??2019-05-03?17:32??立項\Listings\lcd.lst
?????文件????????7882??2019-04-28?14:06??立項\Listings\lcd1602.lst
?????文件???????13625??2019-05-04?16:27??立項\Listings\lixiang.lst
?????文件???????21999??2019-05-04?16:27??立項\Listings\lixiang.m51
?????目錄???????????0??2019-05-04?16:27??立項\ob
?????文件????????4138??2019-05-03?17:32??立項\ob
?????文件???????15040??2019-05-04?16:27??立項\ob
?????文件?????????908??2019-05-04?16:27??立項\ob
?????文件????????3835??2019-05-04?16:27??立項\ob
?????文件?????????104??2019-05-04?16:27??立項\ob
?????文件???????13452??2019-05-04?16:27??立項\ob
?????文件????????3798??2019-05-03?17:32??立項\lcd.c
?????文件?????????966??2019-04-28?23:11??立項\lcd.h
?????文件????????6426??2019-05-04?16:27??立項\lixiang.c
?????文件??????137842??2019-05-04?16:30??立項\lixiang.uvgui.獨行駒
?????文件????????8164??2019-05-03?17:43??立項\lixiang.uvopt
?????文件???????14024??2019-04-28?23:57??立項\lixiang.uvproj
評論
共有 條評論