我现在毕业论文导师说要加功能,我完全不懂,求帮忙啊
我现在有一个买来的基础的板子,由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);
}
}
|