?? max7219級連.txt
字號:
#include <at89x51.h>
#include <stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit din=P2^0;
sbit load=P2^1;
sbit clk=P2^2;
//uchar codeseg[10]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};
void delay(uint i)
{
uchar j;
while(i--)
for(j=0;j<120;j++);
}
void send(uchar outdata) //寫串行數據子程序
{
uchar i,temp;
for(i=0;i<8;i++)
{
temp=outdata&0x80;
outdata=outdata<<1;
if(temp==0x80)
{
clk=0;
din=1;
_nop_();
clk=1; //提供上升沿
}
else
{
clk=0;
din=0;
_nop_();
clk=1; //提供上升沿
}
}
}
void write(uchar addr1,uchar num1,uchar addr2,uchar num2)
{
load=0; //當LOAD為低電平時,芯片接收來自DIN的數據,接收完畢,
_nop_();
send(addr1);
_nop_();
send(num1);
_nop_();
clk=0;
_nop_();
clk=1; //從DIN輸入的數據經過16.5個CLK脈沖后移到DOUT引腳上。
//所以發完16個數據后必須加一個脈沖,否則數據傳不到第二片
send(addr2);
_nop_();
send(num2);
load=1; //LOAD回到高電平時,接收的數據將被鎖定
}
void init()
{
write(0x09,0xff,0x09,0xff); //設置譯碼方式,使用bcd譯碼
write(0x0a,0x0a,0x0a,0x0a); //設置亮度
write(0x0b,0x07,0x0b,0x07); //設置掃描的位數
write(0x0c,0x01,0x0c,0x01); //設置待機方式
} //先設置后面一片的工作方式,在設置前面一片的工作方式
void main()
{
write(0x0f,0x01,0x0f,0x01);
_nop_();
_nop_();
_nop_();
_nop_();
write(0x0f,0x00,0x0f,0x00); //測試顯示
init(); //max7219初始化
while(1)
{
write(0x01,1,0x01,9);//先送位,再送段/先發送給第一片
write(0x02,2,0x02,2);
write(0x03,3,0x03,3);
write(0x04,4,0x04,4);
write(0x05,5,0x05,5);
write(0x06,6,0x06,6);
write(0x07,7,0x07,7);
write(0x08,8,0x08,8);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -