सॉफ़्टवेयर दायरे के भीतर, यदि अलग-अलग चमक सेटिंग्स की संख्या एक की आवश्यकता बहुत बड़ी नहीं है, तो डेटा को "बिट-प्लानर" प्रारूप में संग्रहीत करने में मदद मिल सकती है (जैसा कि मेरे अन्य हार्डवेयर-आधारित उत्तर में वर्णित है) और फिर है आउटपुट रूटीन बूलियन ऑपरेटरों का उपयोग एक साथ 8 पिक्सल पर कार्य करने के लिए करते हैं। अधिकतम दक्षता के लिए, इसे कई अलग-अलग आउटपुट रूटीन की आवश्यकता होगी, जिसका उपयोग PWM चक्र के विभिन्न भागों के लिए किया जाएगा; उदाहरण के लिए, यदि कोई 4-बिट ब्राइटनेस मान का उपयोग करना चाहता है, तो कोई फॉर्म के आठ रूटीन का उपयोग करेगा:
movf bit0Comp, w; तुलना के बिट 0 (यदि स्पष्ट हो तो एफएफ) के आधार पर 00 या एफएफ होना चाहिए
iorwf POSTINCF, w; डेटा के बिट 0; हमेशा IORWF का उपयोग करें
andwf POSTINCF, w; डेटा का बिट 1; IORWF का उपयोग करें यदि तुलना का 1 बिट सेट है; ANDWF यदि स्पष्ट हो
andwf POSTINCF, w; डेटा के बिट 2; IORWF का उपयोग करें यदि तुलना का 1 बिट सेट है; ANDWF यदि स्पष्ट हो
andwf POSTINCF, w; डेटा के बिट 2; IORWF का उपयोग करें यदि तुलना का 1 बिट सेट है; ANDWF यदि स्पष्ट हो
Movwf SPIREG; बाइट के परिणामस्वरूप स्टोर (बिट्स सेट अगर = = तुलना)
तुलना के मूल्य के आधार पर, IORWF और ANDWF के विभिन्न संयोजनों का उपयोग किया जाएगा। ध्यान दें कि इस दृष्टिकोण को सचित्र रूप में प्रयोग करते हुए, कोई व्यक्ति बिना किसी झिलमिलाहट के PWM चक्र में किसी भी बिंदु पर पिक्सेल चमक मूल्यों को अपडेट कर सकता है, बशर्ते कि सभी चार बिट्स डिस्प्ले-शिफ्ट रूटीन के लिए कॉल के बीच लिखे गए हों, या पिक्सेल-अपडेट रूटीन निर्धारित करके निर्धारित करें कि क्या अगली पारी पिक्सेल के लिए "1" या "0" आउटपुट करेगी, और पिक्सेल के सभी बिट्स को स्थापित करना या साफ़ करना होगा (जो भी ऑपरेशन इसे वैसे भी करेगा जो कुछ भी करने जा रहा है) और फिर किसी भी बिट को लिखना चाहिए जिसका मूल्य होना चाहिए विपरीत होना। यह भी ध्यान दें कि प्रदर्शन अपडेट के समय को अलग-अलग करके या PWM चक्र में एक से अधिक बार कुछ तुलनात्मक मानों का उपयोग करके मनमाने ढंग से गैर-रेखीय चमक तराजू प्राप्त कर सकते हैं।