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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1093|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人一区二区三区 | 色欧美综合| 亚洲一区二区av在线 | 亚洲国产精品视频 | 精品视频一二区 | 午夜精品久久久久久不卡欧美一级 | 91精品久久 | 日韩视频一级 | 国产成人精品一区二区三区四区 | 亚洲精品白浆高清久久久久久 | 波多野结衣一区二区三区在线观看 | 国产成年人小视频 | 青青久在线视频 | 91精品久久久久久久久久入口 | 91久久精品一区二区二区 | 韩国久久| 国产欧美日韩视频 | 欧洲视频一区 | 午夜在线小视频 | 日本电影一区二区 | 欧美日韩综合 | 国产精品高潮呻吟久久av野狼 | 亚洲精品自在在线观看 | 免费一二区| 99免费在线视频 | 成人天堂 | 亚洲精品成人av久久 | 亚洲精品久久久久久久久久久 | 一区二区三区四区免费观看 | 欧美bondage紧缚视频 | 精品国产91乱码一区二区三区 | 久久综合久 | 亚洲国产精品成人久久久 | 国产成人精品网站 | 天天干天天干 | 色婷婷亚洲一区二区三区 | aaaaa毛片| 日本精品裸体写真集在线观看 | 色播视频在线观看 | 黄网站涩免费蜜桃网站 | 亚洲成人精品影院 |