मुझे अपने कार्यक्रम को बदलने की आवश्यकता है, मैं ASCII के लिए कुछ फ़ंक्शन को एक चार्ट में कैसे बदलूं? मेरा मोबाइल 8051 से डेटा प्राप्त करता है, हमेशा '0' दिखाता है, यह सच नहीं है।

ASCII कोड के लिए चार।

void Data_TX(unsigned char Y)
{
    unsigned char Buff_Y[3];

    Buff_Y[2] = (Y / 100) + 0x30;
    Buff_Y[1] = (Y / 10) % 10+0x30;
    Buff_Y[0] = (Y % 10) + 0x30;

    SBUF = *Buff_Y;
    while (TI == 0);
    TI = 0;
} 

यह मेरा सर्किट मूल कोड, एलसीडी 8051 के साथ इंटरफेस है।

bit Sensor_read(unsigned char read[5]);

मेरे कार्य का उपयोग करें।

Data_TX(read[2]); //read data.
Data_TX((int)read[2]); //read data, this program can't to run. 
-7
JDQQ8051 24 नवम्बर 2015, 05:29

2 जवाब

सबसे बढ़िया उत्तर
Buff_Y[2] = (Y / 100) + 0x30;
Buff_Y[1] = (Y / 10) % 10+0x30;
Buff_Y[0] = (Y % 10) + 0x30;

यह सब अच्छा है। यदि आप उन तीन बाइट्स को प्रिंट करते हैं, तो आप देखेंगे कि उनमें सही मान हैं।


SBUF = *Buff_Y;

यह, हालांकि, भ्रम को इंगित करता है। *Buff_Y Buff_Y[0] के बराबर है। यह एक एकल char मान है ... यदि आप केवल SBUF में एक एकल char मान स्टोर कर सकते हैं, तो आप तीन char मानों को संग्रहीत नहीं कर सकते। इसमें स्टोर करें।

यदि हम तर्क का उपयोग करते हैं, तो हम यह निष्कर्ष निकाल सकते हैं: कि char मान '0' होगा यदि आपके द्वारा प्रदान किया गया इनपुट 10 से समान रूप से विभाज्य है (अर्थात, जब Y % 10 {{X3} है }) ...

जब आप कोड की इस पंक्ति को बदलने के बारे में सोच रहे हैं (और आपके कोड के भाग जो हम नहीं देख सकते हैं), तो आप while (TI == 0); के बारे में भी ध्यान से सोचना चाह सकते हैं। जो भी समस्या हल करने का प्रयास कर रहा है उसका बेहतर समाधान होना चाहिए।

1
autistic 24 नवम्बर 2015, 03:28

मैं इस कोड को बदल रहा हूं, चलाया जा सकता है, लेकिन इसमें केवल प्राप्त अंक हैं।

void Data_TX(unsigned char Y)

{अहस्ताक्षरित चार Buff_Y [3];

Buff_Y[3] = (Y / 100) + 0x30;
Buff_Y[2] = (Y%100)/10+0x30;
Buff_Y[1] = (Y / 10) % 10+0x30;
Buff_Y[0] = (Y % 10) + 0x30;

SBUF = *Buff_Y;
while (TI == 0);
TI = 0;

}

Data_TX((int)read[2]);
-1
JDQQ8051 24 नवम्बर 2015, 03:43