#include <reg52.h> //调用单片机头文件
#include <intrins.h>
#include"12864.h"
#define uchar unsigned char //无符路字符型 宏定义 变量范围0~255
#define uint unsigned int //无符路整型 宏定义 变量范围0~65535
sbit rs=P0^0; //寄存器选择信号 H:数据寄存器 L:指令寄存器
sbit rw=P0^1; //寄存器选择信号 H:数据寄存器 L:指令寄存器
sbit e =P0^2; //片选信号 下降沿触发
/***********************语音模块控制IO口的定义************************/
sbit VRST = P3^7;
sbit VBUSY= P3^6;
sbit VSDA = P3^5;
sbit VCS = P3^4;
sbit VSCL = P3^3;
uchar geshu=6;
uchar code gj_ming[]= " 101路公交车 ";
uchar code gj_ming1[]=" ";
uchar code table1[]= " 五泉广场 ";
uchar code table2[]= " 西关十字 ";
uchar code table3[]= " 中山桥 ";
uchar code table4[]= " 西湖公园 ";
uchar code table5[]= " 上西园 ";
uchar code table6[]= " 白马浪 ";
uchar code table7[]= " ";
uchar code table8[]= " ";
uchar code table9[]= " ";
/********************************************************************
* 名称 : 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 init_12864_dis()
{ PutStr(0,0," 欢迎乘坐 ");
PutStr(1,0,gj_ming);
PutStr(2,0,gj_ming1);
PutStr(3,0," ");
}
/***********************小延时函数**************************/
void delay_us (unsigned int us)
{
while(us--)
{
_nop_();
}
}
/***********************三线发码子程序************************/
void Send_threelines(unsigned char addr,uchar dat)
{
unsigned char i;
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;
}
uchar flag_s = 0;
uchar flag_z= 0;
/***************主函数*****************/
void main()
{
uchar num=0; //定时器1,工作在定时方式2
P0 = P1 = P2 = P3 = 0XFF;
LcmInit();//初始化12864
init_12864_dis();
Send_threelines(0,0); //语音播报
while(1)
{
key(); //独立按键程序
if(key_can < 20)
{
if(key_can == 1)
{
if(num < geshu)
{
num++;
}
flag_s = 1;
}
if(key_can == 2)
{
if(num != 0)
num--;
}
if(num == 1) //报第1个站
{
PutStr(1,0,gj_ming);
PutStr(2,0,table1);
PutStr(3,0,gj_ming1);
PutStr(3,0," ");
Send_threelines(1,0); //语音播报
}
if(num == 2) //报第2个站
{
PutStr(1,0,gj_ming);
PutStr(2,0,table2);
PutStr(3,0,gj_ming1);
PutStr(3,0," ");
flag_z=1;
Send_threelines(2,0); //语音播报
}
if(num == 3) //报第3个站
{
PutStr(1,0,gj_ming);
PutStr(2,0,table3);
PutStr(3,0,gj_ming1);
PutStr(3,0," ");
Send_threelines(3,0); //语音播报
}
if(num == 4) //报第4个站
{
PutStr(1,0,gj_ming);
PutStr(2,0,table4);
PutStr(3,0,gj_ming1);
PutStr(3,0," ");
Send_threelines(4,0); //语音播报
}
if(num == 5) //报第5个站
{
PutStr(1,0,gj_ming);
PutStr(2,0,table5);
PutStr(3,0,gj_ming1);
PutStr(3,0," ");
Send_threelines(5,0); //语音播报
}
if(num == 6) //报第5个站
{
PutStr(1,0,gj_ming);
PutStr(2,0,table6);
PutStr(3,0,gj_ming1);
PutStr(3,0," ");
Send_threelines(6,0); //语音播报
}
if(num == 7) //报第5个站
{
PutStr(1,0,gj_ming);
PutStr(2,0,table7);
PutStr(3,0,gj_ming1);
PutStr(3,0," ");
Send_threelines(7,0); //语音播报
}
if(num == 8) //报第5个站
{
PutStr(1,0,gj_ming);
PutStr(2,0,table8);
PutStr(3,0,gj_ming1);
PutStr(3,0," ");
Send_threelines(8,0); //语音播报
}
if(num == 9) //报第9个站
{
PutStr(1,0,gj_ming);
PutStr(2,0,table9);
PutStr(3,0,gj_ming1);
PutStr(3,0," ");
if(flag_s == 1)
{
Send_threelines(10,0); //语音播报
}
else
{
flag_s = 1;
Send_threelines(9,0); //语音播报
}
}
}
}
}