資源簡介
用51單片機2個IO口驅動1602

代碼片段和文件信息
#include?
#include?
sbit?SCL?=?P3^7;
sbit?SDA?=?P3^6;
bit?ack;
unsigned?char?LCD_data=0x08;
unsigned?char?code?digit[?]={“0123456789“};?//定義字符數組顯示數字
//*****************延時************************
void?delay_nus(unsigned?int?n)?//N?us延時函數
{
unsigned?int?i=0;
for?(i=0;i _nop_();
}
void?delay_nms(unsigned?int?n)?//N?ms延時函數
{
unsigned?int?ij;
for?(i=0;i for?(j=0;j<1140;j++);
}
void?nop4()
{
?_nop_();?????//等待一個機器周期
?_nop_();?????//等待一個機器周期
?_nop_();?????//等待一個機器周期
?_nop_();?????//等待一個機器周期
}
//***************************************
void?Start()
{
? SDA=1;
????_nop_();
????SCL=1;
nop4();
????SDA=0;
nop4();
????SCL=0;
????_nop_();
_nop_();
}
void?Stop()
{
? SDA=0;
????_nop_();
SCL=0;
nop4();//>4us后SCL跳變
SCL=1;
nop4();
SDA=1;
????_nop_();
????_nop_();
}
//******************************************
void??Write_A_Byte(unsigned?char?c)
{
?unsigned?char?BitCnt;
??for(BitCnt=0;BitCnt<8;BitCnt++)??//要傳送的數據長度為8位
????{
?????if((c< ?????else??SDA=0;????????????????
?????_nop_();
?????SCL=1;???????????????//置時鐘線為高,通知被控器開始接收數據位
?????nop4();?
?????_nop_();???????
?????SCL=0;?
????}??
????_nop_();
????_nop_();
????SDA=1;???????????????//8位發送完后釋放數據線,準備接收應答位
????_nop_();
????_nop_();??
????SCL=1;
????_nop_();
????_nop_();
????_nop_();
????if(SDA==1)ack=0;?????
???????else?
???{
???ack=1;????????//判斷是否接收到應答信號
???P1=0x00;
???} ? ??? ???
????SCL=0;
????_nop_();
????_nop_();
}
bit?Write_Random_Address_Byte(unsigned?char?addunsigned?char?dat)
{
? Start();????//啟動總線
Write_A_Byte(add<<1|0);?//發送器件地址
????if(ack==0)return(0);
Write_A_Byte(dat);???//發送數據
????if(ack==0)return(0);
Stop();?//結束總線
????return(1);
}
//********************液晶屏使能*********************
void?Enable_LCD_write()
{
????LCD_data|=(1<<(3-1));//E=1;
Write_Random_Address_Byte(0x27LCD_data);??//
delay_nus(2);
????LCD_data&=~(1<<(3-1));//E=0;
????Write_Random_Address_Byte(0x27LCD_data);
}
//*************寫命令****************************
void?LCD_write_command(unsigned?char?command)
{
delay_nus(16);
LCD_data&=~(1<<(1-1));//RS=0;
LCD_data&=~(1<<(2-1));//RW=0;
//LCD_data&=~(1<<(4-1));
????Write_Random_Address_Byte(0x27LCD_data);
LCD_data&=0X0f;?//清高四位
LCD_data|=command?&?0xf0;?//寫高四位
????Write_Random_Address_Byte(0x27LCD_data);
????Enable_LCD_write();
command=command<<4;?//低四位移到高四位
LCD_data&=0x0f;?//清高四位
LCD_data|=command&0xf0;?//寫低四位
????Write_Random_Address_Byte(0x27LCD_data);
????Enable_LCD_write();
}
//*************寫數據****************************
void?LCD_write_data(unsigned?char?value)?
{
delay_nus(16);
LCD_data|=(1<<(1-1));//RS=1;
LCD_data&=~(1<<(2-1));//RW=0;
????Write_Random_Address_Byte(0x27LCD_data);
LCD_data&=0X0f;?//清高四位
LCD_data|=value&0xf0;?//寫高四位
????Write_Random_Address_Byte(0x27LCD_data);
????Enable_LCD_write();
value=value<<4;?//低四位移到高
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????10404??2016-07-08?20:11??1602兩根線亮光顯示\1602
?????文件???????4357??2016-07-08?20:11??1602兩根線亮光顯示\1602.c
?????文件???????1945??2016-07-08?20:11??1602兩根線亮光顯示\1602.hex
?????文件?????????41??2016-07-08?20:11??1602兩根線亮光顯示\1602.lnp
?????文件???????8671??2016-07-08?20:11??1602兩根線亮光顯示\1602.LST
?????文件??????16016??2016-07-08?20:11??1602兩根線亮光顯示\1602.M51
?????文件??????11419??2016-07-08?20:11??1602兩根線亮光顯示\1602.OBJ
?????文件???????4511??2016-07-08?20:31??1602兩根線亮光顯示\1602.plg
????.......?????55652??2016-07-08?20:31??1602兩根線亮光顯示\1602.uvopt
????.......?????13396??2016-07-08?19:17??1602兩根線亮光顯示\1602.uvproj
????.......?????55656??2016-07-08?19:17??1602兩根線亮光顯示\1602_uvopt.bak
????.......?????????0??2016-07-08?15:40??1602兩根線亮光顯示\1602_uvproj.bak
?????文件???????6376??2009-05-07?14:37??1602兩根線亮光顯示\STARTUP.A51
?????文件??????14062??2016-07-08?20:11??1602兩根線亮光顯示\STARTUP.LST
?????文件????????749??2016-07-08?20:11??1602兩根線亮光顯示\STARTUP.OBJ
?????目錄??????????0??2016-07-08?20:31??1602兩根線亮光顯示
-----------?---------??----------?-----??----
???????????????203255????????????????????16
評論
共有 條評論