求助求助-51单片机编程问题

[复制链接]
1163|9
手机看帖
扫描二维码
随时随地手机跟帖
菜鸟小袁|  楼主 | 2018-9-16 11:20 | 显示全部楼层 |阅读模式
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit H=P2^2;
sbit M=P2^3;
sbit L=P2^4;
sbit EN=P1^0;
uint receiver,store,s,g;
void init()
{
        SCON=0x50;
        PCON=0x80;
        TMOD=0x20;
        TH1=0xf3;
        TL1=0xf3;
        TR1=1;
        EA=1;
        ES=1;
}
void display()
{
        uint y;
        if(store>9)
        {
                H=0;
                M=1;
                L=1;                       
                P0=table[store/100];
                EN=1;
                for(y=800;y>0;y--);
                EN=0;
                for(y=100;y>0;y--);
                H=1;
                M=0;
                L=1;                       
                P0=table[(store%100)/10];
                EN=1;
                for(y=800;y>0;y--);
                EN=0;
                for(y=100;y>0;y--);
                H=0;
                M=0;
                L=1;       
                P0=table[(store%100)%10];
                EN=1;       
                for(y=800;y>0;y--);
                EN=0;
                for(y=100;y>0;y--);
        }
        else
        {
                H=0;
                M=0;
                L=1;
                P0=table[store];
                EN=1;
        }
}
void main()
{
        init();
        while(1)
        {
                display();
        }
}

void user() interrupt 4
{
        uint x=1;
        receiver=SBUF;
        while(!RI);
        store=receiver;
        RI=0;
        SBUF=receiver;
        while(!TI);
        TI=0;
}

H,M,L这三位是发送到138译码器,选择数码管位号,EN是控制段位。
通过上位机传送0~9之间的数值,数码管显示正确,但是发送10以上的数值时,显示就出现问题。现象为:发送10时,显示16,依次递增。
求大神给解读一下。

相关帖子

tyw| | 2018-9-16 12:49 | 显示全部楼层
H,M,L是定义高,中,低位权重吗?你开始赋值时好象倒过来了.

使用特权

评论回复
菜鸟小袁|  楼主 | 2018-9-16 13:00 | 显示全部楼层
tyw 发表于 2018-9-16 12:49
H,M,L是定义高,中,低位权重吗?你开始赋值时好象倒过来了.

H,M,L是定义位号,比如H=0;M=0;L=1,表示点亮第一位数码管

使用特权

评论回复
tyw| | 2018-9-16 13:12 | 显示全部楼层
菜鸟小袁 发表于 2018-9-16 13:00
H,M,L是定义位号,比如H=0;M=0;L=1,表示点亮第一位数码管

解释一下这个:
sbit H=P2^2;
sbit M=P2^3;
sbit L=P2^4;


使用特权

评论回复
菜鸟小袁|  楼主 | 2018-9-16 13:15 | 显示全部楼层

发送数值3

发送数值3

发送数值0

发送数值0

发送数值0和3,显示正确。

发送数值10

发送数值10

发送数值15

发送数值15

发送数值为10和15,显示不正确。

使用特权

评论回复
菜鸟小袁|  楼主 | 2018-9-16 13:17 | 显示全部楼层
tyw 发表于 2018-9-16 13:12
解释一下这个:
sbit H=P2^2;
sbit M=P2^3;

位定义,对H赋值就相当于对P2^2赋值。

使用特权

评论回复
tyw| | 2018-9-16 14:48 | 显示全部楼层
本帖最后由 tyw 于 2018-9-16 15:24 编辑
菜鸟小袁 发表于 2018-9-16 13:17
位定义,对H赋值就相当于对P2^2赋值。

51单片机开发板HC6800说明书.pdf (3.4 MB)

使用特权

评论回复
tianxj01| | 2018-9-16 15:50 | 显示全部楼层
tyw 发表于 2018-9-16 14:48
http://pan.baidu.com/s/1eQgPuL0
普中科技HC6800V3.0(学习版)单片机开发仪器的光盘资料(近3G)
...

算法没有问题,怀疑发送数据是不是有古怪,因为10H=16D,而15H=21D。恰恰都是你显示的那样。
顺便说一下:P0=table[(store%100)%10];其实可以这样:P0=table[(store)%10];

使用特权

评论回复
菜鸟小袁|  楼主 | 2018-9-16 18:11 | 显示全部楼层
tianxj01 发表于 2018-9-16 15:50
算法没有问题,怀疑发送数据是不是有古怪,因为10H=16D,而15H=21D。恰恰都是你显示的那样。
顺便说一下 ...

感谢!那个找到原因了,用串口软件发送的16进制数值,正如你所说!基本快忘了。

使用特权

评论回复
菜鸟小袁|  楼主 | 2018-9-16 19:49 | 显示全部楼层
tyw 发表于 2018-9-16 14:48
http://pan.baidu.com/s/1eQgPuL0
普中科技HC6800V3.0(学习版)单片机开发仪器的光盘资料(近3G)
...


感谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝