找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3506|回复: 5
收起左侧

单片机矩阵键盘与串口通信冲突

[复制链接]
ID:307391 发表于 2018-5-5 13:38 | 显示全部楼层 |阅读模式
电子秤使用矩阵键盘没加串口通信是一切正常,在加入串口通信后,键盘在输入25.5前都正常,但到25.6时LCD显示就为00.0,25.7为0
0.1,25.8为0.02,这是咋回事呢??
回复

使用道具 举报

ID:303383 发表于 2018-5-5 15:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:307391 发表于 2018-5-5 16:36 | 显示全部楼层
小猫猫爱吃鱼 发表于 2018-5-5 15:46
char 定义改成 int ,问题并不是你说的加了串口后出现的

是改键盘程序里的char吗,还是串口里的?
#include "keyboard.h"
extern bit bdata flag_key;
//按键扫描函数 :   
//功能;只扫描一个按键,按键为号小优先  
//返回键值:
//         1    2    3    10           //10:清零重量,兼去皮功能       
//         4    5    6    11           //11:清除单价
//         7    8    9    12           //12:显示数值偏大调节按键  
//         14   0    15   13           //14:无功能(用于扩展)15:小数点   13:显示数值偏小调节按键

unsigned char Getkeyboard(void)
{
    unsigned char number = 0;
    unsigned char i;
        //行输入低电平
    ROW1=ROW2=ROW3=ROW4=0;
        //如果列输出不全为高,则说明有键按下
        if (((COL1!=1)||(COL2!=1)||(COL3!=1)||(COL4!=1))&&flag_key==1)
        {
           //输入0111
           flag_key=0;
           ROW1=0;
           ROW2=ROW3=ROW4=1;
           for (i=0;i<20;i++);
           if (COL1==0) return 1;           // 7
           else if (COL2==0) return 2;        //         8
           else if (COL3==0) return 3;         //        9
           else if (COL4==0) return 10;         //         10
           //输入1011
           ROW2=0;
           ROW1=ROW3=ROW4=1;
           for (i=0;i<20;i++);
           if (COL1==0) return 4;          //4
           else if (COL2==0) return 5; //  5
           else if (COL3==0) return 6;        // 6
           else if (COL4==0) return 11;         //        11
           //输入1101
           ROW3=0;
           ROW1=ROW2=ROW4=1;
           for (i=0;i<20;i++);
           if (COL1==0) return 7;  //1
           else if (COL2==0) return 8;          // 2
           else if (COL3==0) return 9;          //   3
           else if (COL4==0) return 12;          //   12
           //输入0111
           ROW4=0;
           ROW1=ROW2=ROW3=1;
           for (i=0;i<20;i++);
           if (COL1==0) return 14;
           else if (COL2==0) return 0;
           else if (COL3==0) return 15;
           else if (COL4==0) return 13;
           //没有检测到列低电平
           return 99;
        }
        else if(COL1==1&&COL2==1&&COL3==1&&COL4==1)
        flag_key=1;
        return 99;
}
串口
#include <reg52.h>
#include "intrins.h"
#include "sci.h"

void InitSci(void)                 //设置串口
{
        EA = 1;                //开总中断。
        ES = 1;                //串行口允许中断
        SM0 = 0;                //设置串行口工作方式为方式1。SM0=0,SM1=0为工作方式0.依次类推
        SM1 = 1;
        REN = 1;                //串行口接收允许。REN=0时,禁止接收。
        TMOD |= 0x20;        //定时器1工作方式2.
        TH1 = 0xfd;        //相应波特率设初值计算方法。 初值X=(256-11059200/(12*32*9600))
        TL1 = 0xfd;        //9600为你要设置的波特率。11059200为晶振频率。X的值最后要换算成16进制
        TR1 = 1;                //定时器T1开始工作,TR1=0,T1停止工作       
}

void SendSci(unsigned char SciData)                 //发送串口数据
{
        SBUF = SciData;
        while(!TI)
        {
                ;
        }
        TI = 0;
回复

使用道具 举报

ID:307391 发表于 2018-5-5 16:46 | 显示全部楼层
小猫猫爱吃鱼 发表于 2018-5-5 15:46
char 定义改成 int ,问题并不是你说的加了串口后出现的

大神,是改哪里的char
回复

使用道具 举报

ID:307391 发表于 2018-5-5 17:32 | 显示全部楼层
小猫猫爱吃鱼 发表于 2018-5-5 15:46
char 定义改成 int ,问题并不是你说的加了串口后出现的

谢谢大神,原来是price定义成字符串了,已经改好。再次感谢!!!!!
回复

使用道具 举报

ID:291065 发表于 2018-6-12 19:02 | 显示全部楼层
luxuan 发表于 2018-5-5 17:32
谢谢大神,原来是price定义成字符串了,已经改好。再次感谢!!!!!

说的是什么意思啊

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表