久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2968|回復: 0
打印 上一主題 下一主題
收起左側

基于WT588D+51單片機的公交報站系統程序 原理圖

[復制鏈接]
跳轉到指定樓層
樓主
制作出來的實物圖如下:


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

電路原理圖如下:



單片機代碼如下:
#include <reg52.h>                 //調用單片機頭文件
#include <intrins.h>
#include "JQ8900.h"

#define uchar unsigned char  //無符路字符型 宏定義        變量范圍0~255
#define uint  unsigned int         //無符路整型 宏定義        變量范圍0~65535

/*12864液晶模塊引腳定義*/
sbit rs=P0^0;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
sbit rw=P0^1;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
sbit e =P0^2;         //片選信號   下降沿觸發

#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; //公交站臺的個數
/*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[]= "海達南路天成東路";
//uchar code  table11[]= "----中沙村----  ";

/********************************************************************
* 名稱 : delay_1ms()
* 功能 : 延時1ms函數
* 輸入 : q
* 輸出 : 無
***********************************************************************/
void delay_1ms(uint q)
{
        uint i,j;
        for(i=0;i<q;i++)
                for(j=0;j<115;j++);
}
                                                                              
/* 延時函數 us */
void delay_uint(uint z)
{
   while(z--);
}

/************ 寫命令函數  *****************/
void write_com(uchar com)
{

   P2=com;
   rw=0;
   rs=0;
   delay_uint(25);
   e=1;
   delay_uint(50);
   e=0;
}
/************ 寫數據函數  *****************/
void write_dat(uchar dat)
{

   P2=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(5);
        }
}

/************12864液晶初始化函數*****************/
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,"        ");
}

/***********************小延時函數**************************/
void  delay_us (unsigned int us)
{
        while(us--)
        {
                _nop_();
        }
}

#if 0
/*
**********************三線發碼子程序***********************
注意:該函數棄用,因WT558D語音模塊需要上位機編程 故此處改用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

/********************獨立按鍵程序*****************/
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 = 1;//鎖定從起點到終點 跟你們講個笑話 公交車只會從起點到終點 好笑不
uchar flag_e = 0;//鎖定從終點到起點
/***************主函數*****************/
void main()
{         
        uchar num=0;                                 //定時器1,工作在定時方式2
        P0 = P1 = P2 = P3 = 0XFF;
        init_12864();                        
        init_12864_dis();
        //Send_threelines(0,0);    //語音播報
        while(1)
        {
                key();         //獨立按鍵程序        
                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)//從終點--起點
                                {
                                        flag_e = 0;//到站了
                                        flag_s = 1;//那么再次出發智能從起點-終點
                                }        
                        }
                        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)//從起點--終點 到站了
                                {
                                        flag_s = 0;
                                        flag_e = 1;//只能從終點到起點了
                                }
                        }
                }
        }
}

Keil代碼下載: 代碼原理圖.7z (1004.89 KB, 下載次數: 27)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美综合在线观看 | 国产免费一区二区 | 欧美lesbianxxxxhd视频社区 | 国产精品中文 | 久久久区 | 国产精品视频久久久 | av中文在线播放 | 91精品一区| 天天草天天爱 | 亚洲精品乱码8久久久久久日本 | 亚洲视频一区在线播放 | 色爱综合网 | 免费国产精品久久久久久 | 国产黄色小视频在线观看 | 久久久成人精品 | 激情一区二区三区 | 国产高清无av久久 | 一区不卡在线观看 | 99免费视频| 国产精品久久一区二区三区 | 久久性av | 96久久久久久 | 国产情侣一区 | 夜夜操天天艹 | av网站免费 | 精品成人69xx.xyz | 精品1区2区 | 日韩一区二区三区在线 | 国产在线a| 国产aa| 欧美午夜视频 | 久久新| 国产精品999 | 91久久爽久久爽爽久久片 | 一区二区三区在线 | 中文字幕第一页在线 | 欧美在线日韩 | 91www在线观看| 中文日韩在线 | 日韩免费一区二区 | 欧美一级毛片久久99精品蜜桃 |