1樓:匿名使用者
用stc52編的,下面是c程式,除錯已經成功,自己看程式吧……
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define lcd_data p0
sbit sda=p3^5;
sbit scl=p3^4;//24c08控制口設定
sbit lcd_rs = p3^3; //暫存器選擇輸入
sbit lcd_rw = p3^6; //液晶讀/寫控制
sbit lcd_en = p3^7; //液晶使能控制
sbit lcd_psb = p3^2; //串/並方式控制
sbit fm=p2^4;//蜂鳴器控制口
sbit rs=p2^5;
sbit t_clk = p2^0; //實時時鐘時鐘線引腳 //
sbit t_io = p2^1; //實時時鐘資料線引腳 //
sbit t_rst = p2^2; //實時時鐘復位線引腳 //
sbit ds=p2^3;
sbit en=p2^6;
sbit zz=p2^7;
sbit fz=p3^1;
sbit acc0=acc^0;
sbit acc7=acc^7;
uint temp1,s_temp; //定義整形變數
float f_temp; //定義浮點型變數
uchar time=" : : ";
uchar day=" 20 / / ( ) ";
uchar temp0=" 溫度: . 度 ";
uchar num,num1,flag,count,a,b;
uchar unlock_i;//解密標誌位
uchar t[4];
uchar t1[4];
void delay_ms(uint z)//長延時
void delay() //短延時,大約5us
void reshi()
else
}uchar code mima=;
void lcd_xieping0(uchar x,uchar y,uchar date);
void lcd_xieping(uchar x,uchar y,uchar *str);
// 開機顯示
void kjxs()
lcd_xieping(3,0," ");}}
// 12864顯示
void write_cmd(uchar cmd)
void write_dat(uchar dat)
void lcd_xieping0(uchar x,uchar y,uchar date)
write_dat(date);
}void lcd_xieping(uchar x,uchar y,uchar *str)
while (*str)
}void lcd_init()
// 鍵盤掃描函式
uchar keyscan1() //矩陣鍵盤掃描函式
while(temp!=0xf0)
//等待按鍵釋放}}
p1=0xfd; //賦值
temp=p1; //讀回資料
temp=temp&0xf0; //與運算
if(temp!=0xf0) //判斷
while(temp!=0xf0)
//等待按鍵釋放}}
p1=0xfb; //賦值
temp=p1; //讀回資料
temp=temp&0xf0; //與運算
if(temp!=0xf0) //判斷
while(temp!=0xf0)
//等待按鍵釋放}}
}return(num); //返回值
}uchar keyscan2()
while(temp!=0xf0)
//等待按鍵釋放}}
}return(num1);
// 直流電機
void dianjizz()
void dianjifz()
void dianji_stop()
// epprom
void start() //啟動訊號
void stop() //停止訊號
void respons() //響應訊號
void writebyte(uchar date) //寫一個位元組
scl=0;
delay();
sda=1; //釋放匯流排
delay();
}uchar readbyte() //讀一個位元組
delay();
return(k);
}void write(uchar add,uchar date) //在一個地址寫一個位元組
uchar read(uchar add) //在一個地址讀一個位元組
// 時間日期函式
void v_wtinputbyte(uchar ucda)
}uchar uc_rtoutputbyte(void)
return(acc);
}void v_w1302(uchar ucaddr, uchar ucda)
uchar uc_r1302(uchar ucaddr)
void init1302(void)
void donetime(void)
// 溫度檢測函式
void dsreset(void) //18b20復位,初始化函式
bit tempreadbit(void) //讀1位函式
uchar tempread(void) //讀1個位元組
return(dat);
}void tempwritebyte(uchar dat) //向18b20寫一個位元組資料
else}}
void tempchange(void) //ds18b20 開始獲取溫度並轉換
void get_temp() //讀取暫存器中儲存的溫度資料
// 解密函式
void unlock()
//輸密碼
}in=keyscan1();
if(in==12)//in-確定鍵標誌位
else}}
// 修改密碼函式
void xiugaimima()
im=keyscan1();
if(im==12)//im,in,ib,同為確定鍵標誌位
}ib=keyscan1();
if(ib==12)
//24c08寫資料
delay_ms(1000);
}else}}
// 顯示函式
void xianshi()
// 開鎖函式
void kaisuo()
dianjizz();
delay_ms(10000);
dianji_stop();
lcd_xieping(2,0,"—開鎖過程結束—");
lcd_xieping(3,0," 請開門 ");
delay_ms(5000);
dianjifz();
delay_ms(10000);
dianji_stop();
flag=0;
// 主函式
void main()
//24c08讀資料
while(1)
else
if(flag==1)
if(a==2)}}}
基於51微控制器轉速測量的程式,望高手幫我解釋一下。
include include define fosc unsigned int speed unsigned char key unsigned char led table 10 long speed count,speed count1 unsigned char speed check un...
51微控制器外部中斷實驗程式,51微控制器外部中斷實驗程式
做51微控制器外部中斷實驗,應該有主程式 中斷服務程式。樓主所說這些的亮滅,那些的主程式的?那些是中斷程式的?請問你這個觸發中斷是一個按鍵?你觸發的方式是長時間按下還是瞬間按下?我覺得你應該是長時間按下的。回到正題,你這個中斷服務函式裡只有一句 那麼中斷服務函式執行的速度會很快的,所以如果你只按了一...
基於51微控制器的交通燈控制設計,基於51微控制器控制交通燈的電路圖與C語言程式
這個設計完了 可以在proteus下 的啊 可以交流 include define uchar unsigned char define uint unsigned intsbit red a p0 0 東西向燈sbit yellow a p0 1 sbit green a p0 2 sbit re...