?? text1.c
字號:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint t);
bit lcd1602_busy(void);
void lcd1602_wrcmd(unsigned char lcdcmd);
void lcd1602_wrdata(uchar lcddata);
void lcd1602_clear(void);
void lcd1602_init(void);
//數據口定義
#define lcd1602_bus P3
//引腳定義
sbit rs_1602=P2^5; //接口要該!
sbit rw_1602=P2^6;
sbit e_1602=P2^7;
sbit en=P1^0; //p1為接收模塊與單片機的接口
sbit clk=P1^1;
sbit dat=P1^2;
sbit f=P1^7;
uchar a,b,c[3];
uchar code table[]="0123456789.";
/* 延時t毫秒 */
void delay(uint t)
{
uint i;
while(t--)
{
/* 對于11.0592M時鐘,約延時1ms */
for (i=0;i<125;i++)
{}
}
}
/***********忙判斷標志,返回一個位BF********************/
bit lcd1602_busy(void)
{
uchar busy_flag;
rs_1602=0;
rw_1602=1;
_nop_();
e_1602=1;
_nop_();
lcd1602_bus=0xff;
busy_flag=lcd1602_bus; //e在高電平時讀
e_1602=0;
return (bit)(busy_flag&0x80); //BF=1; BUSY 返回一個位
}
/********寫命令,有兩個參數,一個是要寫的命令控制字,
第二個是用來控制是否進行忙標志的判斷。
busyflag=1;
判斷: 為0
***************/
void lcd1602_wrcmd(unsigned char lcdcmd)
{
while(lcd1602_busy()); //等待空閑
lcd1602_bus=lcdcmd;
rs_1602=0;
rw_1602=0;
_nop_();
e_1602=1;
_nop_();
_nop_();
e_1602=0; //產生一個下降沿
}
/***************向液晶寫數據******************/
void lcd1602_wrdata(uchar lcddata)
{
while(lcd1602_busy()); //等待空閑
lcd1602_bus=lcddata; //在下沿的時候寫數據
rs_1602=1;
rw_1602=0;
_nop_();
e_1602=1;
_nop_();
_nop_();
e_1602=0;
//lcd_bus=0xff;
}
/************液晶的清屏************/
void lcd1602_clear(void)
{
lcd1602_wrcmd(0x01); //液晶清屏控制字 并延時>40us
delay(100);
}
/***********1602液晶的初始化***************/
void lcd1602_init(void)
{
lcd1602_wrcmd(0x38); //功能設置-----8位數據接口,兩行顯示,5*7點陣字符顯示
delay(100);
lcd1602_wrcmd(0x0e); //顯示開關控制----顯示開關開,光標開關關,閃爍開關關
delay(100);
lcd1602_wrcmd(0x06); //輸入方式設置,AC自增1, S=0;
delay(100);
lcd1602_wrcmd(0x01); //清屏
delay(100);
}
void fen()
{
uchar x,y;
x=(a&0xf0)>>4+(b&0x07)<<4; //a:低八位(其低四位為小數位)b:高八位(其低三位為符號位)
y=(a&0x0f)*0.0625;
c[0]=x/10;
x=x%10;
c[1]=x;
c[2]=y;
}
void display()
{
lcd1602_wrcmd(0x80);
lcd1602_wrdata(table[c[0]]);
lcd1602_wrdata(table[c[1]]);
lcd1602_wrdata(table[10]);
lcd1602_wrdata(table[c[2]]);
}
main()
{
uchar i;
f=0;
delay(2);
lcd1602_bus=0xff;
lcd1602_init();
lcd1602_clear();
while(1)
{
while(en==0)
en=1;
while(en==1)
en=1;
for(i=0;i<8;i++)
{
while(clk==0)
clk=1;
dat=1;
a=dat;
a<<=1;
}
for(i=0;i<8;i++)
{
while(clk==0)
clk=1;
dat=1;
b=dat;
b<<=1;
}
fen();
display();
if((c[0]>2)&&(c[1]>8))
f=1;
else
f=0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -