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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

單片機串中通訊問題

查看數: 2047 | 評論數: 5 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2019-2-18 08:52

正文摘要:

大神們真心請教,搞不明白,,按健按了,1或2或3,在把這數值發給電腦串口,,串口接收顯示的是01 00或  01 00,為什么呀,他發了幾次? #include <reg51.h> #define led P2 #define shumaguan P0 # ...

回復

ID:477863 發表于 2019-2-18 19:49
串口工具接收選ASCII
ID:338762 發表于 2019-2-18 18:15
這個程序不是你自己寫的吧?你定義的是什么
ID:213173 發表于 2019-2-18 13:55
改這樣試試

#include <reg51.h>
#define led P2
#define shumaguan P0
#define anjian P1
sbit ls138A= P3^2;
sbit ls138B= P3^3;
sbit ls138C= P3^4;
unsigned char code shuzu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 0--9數字
unsigned char key;//
bit biaozhi=0;

void chuankou()        //4800bps@12.000MHz
{
        PCON=0X80;//波特率加倍
        SCON=0X50;//設置為工作方式1
        TMOD=0X20;//設置計數器工作方式2
        TH1=0XF3; //計數器初始值設置,注意波特率是4800的
        TL1=0XF3;
//        ES=1;     //打開接收中斷
//        EA=1;     //打開總中斷
        TR1=1;
}

void ls138shuju()   //數碼管動態顯示函數   
{
        static unsigned char i=0;
        static unsigned int count=0;
        if(++count>=100)
        {
                count=0;
                shumaguan=0x00;//消隱
                switch(i)
                {
                        case 0: ls138A=0;ls138B=0;ls138C=0;shumaguan=shuzu[key/10];i++;break;
                        case 1: ls138A=1;ls138B=0;ls138C=0;shumaguan=shuzu[key%10];i=0;break;
        /*
                        case 2: ls138A=0;ls138B=1;ls138C=0;shumaguan=shuzu[];i++;break;
                        case 3: ls138A=1;ls138B=1;ls138C=0;shumaguan=shuzu[];i++;break;
                        case 4: ls138A=0;ls138B=0;ls138C=1;shumaguan=shuzu[];i++;break;
                        case 5: ls138A=1;ls138B=0;ls138C=1;shumaguan=shuzu[];i++;break;
                        case 6: ls138A=0;ls138B=1;ls138C=1;shumaguan=shuzu[];i++;break;
                        case 7: ls138A=1;ls138B=1;ls138C=1;shumaguan=shuzu[];i=0;break;
        */
                }
        }
}
/*
void yanshi (unsigned int u)
{
        while(u--);
}
*/
void keyscan()                                        //按鍵掃描程序
{
        static bit sign=0;                        //按鍵自鎖標志
        static unsigned int count=0;        //消抖計數變量                       
        unsigned char num=0;                                //臨時變量
        anjian=0xf0;                                        //賦值anjian 1111 0000
        if(anjian!=0xf0)                                //檢測有按鍵按下
        {
                count++;                                //消抖計數
                if((count>=500)&&(sign==0))//100~1000,根據主循環周期調整約10~20ms
                {                       
                        sign=1;                                //按鍵自鎖標志置1
                        num=anjian;                                //保存anjian值xxxx 0000,x為0或1
                        num|=0x0f;                        //保存num按位或0x0f值xxxx 1111
                        anjian=num;                                //賦值anjian xxxx 1111
                        num=anjian;                                //保存anjian值xxxx xxxx
                        switch(num)
                        {
                                case 0xee: key= 1; break;
                                case 0xde: key= 2; break;
                                case 0xbe: key= 3; break;
                                case 0x7e: key= 4; break;
                                case 0xed: key= 5; break;
                                case 0xdd: key= 6; break;
                                case 0xbd: key= 7; break;
                                case 0x7d: key= 8; break;
                                case 0xeb: key= 9; break;
                                case 0xdb: key=10; break;
                                case 0xbb: key=11; break;
                                case 0x7b: key=12; break;
                                case 0xe7: key=13; break;
                                case 0xd7: key=14; break;
                                case 0xb7: key=15; break;
                                case 0x77: key=16; break;
                        }
                        biaozhi=1;
                }
        }
        else                                                //鍵抬起
        {
                sign=0;                                //按鍵自鎖標志清0
                count=0;                                //消抖計數清0
        }
}
void main()
{
        chuankou();        //初始化串口
        while(1)
        {
                keyscan();//按鍵掃描
                ls138shuju();//2位數碼管顯示鍵值
                led=~key;                //8個LED顯示鍵值
                if(biaozhi==1)//鍵值通過串口發送給電腦
                {
                        biaozhi=0;
                        SBUF=key;  
                        while(!TI);
                        TI=0;
                }
        }
}
/*
void RX() interrupt 4
{
        RI=0;
        c=SBUF;  //單片機接收電腦發來的值,
        biaozhi=1;
}*/
ID:64817 發表于 2019-2-18 13:21
iofree 發表于 2019-2-18 11:33
圖片上12345,串口不是把鍵值都發出給PC了嗎?看起來工作挺正常

我是這里不明白,,按1 按健,把1發給電腦串口,電腦收到是01 00,,不知道 這個如何理解,,,再比如兩個單片機學習板直接通訊,一個板子發按鍵1值,那么另一個板子收01,,還是收01 00.,,,,謝
ID:474677 發表于 2019-2-18 11:33
圖片上12345,串口不是把鍵值都發出給PC了嗎?看起來工作挺正常

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99色在线| 精品国产免费人成在线观看 | 欧美v日韩v | 狠狠爱一区二区三区 | 视频在线观看亚洲 | 成人在线电影网站 | 亚洲人成在线观看 | 亚洲人成免费 | 亚洲成人三级 | 一区二区精品 | 欧美日韩国产三级 | 二区精品 | 国产在线第一页 | 国产成人精品久久二区二区91 | 性一交一乱一伦视频免费观看 | 国产日韩一区二区三免费 | www.成人久久 | 亚洲精品国产成人 | av网站免费 | 青青草av| jlzzjlzz欧美大全 | 在线一区二区国产 | 国产91精品网站 | 国产精品69av | 色婷婷综合久久久久中文一区二区 | 亚洲综合在线播放 | 久久亚| 99精品一区二区三区 | 1204国产成人精品视频 | 亚洲国产午夜 | 亚洲精品一区二区三区蜜桃久 | 97人人澡人人爽91综合色 | 亚洲女人的天堂 | 国产午夜精品视频 | 国产精品99久久久久久久vr | 亚洲国产一区在线 | 亚洲国产一区在线 | 日韩高清中文字幕 | 中文字幕 国产 | 欧美性久久 | 国精产品一品二品国精在线观看 |