السلام عليكم
كود:
sbit CS_Pin at RE0_bit;
sbit CS_Pin_direction at TRISE0_bit;
void Write7segDigits(unsigned char address, unsigned char data1);
void MAX7219_INIT();
void MAX7219_INIT() {
// Disable Shutdown mode
Write7segDigits(0x0C ,0x01); // 0xc0 : Select Shutdown register
// 0x01 :Set D0 bit to return to normal operation
// Set BCD decode mode for digits DIG0-DIG3
Write7segDigits(0x09 ,0x0F); // 0x09 :Select Decode Mode register
// 0x0F :Select BCD mode for digits DIG0-DIG3
// Set display brighness
Write7segDigits(0x0A , 0x0F); // 0x0A :Select Intensity register
// 0x0F :Set maximum brightness
// Set display refresh
Write7segDigits(0x0B,0x03); // 0x0B :Select Scan-Limit register
// 0x03 :Select digits DIG0-DIG3
// Enable Display-Test
Write7segDigits(0x0F , 0x01); // Select Display-Test register
Delay_ms(1000);
// Disable Display-Test
Write7segDigits(0x0F ,0x00); // 0x0F :Select Display-Test register
// 0x00 : Disable Display-Test
}
void Write7segDigits(unsigned char address, unsigned char data1){
CS_Pin=0;
SPI1_write(address);
SPI1_write(data1);
CS_Pin=1;
}
void main() {
unsigned unsigned int i = 0;
ANSELC = 0; // Set port C pis as digital
ANSELE = 0; // Set port E pis as digital
LATC = 0; // Reset portC LAT register
CS_Pin_direction = 0;
SPI1_Init(); // Initialize SPI
Delay_ms(300);
while(1)
{
MAX7219_INIT();
for(i=0;i<=9999;i++)
{
Write7segDigits(4, i/1000);// 1234/1000=1
Write7segDigits(3, (i/100)%10); // 1234/100=12/10=1 >> %10 =2
Write7segDigits(2, (i/10)%10); // 1234/10=123/10=12 >> %10 =3
Write7segDigits(1, i%10); // // 1234/10=123 >> %10 =4
Delay_ms(250);
}
}
}
اولا نشرح كود تعريف max7221
كود:
void MAX7219_INIT() {
// Disable Shutdown mode
Write7segDigits(0x0C ,0x01); // 0xc0 : Select Shutdown register
// 0x01 :Set D0 bit to return to normal operation
// Set BCD decode mode for digits DIG0-DIG3
Write7segDigits(0x09 ,0x0F); // 0x09 :Select Decode Mode register
// 0x0F :Select BCD mode for digits DIG0-DIG3
// Set display brighness
Write7segDigits(0x0A , 0x0F); // 0x0A :Select Intensity register
// 0x0F :Set maximum brightness
// Set display refresh
Write7segDigits(0x0B,0x03); // 0x0B :Select Scan-Limit register
// 0x03 :Select digits DIG0-DIG3
// Enable Display-Test
Write7segDigits(0x0F , 0x01); // Select Display-Test register
Delay_ms(1000);
// Disable Display-Test
Write7segDigits(0x0F ,0x00); // 0x0F :Select Display-Test register
// 0x00 : Disable Display-Test
}
لنراجع موقع التالي او منول للمتكامله
http://embedded-lab.com/blog/?p=4935
سنجد مايلي
1-address
2-data
اذن نحتاج ان نرسل العنوان ثم نرسل البيانات
content/uploads/2012/05/RegisterAddressMap.png
ريجيستر No-Op معناه لاتوجد اي عمليه يعني لايوجد شيئ يتنفذ
ريجستر Digit 0 الى Digit 7 فهذه تتحكم بأي سفن سكمنت سوف يتم تشغيلها
=============================================
The decode-mode register
http://img05.arabsh.com/uploads/imag...4c4e64fa0d.png
يحول الى BCD
ارجو اطلاع على منول صفحه 8
Table 5. Code B Font
=============================================
Intensity Register وهو يتحكم بكثافه الاضاءه لسفن سكمنت
اطلع على Table 7. موجود في منول صفحه 9
=======================================
Scan-Limit Register
وهو يتحكم بعدد تشغيل سفن قطع سفن سكمنت
فاذا كتبنا data في هذا سجل بــ 0 معناه تشتغل سفن سكمنت الاولى فقط تعمل واذا كتبنا بــ 1 معناه تشتغل سفن سكمنت الاولى وثانيه واذا كتبنا 3 معناها تشتغل سفن سكمنت الاولى وثانيه وثالثه وهكذا
بأختصار هو يحدد عدد سفن سكمنت الي تريد تشغلها
================================================
ريجيستر Shutdown
ومن أسمه يقوم بأطفاء سفن سكمنت بشكل كامل وذلك عندما يكون داتا=0
اما اذا كتبنا داتا=1
http://img05.arabsh.com/uploads/imag...4c4e66fb03.png
فيعود الى normal operation