謝謝分享 程序簡潔 明了 學習的好模板
20191129.jpg (213.26 KB, 下載次數: 118)
下載附件
2019-11-29 23:03 上傳
main.c
- #include <reg52.h>
- #include "intrins.h"
- #include "Max7219.h"
- uchar code laji[][8]={
- {0x18,0x24,0x42,0x42,0x7E,0x42,0x42,0x42},//A
- {0x7C,0x42,0x42,0x7C,0x42,0x42,0x42,0x7C},//B
- {0x3C,0x42,0x40,0x40,0x40,0x40,0x42,0x7C},//C
- {0x7C,0x42,0x42,0x42,0x42,0x42,0x42,0x7C},//D
- };
- /*n毫秒的延時程序*/
- /*void Delay_xms(uint x)
- {
- uint i,j;
- for(i=0;i<x;i++)
- for(j=0;j<112;j++);
- }*/
- void main()
- {
- uchar i,j;
- //Delay_xms(50);
- MAX7219Init();
- while(1)
- {
- for(j=0;j<8;j++)
- {
- for(i=0;i<number;i++)
- {
- Max7219WR(j+1,laji[i][j]);
- }
- CS=1; _nop_(); CS=0;
- //Delay_xms(100);
- }
- }
- }
- Max7219.h
- #ifndef _Max7219_H_
- #define _Max7219_H_
- #define uchar unsigned char
- #define uint unsigned int
- #define number 4 //點陣級聯個數
- #define lum 5 //亮度級別,0-F,共16級
- //定義Max7219端口
- sbit CLK = P2^2; //時鐘 Max7219_pin
- sbit CS = P2^1; //鎖存
- sbit DIN = P2^0; //數據
- //向MAX7219 寫入地址和數據
- void Max7219WR(uchar addr,uchar dat)
- {
- uchar n=8;
- CLK=0;
- CS=0; //CS=0有效,CS=1鎖存
- /*發送數據 高位先發*/
- while(n--)
- {
- DIN = addr & 0x80;
- CLK=1;
- addr <<= 1;
- CLK=0;
- }
- n=8;
- /*發送數據 高位先發*/
- while(n--)
- {
- DIN = dat & 0x80;
- CLK=1;
- dat <<= 1;
- CLK=0;
- }
- }
- void MAX7219Init()
- {
- uchar i,j;
- for(i=0;i<5;i++) //
- {
- for(j=number;j>0;j--)
- switch(i)
- {
- case 0:Max7219WR(0x09, 0x00); break; //譯碼方式:BCD碼 不譯碼
- case 1:Max7219WR(0x0A, lum); break; //亮度 0-15 共16級
- case 2:Max7219WR(0x0B, 0x07); break; //掃描界限;8位顯示
- case 3:Max7219WR(0x0C, 0x01); break; //掉電模式:0,普通模式:1
- case 4:Max7219WR(0x0F, 0x00); break; //顯示測試:1;測試結束,正常顯示:0
- }
- CS=1; _nop_(); CS=0; //每寫入四次給一個鎖存脈沖
- }
- }
- #endif
復制代碼
|