|
制作出來的實(shí)物圖如下:
1 (29).JPG (427.3 KB, 下載次數(shù): 36)
下載附件
成品圖
2022-4-7 08:19 上傳
所用的語音模塊為WT588D
此模塊不建議使用,因為燒錄繁雜(需要燒錄器)。我已改成JQ8900語音模塊。需要的見我另外的帖子。(等這個月下旬再發(fā))
電路原理圖如下:
51hei.png (89.13 KB, 下載次數(shù): 25)
下載附件
2022-4-8 19:20 上傳
單片機(jī)代碼如下:
#include <reg52.h> //調(diào)用單片機(jī)頭文件
#include <intrins.h>
#include "JQ8900.h"
#define uchar unsigned char //無符路字符型 宏定義 變量范圍0~255
#define uint unsigned int //無符路整型 宏定義 變量范圍0~65535
/*12864液晶模塊引腳定義*/
sbit rs=P0^0; //寄存器選擇信號 H:數(shù)據(jù)寄存器 L:指令寄存器
sbit rw=P0^1; //寄存器選擇信號 H:數(shù)據(jù)寄存器 L:指令寄存器
sbit e =P0^2; //片選信號 下降沿觸發(fā)
#if 0
/*
語音模塊控制IO口的定義:棄用 該位WT588D語音模塊 改用JQ9800語音模塊
*/
sbit VRST = P3^7;
sbit VBUSY= P3^6;
sbit VSDA = P3^5;
sbit VCS = P3^4;
sbit VSCL = P3^3;
#endif
uchar geshu=7; //公交站臺的個數(shù)
/*12864液晶模塊顯示信息*/
uchar code gj_ming[]= " 3 路公交車";
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[] = "下沙行政中心東 ";
//uchar code table10[]= "海達(dá)南路天成東路";
//uchar code table11[]= "----中沙村---- ";
/********************************************************************
* 名稱 : 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ù) us */
void delay_uint(uint z)
{
while(z--);
}
/************ 寫命令函數(shù) *****************/
void write_com(uchar com)
{
P2=com;
rw=0;
rs=0;
delay_uint(25);
e=1;
delay_uint(50);
e=0;
}
/************ 寫數(shù)據(jù)函數(shù) *****************/
void write_dat(uchar dat)
{
P2=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(5);
}
}
/************12864液晶初始化函數(shù)*****************/
void init_12864()
{
write_com(0x30);
write_com(0x30);
write_com(0x08);
write_com(0x10);
write_com(0x0c);
write_com(0x01);
write_com(0x06);
delay_1ms(100);
}
/************初始化顯示*****************/
void init_12864_dis()
{
write_string(1,0," 歡迎乘坐 ");
write_string(2,0,gj_ming);
write_string(3,0," ");
write_string(4,0," ");
}
/***********************小延時函數(shù)**************************/
void delay_us (unsigned int us)
{
while(us--)
{
_nop_();
}
}
#if 0
/*
**********************三線發(fā)碼子程序***********************
注意:該函數(shù)棄用,因WT558D語音模塊需要上位機(jī)編程 故此處改用JQ8900語音模塊
*/
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); //忙等待
}
#endif
/********************獨(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;
}
uchar flag_s = 1;//鎖定從起點(diǎn)到終點(diǎn) 跟你們講個笑話 公交車只會從起點(diǎn)到終點(diǎn) 好笑不
uchar flag_e = 0;//鎖定從終點(diǎn)到起點(diǎn)
/***************主函數(shù)*****************/
void main()
{
uchar num=0; //定時器1,工作在定時方式2
P0 = P1 = P2 = P3 = 0XFF;
init_12864();
init_12864_dis();
//Send_threelines(0,0); //語音播報
while(1)
{
key(); //獨(dú)立按鍵程序
if(key_can < 20)
{
//語音播報
IO1 = 0;
delay_1ms(20);
IO1 = 1;
if(key_can == 1)
{
if(flag_e == 0 && flag_s == 1)
{
if(num < geshu)
{
num++;
//flag_s = 1;
}
}
}
if(key_can == 2)
{
//語音播報
IO1 = 0;
delay_1ms(20);
IO1 = 1;
if(flag_s == 0 && flag_e == 1)
{
if(num != 0)
{
num--;
//flag_e = 1;
}
}
}
if(num == 1) //報第1個站
{
write_string(1,0,gj_ming);
write_string(3,0,table1);
write_string(2,0," ");
write_string(4,0," ");
//語音播報
IO1 = 0;
delay_1ms(20);
IO1 = 1;
if(flag_e == 1)//從終點(diǎn)--起點(diǎn)
{
flag_e = 0;//到站了
flag_s = 1;//那么再次出發(fā)智能從起點(diǎn)-終點(diǎn)
}
}
if(num == 2) //報第2個站
{
write_string(1,0,gj_ming);
write_string(2,0," ");
write_string(3,0,table2);
write_string(4,0," ");
//語音播報
IO2 = 0;
delay_1ms(20);
IO2 = 1;
}
if(num == 3) //報第3個站
{
write_string(1,0,gj_ming);
write_string(3,0,table3);
write_string(2,0," ");
write_string(4,0," ");
//語音播報
IO3 = 0;
delay_1ms(20);
IO3 = 1;
}
if(num == 4) //報第4個站
{
write_string(1,0,gj_ming);
write_string(3,0,table4);
write_string(2,0," ");
write_string(4,0," ");
//語音播報
IO4 = 0;
delay_1ms(20);
IO4 = 1;
}
if(num == 5) //報第5個站
{
write_string(1,0,gj_ming);
write_string(3,0,table5);
write_string(2,0," ");
write_string(4,0," ");
//語音播報
IO5 = 0;
delay_1ms(20);
IO5 = 1;
}
if(num == 6) //報第6個站
{
write_string(1,0,gj_ming);
write_string(3,0,table6);
write_string(2,0," ");
write_string(4,0," ");
//語音播報
IO6 = 0;
delay_1ms(20);
IO6 = 1;
}
if(num == 7) //報第7個站
{
write_string(1,0,gj_ming);
write_string(3,0,table7);
write_string(2,0," ");
write_string(4,0," ");
IO7 = 0;
delay_1ms(20);
IO7 = 1;
if(flag_s == 1)//從起點(diǎn)--終點(diǎn) 到站了
{
flag_s = 0;
flag_e = 1;//只能從終點(diǎn)到起點(diǎn)了
}
}
}
}
}
Keil代碼下載:
代碼原理圖.7z
(1004.89 KB, 下載次數(shù): 27)
2022-4-8 19:21 上傳
點(diǎn)擊文件名下載附件
程序 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|