|
RS485通信小改裝,在AB兩線間加一個(gè)小LED燈,可實(shí)時(shí)看到是否在通信,只要一通信就閃爍,接反會(huì)常亮,換個(gè)方向讓LED平時(shí)不亮,通信時(shí)閃爍就行?偼娌缓猛ㄐ诺目蓞⒖。
制作出來的實(shí)物圖如下:
電路原理圖如下:
單片機(jī)程序源碼(主機(jī)+叢機(jī)都有):
#include<main.h>
#include<1602.h>
#include<ds1302.h>
uchar time[]={40,27,1,9,11,5,18}; //改時(shí)間用,初始化時(shí)間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); //初始化時(shí)間,正常后不要,讀1302自己保存的時(shí)間
//改好時(shí)間后不要這句,再下一次程序以后從1302讀時(shí)間
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]); //時(shí)
lcd_write_time(0xcb,time[1]); //分
lcd_write_time(0xce,time[0]); //秒
if(flag==1) //顯示負(fù)溫度
{
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');
}
}
}
/****
******* 串口中斷服務(wù)程序函數(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; //負(fù)溫度
}
else
{
flag=0;
}
wendu=string[1];
}
}
|
評(píng)分
-
查看全部評(píng)分
|