|
RS485通信小改裝,在AB兩線間加一個小LED燈,可實時看到是否在通信,只要一通信就閃爍,接反會常亮,換個方向讓LED平時不亮,通信時閃爍就行。總玩不好通信的可參考。
制作出來的實物圖如下:
20181109_013230.jpg (348.39 KB, 下載次數(shù): 56)
下載附件
2018-11-9 01:41 上傳
電路原理圖如下:
15416988440950.40689689440908094.jpg (294.71 KB, 下載次數(shù): 34)
下載附件
2018-11-9 01:41 上傳
單片機程序源碼(主機+叢機都有):
#include<main.h>
#include<1602.h>
#include<ds1302.h>
uchar time[]={40,27,1,9,11,5,18}; //改時間用,初始化時間2012年7月25日 23:59: 40
uchar code tab1[]="20 - - ";
uchar code tab2[]="T: : :";
uchar flag;
uchar wendu;
void delay(uint x)
{
uint m,n;
for(m=x;m>0;m--)
for(n=110;n>0;n--);
}
/****
******* 串口初始化函數(shù)
*****/
void uart_init()
{
TMOD=0x20; //9600bps
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TR1=1;
ES=1;
EA=1;
UART_EN=0; //串口一直處于接收狀態(tài)
}
void main()
{
lcd_init();
uart_init();
lcd_write_str(0x80,tab1);
lcd_write_str(0xc0,tab2);
//DS1302_set_time(&time); //初始化時間,正常后不要,讀1302自己保存的時間
//改好時間后不要這句,再下一次程序以后從1302讀時間
while(1)
{
DS1302_read_time(&time);
lcd_write_time(0x82,time[6]); //年
switch(time[5]) //星期
{
case 1: lcd_write_str(0x8c,"MON");break;
case 2: lcd_write_str(0x8c,"TUE");break;
case 3: lcd_write_str(0x8c,"WED");break;
case 4: lcd_write_str(0x8c,"THU");break;
case 5: lcd_write_str(0x8c,"FRI");break;
case 6: lcd_write_str(0x8c,"SAT");break;
case 7: lcd_write_str(0x8c,"SUN");break;
}
lcd_write_time(0x85,time[4]); //月
lcd_write_time(0x88,time[3]); //日
lcd_write_time(0xc8,time[2]); //時
lcd_write_time(0xcb,time[1]); //分
lcd_write_time(0xce,time[0]); //秒
if(flag==1) //顯示負溫度
{
lcd_write_com(0xc2);
lcd_write_date('-');
lcd_wendu(0xc6,wendu);
}
else //顯示正溫度
{
lcd_write_com(0xc2);
lcd_write_date('+');
lcd_wendu(0xc3,wendu);
lcd_write_com(0xc6);
lcd_write_date('C');
}
}
}
/****
******* 串口中斷服務程序函數(shù)
*****/
void ser() interrupt 4
{
static uchar string[2],i;
if(RI)
{
RI=0;
string[i++]=SBUF;
if(i>1)
i=0;
if(string[0]=='-')
{
flag=1; //負溫度
}
else
{
flag=0;
}
wendu=string[1];
}
}
|
評分
-
查看全部評分
|