搜索
bottom↓
回复: 7

奉献我的MAX7219驱动,作为回报此论坛

[复制链接]

出0入0汤圆

发表于 2006-7-15 20:04:55 | 显示全部楼层 |阅读模式
/*------------------------------------------------------

用ATMAGE16L驱动MAX7219

2006年2月18日,原创

2006年6月10日小作修改

2006年7月11日,重新整理



从左至右分别为1到8位,分为左右各4位分别使用

没有小数点功能,如果要使用小数点可将操作数和0X80求或,可另外写函数封装

译码方式初始化为"使用BCD译码方式"

特殊字符    -:0A; E:0B; H:0C; L:0D; P:0E; 黑屏:0F

--------------------------------------------------------*/



/*----------MAX7219操作指令--------------

----------功能--------|---指令---|--------操作数--------|

1、BCD译码方式选择     |   0x09   |0x00:不使用,0xff:使用|

2、亮度调节           |   0x0a   |0x00------0x0f,16级  |

3、扫描位数设定        |   0x0b   |0x00------0x07,1--8位 |

4、待机开关           |   0x0c   |0x00:灭,0x01:开      |

5、显示器检测         |   0x0f   |0x01:检测,0x00:不检测|

6、位操作指令         |0x01--0x08|要显示的数字          |

-----------------------------------------*/





#include <avr/io.h>  

//------max7219与M16的连接,可根据实际更改--------

#define MAX7219_OUT_DDR   DDRB

#define MAX7219_OUT_PORT  PORTB



#define MAX7219_LOAD_PORT PA2

#define MAX7219_DIN_PORT  PA3

#define MAX7219_CLK_PORT  PA4

//----------------------------------------------------------------



//------------------------------------------------------------

#define MAX7219_CLK_1   MAX7219_OUT_PORT|=1<<MAX7219_CLK_PORT

#define MAX7219_CLK_0   MAX7219_OUT_PORT&=~(1<<MAX7219_CLK_PORT)



#define MAX7219_DIN_1   MAX7219_OUT_PORT|=1<<MAX7219_DIN_PORT

#define MAX7219_DIN_0   MAX7219_OUT_PORT&=~(1<<MAX7219_DIN_PORT)



#define MAX7219_LOAD_1  MAX7219_OUT_PORT|=1<<MAX7219_LOAD_PORT

#define MAX7219_LOAD_0  MAX7219_OUT_PORT&=~(1<<MAX7219_LOAD_PORT)





//-----------------------------------------------------------------



//===================MAX7219的核心函数,接收单片机的数据=====================

void SEND(unsigned char add,unsigned char dat)//发送2个字节的子函数,第一个字节为地址,第二个字节为操作数

{

unsigned char ads,j,x;

unsigned int i;

i=0;

MAX7219_LOAD_0;//load=0

   while(i<16)

   {

   if (i<8){ads=add;}

   else {ads=dat;}

      for(j=8;j>=1;j--)

      {

      x=ads&0x80;

         if (x==0){MAX7219_DIN_0;}

         else {MAX7219_DIN_1;}

            ads=ads<<1;

      MAX7219_CLK_1;//clk=1

         MAX7219_CLK_0;//clk=0

      }

   i=i+8;

   }

MAX7219_LOAD_1;//load=1

}

//========================================================================



//==============LCD初始化=============

void LCD_INIT(void)

{

MAX7219_OUT_DDR|=(1<<MAX7219_CLK_PORT)|(1<<MAX7219_DIN_PORT)|(1<<MAX7219_LOAD_PORT);

MAX7219_OUT_PORT|=(1<<MAX7219_CLK_PORT)|(1<<MAX7219_DIN_PORT)|(1<<MAX7219_LOAD_PORT);

SEND(0x0c,0x01);

SEND(0x0b,0x07);

SEND(0x0a,0x05);

SEND(0x09,0xff);

//LCD_CLEAR(3);

}

//=====================================



//=============LCD左四显示数字==============

void LCD_L(int number)

{

int i=4;

SEND(0x01,0x0f); //先清除左四位,左四位黑屏

SEND(0x02,0x0f);

SEND(0x03,0x0f);

SEND(0x04,0x0f);



if(number>9999)//要显示的数值超过4位,则显示4个H

        {

        SEND(0x01,0x0c);

        SEND(0x02,0x0c);

        SEND(0x03,0x0c);

        SEND(0x04,0x0c);

        }

else//小于四位可以显示

        {

        do

                {

                SEND(i,number%10);

                number=(number-number%10)/10;

                i--;

                }while(number>=1);

        }

}

//=====================================



//=============LCD右四显示数字==============

void LCD_R(int number)

{

int i=8;



SEND(0x05,0x0f); //先清除右四位,右四位黑屏

SEND(0x06,0x0f);

SEND(0x07,0x0f);

SEND(0x08,0x0f);



if(number>9999)//要显示的数值超过4位,则显示4个H

        {

        SEND(0x05,0x0c);

        SEND(0x06,0x0c);

        SEND(0x07,0x0c);

        SEND(0x08,0x0c);

        }

else//小于四位可以显示

        {

        do

                {

                SEND(i,number%10);

                number=(number-number%10)/10;

                i--;

                }while(number>=1);

        }

}

//===================================



//==============LCD亮度================

void LCD_LIGHT(unsigned light)

{

SEND(0x0a,light&0x0f);

}

//===================================



//==============LCD开================

void LCD_OPEN(void)

{

SEND(0x0c,0x01);

}

//===================================



//==============LCD关================

void LCD_CLOSE(void)

{

SEND(0x0c,0x00);

}

//===================================



//==============LCD清屏================

void LCD_CLEAR(unsigned char part)

{

switch(part)

        {

        case 0://左

                {

                SEND(0x01,0x0f);

                SEND(0x02,0x0f);

                SEND(0x03,0x0f);

                SEND(0x04,0x0f);

                }break;

        case 1://右

                {

                SEND(0x05,0x0f);

                SEND(0x06,0x0f);

                SEND(0x07,0x0f);

                SEND(0x08,0x0f);

                }break;

        default://全部

                {

                SEND(0x01,0x0f);

                SEND(0x02,0x0f);

                SEND(0x03,0x0f);

                SEND(0x04,0x0f);

                SEND(0x05,0x0f);

                SEND(0x06,0x0f);

                SEND(0x07,0x0f);

                SEND(0x08,0x0f);

                }break;

        }

}

//=====================================





找到了我的热转印图后也发上来

出0入0汤圆

发表于 2006-7-15 20:35:40 | 显示全部楼层
good

出0入0汤圆

 楼主| 发表于 2006-7-15 21:08:00 | 显示全部楼层
热转印图丢在学校了,那就PCB吧



贻笑大方了   点击此处下载armok01123434.rar

出0入0汤圆

发表于 2009-11-13 14:43:18 | 显示全部楼层
老乡做的不错啊. 啥时候搞点米酒和麻糖我吃啊. 哈哈

出0入0汤圆

发表于 2011-8-28 00:44:41 | 显示全部楼层
下了!谢谢!

出0入0汤圆

发表于 2011-8-28 10:10:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-30 09:33:18 | 显示全部楼层
可以,我一直都在用这个

出0入0汤圆

发表于 2011-8-31 22:55:16 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 01:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表