標(biāo)題:
關(guān)于公交車語音系統(tǒng)車上人數(shù)
[打印本頁]
作者:
舊事已舊
時間:
2018-5-7 15:19
標(biāo)題:
關(guān)于公交車語音系統(tǒng)車上人數(shù)
我現(xiàn)在畢業(yè)論文導(dǎo)師說要加功能,我完全不懂,求幫忙啊
我現(xiàn)在有一個買來的基礎(chǔ)的板子,由
TH12864、stc89c52、WT588d、現(xiàn)在能實現(xiàn)的是上下報站、nrf報站。
就是這樣的,帶nrf功能的
https://item.taobao.com/item.htm ... amp;_u=72359df3f3db
現(xiàn)在老師要實現(xiàn)一個統(tǒng)計車上人數(shù)顯示的功能怎么辦?
我是小白求具體的修改后的代碼,謝謝。
下面是程序 我現(xiàn)在手上有一個紅外模塊就是
https://detail.tmall.com/item.ht ... amp;_u=72359df3b940
不知道可不可以,如果不行 我買一個這樣的
https://item.taobao.com/item.htm ... &id=44963867710
謝謝,下面是本來主機(jī)的代碼
#include <reg52.h> //調(diào)用單片機(jī)頭文件
#define uchar unsigned char //無符路字符型 宏定義 變量范圍0~255
#define uint unsigned int //無符路整型 宏定義 變量范圍0~65535
#include <intrins.h>
#include "nrf24l01.h"
sbit rs=P2^5; //寄存器選擇信號 H:數(shù)據(jù)寄存器 L:指令寄存器
sbit rw=P2^6; //寄存器選擇信號 H:數(shù)據(jù)寄存器 L:指令寄存器
sbit e =P2^7; //片選信號 下降沿觸發(fā)
/***********************語音模塊控制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函數(shù)
* 輸入 : q
* 輸出 : 無
***********************************************************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<115;j++);
}
/************ 延時函數(shù) *****************/
void delay_uint(uint z)
{
while(z--);
}
/***************交換函數(shù) 高位變低位 低位變高位*****************/
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;
}
/************ 寫命令函數(shù) *****************/
void write_com(uchar com)
{
P0=change_dat(com);
rw=0;
rs=0;
delay_uint(25);
e=1;
delay_uint(50);
e=0;
}
/************ 寫數(shù)據(jù)函數(shù) *****************/
void write_dat(uchar dat)
{
P0=change_dat(dat);
rw=0;
rs=1;
delay_uint(25);
e=1;
delay_uint(50);
e=0;
}
/**********************************************************
*函數(shù)名: addr_12864
*功能:寫地址
*說明:寫漢字時要寫個地址
*輸入:無
*返回:無
**********************************************************/
void addr_12864(uchar hang,uchar lie) //地址轉(zhuǎn)換
{
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);
}
/**********************************************************
*函數(shù)名: write_string
*功能:在12864上顯示字符數(shù)據(jù)
*說明:
*輸入:無
*返回:無
**********************************************************/
void write_string(uchar hang,uchar lie,uchar *p)
{
addr_12864(hang,lie); //地址轉(zhuǎn)換
while(*p != '\0')
{
write_dat(*p);
p++;
delay_uint(50);
}
}
/************12864液晶初始化函數(shù)*****************/
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," ");
}
/***********************小延時函數(shù)**************************/
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); /* 復(fù)位拉高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); //忙等待
}
/********************獨(dú)立按鍵程序*****************/
uchar key_can; //按鍵值
void key() //獨(dú)立按鍵程序
{
static uchar key_new;
key_can = 20; //按鍵值還原
P1 |= 0x0f;
if((P1 & 0x0f) != 0x0f) //按鍵按下
{
delay_1ms(1); //按鍵消抖動
if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
{ //確認(rèn)是按鍵按下
key_new = 0;
switch(P1 & 0x0f)
{
case 0x0e: key_can = 2; break; //得到按鍵值
case 0x0d: key_can = 1; break; //得到按鍵值
}
}
}
else //按鍵松開
key_new = 1;
}
/***************主函數(shù)*****************/
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(); //獨(dú)立按鍵程序
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);
}
}
作者:
優(yōu)雅的刺猬
時間:
2018-5-30 00:11
你是想怎么數(shù)人數(shù)??用模擬計數(shù)還是紅外檢測??
作者:
LanSeXinQing
時間:
2018-5-30 11:22
每上車一個人,數(shù)顯加1,每下一個人,數(shù)顯減1.前后兩個門各放一個檢測。
作者:
weidoit
時間:
2018-5-30 15:15
首先得解決排隊的問題,有序的上車,有序的下車,貌似這個秩序不容易。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1