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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1972|回復: 4
收起左側

stc15單片機字符串發送程序錯誤

[復制鏈接]
ID:343797 發表于 2020-3-26 18:32 | 顯示全部樓層 |閱讀模式
stc15單片機,需求:按鍵高電平按下,發送一次對應的字符串,松開后再按下再發送一次,現在出現的問題是按下持續發送
主程序里void分號前的分號不是寫錯,不寫會報錯,求大神幫忙解決

單片機主程序:
#include "stc15.h"
#include "uart.h"
#define unit unsigned int
#define uchar unsigned char
unsigned char a;
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
sbit k4=P1^4;
sbit k5=P1^5;
sbit k6=P5^5;
sbit k7=P1^6;
sbit k8=P2^6;
sbit k9=P2^5;
sbit k10=P2^4;
sbit k11=P2^3;
sbit b1=P2^7;
sbit out1=P3^5;
sbit out2=P3^6;
sbit out3=P3^7;
sbit out4=P1^4;      //
sbit out5=P1^5;     //


void delay(unit z)          //延時函數
  {
     unit x,y;
     for(x=z;x>0;x--)
        for(y=110;y>0;y--);
        }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            C
                                
;void main()
{

uart_init(); //串口初始化

    while(1)
    {
    k1=k2=k3=k4=k5=k6=k7=k8=k9=k10=k11=b1=0;
        if(k1==1)            //第1個按鍵
                  {                  
                          delay(10);
                          if(k1==1)
                          {  
                              SendString("qq123");
                            while(!k1);
                          }                              
                  }
         if(k2==1)            //第2個按鍵
                  {                  
                          delay(10);
                          if(k2==1)
                          {      
                              SendString("qq124");
                                 while(!k2);
                                 
                          }                          
                  }
                 if(k3==1)            //第3個按鍵
                  {                  
                          delay(10);
                          if(k3==1)
                          {
                           
                              SendString("qq125");
                                 while(!k3);
                           
                          }                          
                  }
                 if(k4==1)            //第4個按鍵
                  {                  
                          delay(10);
                          if(k4==1)
                          {
                           
                              SendString("qq126");
                                 while(!k4);
                           
                          }                          
                  }
                 if(k5==1)            //第5個按鍵
                  {                  
                          delay(10);
                          if(k5==1)
                          {
                             
                              SendString("qq127");
                                 while(!k5);
                           
                          }                          
                  }
                 if(k6==1)            //第6個按鍵
                  {                  
                          delay(10);
                          if(k6==1)
                          {
                           
                              SendString("qq128");
                                while(!k6);
                           
                          }                          
                  }
                 if(k7==1)            //第7個按鍵
                  {                  
                          delay(10);
                          if(k7==1)
                          {
                              
                              SendString("qq129");
                                 while(!k7);
                           
                          }                          
                  }
                 if(k8==1)            //第8個按鍵
                  {                  
                          delay(10);
                          if(k8==1)
                          {
                             
                              SendString("qq130");
                                 while(!k8);
                           
                          }                          
                  }
                 if(k9==1)            //第9個按鍵
                  {                  
                          delay(10);
                          if(k9==1)
                          {
                           
                              SendString("qq131");
                                while(!k9);
                           
                          }                          
                  }
                 if(k10==1)            //第10個按鍵
                  {                  
                          delay(10);
                          if(k10==1)
                          {
                              
                              SendString("qq132");
                              while(!k10);
                           
                          }                          
                  }
                 if(k11==1)            //第11個按鍵
                  {                  
                          delay(10);
                          if(k11==1)
                          {
                              
                              SendString("qqwqwdwq");
                                   while(!k11);
                           
                          }                          
                  }
    }
}
        


uart.h:
#include "intrins.h"

typedef unsigned char BYTE;
typedef unsigned int WORD;

#define FOSC 11059200L          //系統頻率
#define BAUD 9600            //串口波特率

#define NONE_PARITY     0       //無校驗
#define ODD_PARITY      1       //奇校驗
#define EVEN_PARITY     2       //偶校驗
#define MARK_PARITY     3       //標記校驗
#define SPACE_PARITY    4       //空白校驗

#define PARITYBIT NONE_PARITY   //定義校驗位

/*sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;

sfr AUXR  = 0x8e;               //輔助寄存器

sfr P_SW1   = 0xA2;             //外設功能切換寄存器1



sbit P22 = P2^2; */
#define S1_S0 0x40              //P_SW1.6
#define S1_S1 0x80              //P_SW1.7
sbit bit9 = P2^2;           //P2.2 顯示UART數據位9
bit busy;

void SendData(BYTE dat);
void SendString(char *s);

void uart_init()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    P6M0 = 0x00;
    P6M1 = 0x00;
    P7M0 = 0x00;
    P7M1 = 0x00;

    ACC = P_SW1;
    ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
    P_SW1 = ACC;                //(P3.0/RxD, P3.1/TxD)
   
//  ACC = P_SW1;
//  ACC &= ~(S1_S0 | S1_S1);    //S1_S0=1 S1_S1=0
//  ACC |= S1_S0;               //(P3.6/RxD_2, P3.7/TxD_2)
//  P_SW1 = ACC;  
//  
//  ACC = P_SW1;
//  ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=1
//  ACC |= S1_S1;               //(P1.6/RxD_3, P1.7/TxD_3)
//  P_SW1 = ACC;  

#if (PARITYBIT == NONE_PARITY)
    SCON = 0x50;                //8位可變波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
    SCON = 0xda;                //9位可變波特率,校驗位初始為1
#elif (PARITYBIT == SPACE_PARITY)
    SCON = 0xd2;                //9位可變波特率,校驗位初始為0
#endif

    AUXR = 0x40;                //定時器1為1T模式
    TMOD = 0x20;                //定時器1為模式2(8位自動重載)
    TL1 = (256 - (FOSC/32/BAUD));   //設置波特率重裝值
    TH1 = (256 - (FOSC/32/BAUD));
    TR1 = 1;                    //定時器1開始工作
    ES = 1;                     //使能串口中斷
    EA = 1;

   // SendString("  ");
}

/*----------------------------
UART 中斷服務程序
-----------------------------*/
    void Uart_Isr() interrupt 4 using 1
{
    if (RI)
    {
        RI = 0;                 //清除RI位
        P0 = SBUF;              //P0顯示串口數據
        P22 = RB8;              //P2.2顯示校驗位
    }
    if (TI)
    {
        TI = 0;                 //清除TI位
        busy = 0;               //清忙標志
    }
}

/*----------------------------
發送串口數據
----------------------------*/
void SendData(BYTE dat)
{
    while (busy);               //等待前面的數據發送完成
    ACC = dat;                  //獲取校驗位P (PSW.0)
    if (P)                      //根據P來設置校驗位
    {
#if (PARITYBIT == ODD_PARITY)
        TB8 = 0;                //設置校驗位為0
#elif (PARITYBIT == EVEN_PARITY)
        TB8 = 1;                //設置校驗位為1
#endif
    }
    else
    {
#if (PARITYBIT == ODD_PARITY)
        TB8 = 1;                //設置校驗位為1
#elif (PARITYBIT == EVEN_PARITY)
        TB8 = 0;                //設置校驗位為0
#endif
    }
    busy = 1;
    SBUF = ACC;                 //寫數據到UART數據寄存器
}

/*----------------------------
發送字符串
----------------------------*/
void SendString(char *s)
{
               
           while (*s)                  //檢測字符串結束標志
    {
        SendData(*s++);         //發送當前字符
   
   
    }
}




回復

使用道具 舉報

ID:687694 發表于 2020-3-26 21:03 | 顯示全部樓層
照搬的例程么?樓主還是好好學習一下吧。
回復

使用道具 舉報

ID:123289 發表于 2020-3-27 07:07 | 顯示全部樓層
你需再鞏固,按按鍵程序,不僅是如何防止彈動,還要會舉一反三,防止長按被多次確認(應當只認一次)。
回復

使用道具 舉報

ID:213173 發表于 2020-3-27 08:56 | 顯示全部樓層
                k1=k2=k3=k4=k5=k6=k7=k8=k9=k10=k11=b1=0;
                if(k1==1)            //第1個按鍵,按下為1
                {                  
                        delay(10);
                        if(k1==1)
                        {  
                                SendString("qq123");
                                //while(!k1);等待k1為1跳出
                                while(k1);//;等待k1為0跳出
                        }
                }
回復

使用道具 舉報

ID:343797 發表于 2020-3-27 23:14 來自手機 | 顯示全部樓層
wulin 發表于 2020-3-27 08:56
k1=k2=k3=k4=k5=k6=k7=k8=k9=k10=k11=b1=0;
                if(k1==1)            //第1個按鍵,按下為1
                {        ...

一語中的謝謝大佬
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产人成精品一区二区三 | 中文在线www | 欧美一区免费 | 亚洲欧美日韩在线 | 欧美成人自拍视频 | 日韩中文在线观看 | 高清免费av| 91av视频 | 福利视频一区二区三区 | 激情久久av一区av二区av三区 | 超碰97干 | 亚洲精品视频免费 | 北条麻妃国产九九九精品小说 | 久久久www成人免费精品张筱雨 | 国产一区二区三区在线观看免费 | 玖玖综合网 | 久久精品小视频 | 天天干夜夜操 | 亚洲一区国产精品 | 国产精品久久久久婷婷二区次 | 欧美国产中文字幕 | 亚洲国产精品一区在线观看 | 中文字幕一区二区三区在线乱码 | 成人av看片 | 成人av电影天堂 | 国产欧美日韩在线一区 | 久久久这里都是精品 | 亚洲精品一二三区 | 91大片| 日本韩国电影免费观看 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 日本一区二区三区视频在线 | 国产午夜精品一区二区三区嫩草 | 免费av在线| 亚洲一区成人 | 五月天综合影院 | 欧美日韩国产三级 | 精精国产xxxx视频在线播放 | 亚洲欧美日韩精品久久亚洲区 | 伊人狼人影院 | 国产精品日韩欧美 |