我現在畢業論文導師說要加功能,我完全不懂,求幫忙啊
我現在有一個買來的基礎的板子,由TH12864、stc89c52、WT588d、現在能實現的是上下報站、nrf報站。就是這樣的,帶nrf功能的https://item.taobao.com/item.htm ... amp;_u=72359df3f3db
現在老師要實現一個統計車上人數顯示的功能怎么辦啊?
我是小白求具體的修改后的代碼,謝謝。
下面是程序 我現在手上有一個紅外模塊就是
https://detail.tmall.com/item.ht ... amp;_u=72359df3b940
不知道可不可以,如果不行 我買一個這樣的
https://item.taobao.com/item.htm ... &id=44963867710
謝謝,下面是本來主機的代碼
#include <reg52.h> //調用單片機頭文件
#define uchar unsigned char //無符路字符型 宏定義 變量范圍0~255
#define uint unsigned int //無符路整型 宏定義 變量范圍0~65535
#include <intrins.h>
#include "nrf24l01.h"
sbit rs=P2^5; //寄存器選擇信號 H:數據寄存器 L:指令寄存器
sbit rw=P2^6; //寄存器選擇信號 H:數據寄存器 L:指令寄存器
sbit e =P2^7; //片選信號 下降沿觸發
/***********************語音模塊控制IO口的定義************************/
sbit VRST = P3^7;
sbit VBUSY= P3^6;
sbit VSDA = P3^5;
sbit VCS = P3^4;
sbit VSCL = P3^3;
uchar yujing[3];
uchar flag_1,flag_2;
uint flag_300ms;
/********************************************************************
* 名稱 : delay_1ms()
* 功能 : 延時1ms函數
* 輸入 : q
* 輸出 : 無
***********************************************************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<115;j++);
}
/************ 延時函數 *****************/
void delay_uint(uint z)
{
while(z--);
}
/***************交換函數 高位變低位 低位變高位*****************/
uchar change_dat(uchar dat)
{
uchar i,value;
for(i=0;i<8;i++)
{
value <<= 1;
if((dat & 0x01) == 0x01)
value |= 0x01;
dat >>= 1;
}
return value;
}
/************ 寫命令函數 *****************/
void write_com(uchar com)
{
P0=change_dat(com);
rw=0;
rs=0;
delay_uint(25);
e=1;
delay_uint(50);
e=0;
}
/************ 寫數據函數 *****************/
void write_dat(uchar dat)
{
P0=change_dat(dat);
rw=0;
rs=1;
delay_uint(25);
e=1;
delay_uint(50);
e=0;
}
/**********************************************************
*函數名: addr_12864
*功能:寫地址
*說明:寫漢字時要寫個地址
*輸入:無
*返回:無
**********************************************************/
void addr_12864(uchar hang,uchar lie) //地址轉換
{
uchar address;
switch(hang)
{
case 1: address=0x80 + lie ;
break;
case 2: address=0x90 + lie ;
break;
case 3: address=0x88 + lie ;
break;
case 4: address=0x98 + lie ;
break;
default :
break;
}
write_com(address);
}
/**********************************************************
*函數名: write_string
*功能:在12864上顯示字符數據
*說明:
*輸入:無
*返回:無
**********************************************************/
void write_string(uchar hang,uchar lie,uchar *p)
{
addr_12864(hang,lie); //地址轉換
while(*p != '\0')
{
write_dat(*p);
p++;
delay_uint(50);
}
}
/************12864液晶初始化函數*****************/
void init_12864()
{
write_com(0x30);
write_com(0x0c);
write_com(0x01);
delay_1ms(100);
}
/************初始化顯示*****************/
void init_12864_dis()
{
write_string(1,0," 歡迎乘坐 ");
write_string(2,0," 403路公交車 ");
write_string(3,0," ");
write_string(4,0," ");
}
/***********************小延時函數**************************/
void delay_us (unsigned int us)
{
while(us--)
{
_nop_();
}
}
/***********************語音子程序************************/
void Send_threelines(unsigned char addr,uchar dat)
{
unsigned char i;
VRST=0;
delay_1ms(5);
VRST=1;
delay_1ms(20); /* 復位拉高20ms*/
VCS=0;
delay_1ms(5); /* 片選拉低5ms */
for(i=0;i<8;i++)
{
VSCL=0;
if(addr&0x01)
{
VSDA=1;
}
else
VSDA=0;
addr>>=1;
delay_us(150); /* 150us */
VSCL=1;
delay_us(150); /* 150us */
}
VCS=1;
delay_1ms(30);
if(dat == 1)
while(VBUSY == 0); //忙等待
}
/********************獨立按鍵程序*****************/
uchar key_can; //按鍵值
void key() //獨立按鍵程序
{
static uchar key_new;
key_can = 20; //按鍵值還原
P1 |= 0x0f;
if((P1 & 0x0f) != 0x0f) //按鍵按下
{
delay_1ms(1); //按鍵消抖動
if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
{ //確認是按鍵按下
key_new = 0;
switch(P1 & 0x0f)
{
case 0x0e: key_can = 2; break; //得到按鍵值
case 0x0d: key_can = 1; break; //得到按鍵值
}
}
}
else //按鍵松開
key_new = 1;
}
/***************主函數*****************/
void main()
{
uchar num;
P0 = P1 = P2 = P3 = 0XFF;
CE_24=0;
SCK_24=0;
CSN_24=1;
init_12864();
init_12864_dis();
Send_threelines(0,0); //語音播報
RX_Mode();
while(1)
{
key(); //獨立按鍵程序
if(key_can < 20)
{
if(key_can == 1)
{
if(num < 2)
{
num++;
}
}
if(key_can == 2)
{
if(num != 0)
num--;
}
if(num == 1) //報第1個站
{
write_string(1,0," 403路公交車 ");
write_string(2,0," 定海新村 ");
write_string(3,0," ");
write_string(4,0," ");
flag_1 = 0;
flag_2 = 0;
Send_threelines(1,0); //語音播報
}
if(num == 2) //報第2個站
{
write_string(1,0," 403路公交車 ");
write_string(2,0," 拱宸橋東 ");
write_string(3,0," ");
write_string(4,0," ");
flag_1 = 0;
flag_2 = 0;
Send_threelines(2,0); //語音播報
}
}
flag_300ms ++;
if(flag_300ms >= 300) //300ms 處理程序
{
flag_300ms = 0;
// led = 1;
if(nRF24L01_RxPacket(Rx_Buf))
{
// led = 0;
if(flag_1 == 0)
{
if(Rx_Buf[1] == 1) //報第1個站
{
write_string(1,0," 403路公交車 ");
write_string(2,0," 定海新村 ");
write_string(3,0," ");
write_string(4,0," ");
Send_threelines(1,1); //語音播報
flag_1 = 1;
flag_2 = 0;
num = 1;
}
}
if(flag_2 == 0)
{
if(Rx_Buf[1] == 2) //報第2個站
{
write_string(1,0," 403路公交車 ");
write_string(2,0," 拱宸橋東 ");
write_string(3,0," ");
write_string(4,0," ");
Send_threelines(2,1); //語音播報
flag_1 = 0;
flag_2 = 1;
num = 2;
}
}
Rx_Buf[0] = Rx_Buf[1] = 0;
}
}
delay_1ms(1);
}
}
|