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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于串口屏和語音控制的單片機代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:981666 發表于 2023-5-7 14:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序代碼
#include "reg51.h"
#include "intrins.h"
bit busy;
unsigned char uart_buff = 0xff;
unsigned char speak_buff = 0x0f;
unsigned char out_buff = 0xff;
unsigned char temp;
unsigned char counter0 = 0;
bit speak_refresh_flag = 0;
bit hmi_refresh_flag = 0;
void delay_ms(unsigned int ms)//延時函數
{
        unsigned char k;
        while(ms--)
        {
        for(k=0;k<123;k++);//晶振頻率12MHz時,1ms實際延時1.016ms。      
}
}
void uart_check( )//串口屏點亮函數
{
switch( SBUF )//循環接收SBUF當中的信息
        {
        case 0x02:
          {
          uart_buff = uart_buff & 0xfe;//接收到02信號后客廳的燈光打開
                break;
                }
        case 0x01:
                {
                uart_buff = uart_buff | 0x01;//接收到01信號后客廳的燈光關閉
                break;
                }
        case 0x04:
                {
                uart_buff = uart_buff & 0xfd;//接收到04的信號后臥室一的燈光打卡
                break;
                }
        case 0x03:
                {
                uart_buff = uart_buff | 0x02;//接收到03的信號后臥室一的燈光關閉
                break;
                }
        case 0x06:
                {
                uart_buff = uart_buff & 0xfb;//接收到06的信號后臥室二的燈光打開
                break;
                }
        case 0x05:
                {
                uart_buff = uart_buff | 0x04;//接收到05的信號后臥室二的燈光關閉
                break;
                }
        case 0x08:
                {
                uart_buff = uart_buff & 0xf7;//接收的08的信號后臥室三的燈光打開
                break;
                }
        case 0x07:
                {
                uart_buff = uart_buff | 0x08;//接收到07的信號后臥室三的燈光關閉
                break;
                }
        case 0x00:
                {
                uart_buff = uart_buff & 0xf0;//接收到00的信號后全部的房間的燈光打開
                break;
                }
        case 0xff:
                {
                uart_buff = uart_buff | 0x0f;//接收到ff信號后全部房間的燈光都關閉
                break;
                }
        default: break;
        }
}
void UartIsr() interrupt 4//串口中斷函數
{
    if (TI)
    {
        TI = 0;//發送信號后TI置0
        busy = 0;//清空BUSY中的信息
    }
    if (RI)
    {
        RI = 0;//接收信號后RI置0
                          hmi_refresh_flag = 1;
        //uart_buff = SBUF;
                          uart_check();
    }
}
void Timer0Isr() interrupt 1//延時中斷函數
{
TH0 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;
counter0++;
        if(counter0 == 4)
        {
        counter0 = 0;
        temp = ( P0 & 0X0F );
                if(speak_buff != temp)
                {
                        speak_buff = temp;
                        speak_refresh_flag = 1;
                }
        }
}
      
void UartInit( )//功能初始化
{
    SCON = 0x50;
    TMOD = 0x21;
          PCON = PCON | 0X80;
    TL1 = 0XFA;
    TH1 = 0XFA;
    TR1 = 1;
    busy = 0;
}
void Timer0Init()//內存初始化
{
TMOD = 0x21;
TH0 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;
TR0 = 1;
}
void UART_Send_Byte(char dat)//字節發送
{
    while (busy);
    busy = 1;
    SBUF = dat;
}
void UART_Send_Str(char *p)//字符串發送
{
    while (*p)
    {
        UART_Send_Byte(*p++);
    }
}
void UART_Send_END(void)   //發送結束符
{
         UART_Send_Byte(0xFF);
         UART_Send_Byte(0xFF);
         UART_Send_Byte(0xFF);
}
void speak_check( )//語音點亮函數
{
switch(speak_buff)//循環語音接收模塊內存
{
        case 0x00://接收到02信號后客廳的燈光打開
        {
        UART_Send_Str("bt0.pic=3"); //發送指令控制串口屏控制圖標的改變        UART_Send_END();
        UART_Send_Str("bt1.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=3");  
        UART_Send_END();//結束指令發送
        break;
        }
        case 0x01://接受到01信號后客廳的燈光關閉
        {
        UART_Send_Str("bt0.pic=4"); //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=3");  
        UART_Send_END();//結束指令發送
                break;
        }
        case 0x02:/接受到04信號后客廳的燈光打開
        {
        UART_Send_Str("bt0.pic=3"); //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=3");  
        UART_Send_END();//結束指令發送
                break;
        }
        case 0x03://接受到03信號后客廳的燈光關閉
        {
        UART_Send_Str("bt0.pic=4"); //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=3");  
        UART_Send_END();/結束指令發送
                break;
        }
        case 0x04://接受到06信號后客廳的燈光打開
        {
        UART_Send_Str("bt0.pic=3"); //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=3");  
        UART_Send_END();//結束指令發送
                break;
        }
        case 0x05://接受到05信號后客廳的燈光關閉
        {
        UART_Send_Str("bt0.pic=4"); //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=3");  
        UART_Send_END();//結束指令發送
                break;
        }
        case 0x06:/接受到08信號后客廳的燈光打開
        {
        UART_Send_Str("bt0.pic=3");  //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=3");  
        UART_Send_END();/結束指令發送
                break;
        }
        case 0x07://接受到07信號后客廳的燈光關閉
        {
        UART_Send_Str("bt0.pic=4");  //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=3");  
        UART_Send_END();//結束指令發送
                break;
        }
        case 0x08:
        {
        UART_Send_Str("bt0.pic=4");  //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=3");  
        UART_Send_END();/結束指令發送
                break;
        }
        case 0x09:
        {
        UART_Send_Str("bt0.pic=4");  //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=4");  
        UART_Send_END();//結束指令發送
                break;
        }
        case 0x0a:
        {
        UART_Send_Str("bt0.pic=3"); //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=4");  
        UART_Send_END();//結束指令發送
                break;
        }
        case 0x0b:
        {
        UART_Send_Str("bt0.pic=4");  //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=4");  
        UART_Send_END();//結束指令發送
                break;
        }
        case 0x0c:
        {
        UART_Send_Str("bt0.pic=3"); //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=4");  
        UART_Send_END();//結束指令發送
                break;
        }
        case 0x0d:
        {
        UART_Send_Str("bt0.pic=4"); //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=3");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=4");  
        UART_Send_END();/結束指令發送
                break;
        }
        case 0x0e:
        {
        UART_Send_Str("bt0.pic=3"); //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=4");  
        UART_Send_END();//結束指令發送
                break;
        }
        case 0x0f:
        {
        UART_Send_Str("bt0.pic=4"); //發送指令控制串口屏控制圖標的改變
        UART_Send_END();
        UART_Send_Str("bt1.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt2.pic=4");  
        UART_Send_END();
        UART_Send_Str("bt3.pic=4");  
        UART_Send_END();/結束指令發送
                break;
        }
        default:break;
      
}
}
void main()
{
    P0 = 0XFF;
          UartInit();
          Timer0Init();
    ES = 1;
          ET0 = 1;
    EA = 1;
          delay_ms(1000);
          UART_Send_END();
   
    while (1)
    {
                        while((speak_refresh_flag == 0) && (hmi_refresh_flag == 0))/循環語音恢復標志和屏幕恢復標志都等于零那么所有房間的燈光都關閉。
                        {
                                P1 = out_buff;
                        }
      if((speak_refresh_flag == 1) || (hmi_refresh_flag == 1))//如果語音恢復標志或者是屏幕恢復標志其中一個等于一。                              
                        {
                                if( speak_refresh_flag == 1 )//如果是語音的等于一那么執行語音模塊。                                {
                                out_buff = speak_buff;
                                speak_check( );
                                speak_refresh_flag = 0;
                                }
                                else if( hmi_refresh_flag == 1 )//若是屏幕那么就執行屏幕功能。                                {
                                out_buff = uart_buff;
                                hmi_refresh_flag = 0;
                                }
                        }                              
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲a在线视频 | 欧美一区二区三区视频 | 欧洲视频一区二区 | 亚洲一区二区精品视频在线观看 | 日本精品视频在线 | 日本 欧美 国产 | 国产亚洲一区二区三区在线观看 | 北条麻妃99精品青青久久 | 亚洲第1页 | 亚洲成人av | 色综合色综合色综合 | 天堂成人国产精品一区 | 美女久久久 | 青草青草久热精品视频在线观看 | 黄色播放| 国产日韩精品一区二区 | 精品福利在线 | 欧美精品在线免费观看 | 亚洲91视频 | 精品一区二区三区四区视频 | 精品欧美乱码久久久久久 | 成人精品久久 | 日韩欧美在线精品 | 成人午夜电影网 | 国产精品国产三级国产aⅴ无密码 | 日韩有码一区 | 亚洲国产在 | 成人免费观看视频 | 国产成人影院 | 成人欧美一区二区三区黑人孕妇 | 最新黄色毛片 | www.国产| 成人不卡 | 久久毛片网站 | 欧美日韩成人 | 少妇一级淫片免费播放 | www国产成人免费观看视频,深夜成人网 | 精品无码久久久久久国产 | 成人综合伊人 | 国产免费视频 | www.国产精品 |