|
參考完全使用單片機3個IO口+74HC595驅(qū)動LCD1602液晶的源程序http://www.torrancerestoration.com/bbs/dpj-114268-1.html
使用RTX51 改進了一個版本。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
RTX51.png (38.61 KB, 下載次數(shù): 44)
下載附件
RTX51
2019-7-4 16:00 上傳
0.png (11.02 KB, 下載次數(shù): 54)
下載附件
2019-7-4 19:50 上傳
主要區(qū)別的核心代碼:
#include "HS595.h"
unsigned char HS595_data; //HS595的輸出數(shù)據(jù)
/*
0位 RS
1位 RW
2位 E
3位 D4
4位 D5
5位 D6
6位 D7
*/
//向HC595發(fā)送串行數(shù)據(jù)
void HC595SendData(unsigned char SendVal)
{
unsigned char i;
HS595_ST_CP=0; //停止輸出
for(i=0; i<8; i++)
{
if((SendVal<<i)&0x80) //0X80 最高位與SendVal左移的最高位 進行邏輯運算
HS595_DS=1; //如果為真 HS595_DS= 1
else
HS595_DS=0; //如果為假 HS595_DS= 0
//產(chǎn)生數(shù)據(jù)移位信號
HS595_SH_CP=0;
_nop_(); //短暫延時產(chǎn)生一定寬度的脈沖信號
_nop_(); //短暫延時
HS595_SH_CP=1;
}
//產(chǎn)生數(shù)據(jù)輸出信號
_nop_(); //短暫延時
_nop_(); //短暫延時
_nop_();
HS595_ST_CP=1; //總體輸出
}
void SetRS(bit state)
{
if(state)
{
HS595_data|=0x01; //置1
} else
{
HS595_data&=0xFE; //置0
}
}
void SetRW(bit state)
{
if(state)
{
HS595_data|=0x02; //置1
} else
{
HS595_data&=0xFD; //置0
}
}
void SetE(bit state)
{
if(state)
{
HS595_data|=0x04; //置1
} else
{
HS595_data&=0xFB; //置0
}
}
//發(fā)送低四位
void SetDataL(unsigned char in_data)
{
volatile unsigned char r3;
r3=(in_data<<3); //左移3位
HS595_data&= 0x07; //清除其他位,保留0~2位
HS595_data|=r3&0x78; //寫入數(shù)據(jù)到3~6位
}
//發(fā)送高四位
void SetDataH(unsigned char in_data)
{
volatile unsigned char l4;
l4=(in_data>>4); //右移4位
l4=l4<<3; //左移3位
HS595_data&= 0x07; //清除其他位,保留0~2位
HS595_data|=l4&0x78; //寫入數(shù)據(jù)到3~6位
}
void SendData(void)
{
HC595SendData(HS595_data);
}
全部資料51hei下載地址:
RTX51 LCD1602 74HC595 V1.0.rar
(133.96 KB, 下載次數(shù): 33)
2019-7-4 16:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|