資源簡介
通過測試的基于C51單片機的表決器代碼,適合初次接觸單片機又想做自己的設計作品的愛好者
代碼片段和文件信息
/**********************HJ-3G實驗開發(fā)板例程************************
*??平臺:HJ-3G?V6.0?+?Keil?U3?+?STC89C52
*??名稱:
*??公司:慧凈電子科技有限公司
*??淘寶:http://shop37031453.taobao.com???????
*??網(wǎng)站:www.hlmcu.com
*??編寫:
*??日期:2008-8-08
*???QQ?:?121350852??398115088
*??晶振:11.0592MHZ
*??說明:免費開源,不提供源代碼分析,有問題直接到慧凈論壇交流
*??論壇:http://hjdz.5d6d.com
******************************************************************
//注意事項:10天教程中的LCD1602第5腳由于當時設計錯誤,直接接到GND上了,接了低電平。
//本實驗需要把LCD1602第5腳,讀/寫腳接到GND上,有兩種方法,第一種,用杜邦線把P3.6腳接到GND上。
//另一種方法,定義一個?P3.6?IO口,在主函數(shù)中?把P3.6?寫一個低電平就可以了。
//sbit?WR?=?P3^6;?在后面主函數(shù)中加入?WR=0;就可以不用接杜邦線,?P3.6到GND的杜邦線不要。
//WR=0;
程序功能:表決器,模擬三位評委的表決,并做出判斷,將結果顯示于1602上。
??共用到HJ-3G學習板上左二列的S6S7S10S11S14S15S18七個按鍵。
??其中S18為清零鍵,對1602進行清屏和對相關變量清零。
??每位評委操控兩個按鍵,分別代表“通過”和“不通過”。
??第一位評委控制S6(通過)與S7(不通過);
??第二位評委控制S10(通過)與S11(不通過);
??第三位評委控制S14(通過)與S15(不通過);
??當按“通過”次數(shù)多于“不通過”時,1602將顯示“yes”,否則顯示“no”。
??在一個回合中,每位評委只有一次按鍵的權利,一旦按下,其操控的兩個
??按鍵均將被封鎖,再按也不會有任何作用。除非按下清零鍵S18清零后開始下一回合。
************************************************************************************/
#include
#define?uchar?unsigned?char?
#define?uint?unsigned?int
sbit?dula=P2^6;
sbit?wela=P2^7;
sbit?rs=P1^0;
sbit?rw=P1^1;
sbit?beep=P2^3;
sbit?lcden=P2^5;
bit?ok1ok2ok3clear;
uchar?passnopasstemp;
uchar?table[]=“yes“;
uchar?table1[]=“no“;
uchar?table2[]=“agree“;
uchar?table3[]=“disagree“;
uchar?table4[]=“???“;
uchar?table5[]=“??“;
void?delay(uint?z)
{
uint?xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void?write_com(uchar?com)
{
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void?write_date(uchar?date)
{
rs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void?init()
{???????
????????rw=0;
// uchar?a;
dula=0;
wela=0;
write_com(0x38);
delay(20);
write_com(0x0c);
delay(20);
write_com(0x06);
delay(20);
write_com(0x01);
delay(20);
}
void?yes()
{
uchar?a;
write_com(0x80+12);
delay(20);
for(a=0;a<3;a++)
{
write_date(table[a]);
delay(20);
}
}
void?no()
{
uchar?a;
write_com(0x80+0x40+12);
delay(20);
for(a=0;a<2;a++)
{
write_date(table1[a]);
delay(20);
}
}
void?agree()
{
uchar?a;
write_com(0x80);
delay(20);
for(a=0;a<5;a++)
{
write_date(table2[a]);
delay(20);
}
}
void?disagree()
{
uchar?a;
write_com(0x80+0x40);
delay(20);
for(a=0;a<8;a++)
{
write_date(table3[a]);
delay(20);
}
}
void?keyscan()
{
????if(!ok1)
{?
P3=0xfe;
????temp=P3;
????temp=temp&0xf0;
????if(temp!=0xf0)
????{
??????delay(10);
??????if(temp!=0xf0)
??????{
????????temp=P3;
switch(t
評論
共有 條評論