欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2947|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于WT588D+51單片機(jī)的公交報站系統(tǒng)程序 原理圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:761319 發(fā)表于 2022-4-7 08:31 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
制作出來的實(shí)物圖如下:


所用的語音模塊為WT588D
此模塊不建議使用,因為燒錄繁雜(需要燒錄器)。我已改成JQ8900語音模塊。需要的見我另外的帖子。(等這個月下旬再發(fā))

電路原理圖如下:



單片機(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)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表