找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1315|回复: 1
打印 上一主题 下一主题
收起左侧

单片机电梯keil文件

[复制链接]
跳转到指定楼层
楼主
ID:454045 发表于 2018-12-25 08:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*******************************************************************************
* 文件名:    MAX7219_Drive_Matrix.c
* 作  者:    Robbie
* 日  期:    13-September-2017
* 摘  要:    本程序实现MAX7219点亮点阵二极管功能      
********************************************************************************/
#include <REG51.H>
#include <intrins.h>
//宏定义
#define uchar unsigned char
#define uint unsigned int
//位变量定义
sbit DIN = P2^0;
sbit LOAD = P2^1;
sbit CLK = P2^2;
/*********************全局变量定义************************/
//定义位码数组,扫描位码寄存器:数字0~数字7
uint code DIG_Array[]=      
{0x0100,0x0200,0x0300,0x0400,0x0500,0x0600,0x0700,0x0800};
//定义显示数字‘1’段码数组
uchar code Seg1_Array[]=
{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08};
//定义显示数字‘2’段码数组
uchar idata Seg2_Array[]=          //片内256字节区域存储数据,code区域只能存放常量,data区域存储空间太小
{0x00,0x3C,0x42,0x04,0x08,0x10,0x20,0x7E};
/********************函数声明********************/
void Send_LED(uint);      //向MAX7219发送数据
void MAX7219_Init(void);  //MAX7219初始化
void Clr(void);           //MAX7219清空
void Matrix_Scroll(uint*,uchar*); //向右显示滚动字符
void DelayMS(uint);        //延时以毫秒计
/********************函数定义********************/
void main()
{
MAX7219_Init(); //初始化
Clr(); //清空数字寄存器
//显示滚动文字
while(1)
{
  Matrix_Scroll(DIG_Array,Seg2_Array);
}
}
/***************************************************************************
**函 数 名:MAX7219发送函数
**函数功能:向MAX7219串行发送命令或数据,先发送高位,再发送低位
**输    入:待发送16位数据
**输    出: 无
**硬件连接:P2.0->DIN,P2.1->LOAD,P2.2->CLK
****************************************************************************/
void Send_LED(uint n)
{
   uint i;
   LOAD = 0;   //载入数据引脚复位
   //向DIN引脚传送16位数据,传送数据先送高位
   for(i=0x8000; i>=0x0001; i>>=1)
   {
     CLK = 0;
  if((n&i)==0){DIN = 0;}
  else{DIN = 1;}
  CLK = 1;
   }
   
   LOAD = 1;   //载入数据引脚上升沿,将16位数据锁存
}
/***************************************************************************
**函 数 名:MAX7219初始化函数
**函数功能:MAX7219进行初始化配置
**输    入:无
**输    出: 无
**硬件连接:P2.0->DIN,P2.1->LOAD,P2.2->CLK
****************************************************************************/
void MAX7219_Init()
{
Send_LED(0x0c01);  //停机寄存器正常
Send_LED(0x0A0f);  //设置亮度
Send_LED(0x0b07);  //设置LED扫描范围,DIG0~7
Send_LED(0x0900);  //设置为不译码方式
}
/***************************************************************************
**函 数 名:MAX7219清空函数
**函数功能:将MAX7219数字0~7寄存器的段码值清空
**输    入:无
**输    出: 无
**硬件连接:P2.0->DIN,P2.1->LOAD,P2.2->CLK
****************************************************************************/
void Clr()
{
uint i;
for(i=0x0800; i>=0x0100; i-=0x0100)
{
  Send_LED(i);
}
}
/***************************************************************************
**函 数 名:点阵滚动函数
**函数功能:在点阵屏上向右滚动显示指定段码
**输    入:段码数组
**输    出: 无
**硬件连接:P2.0->DIN,P2.1->LOAD,P2.2->CLK
****************************************************************************/
void Matrix_Scroll(uint* dig_array,uchar* seg_array)
{
uchar i,j;
for(j=0; j<8; j++)
{
  for(i=0; i<8; i++)
  {
   Send_LED(dig_array|seg_array);
   seg_array=_cror_(seg_array,1);  //段码数组循环右移1位
  }
  DelayMS(150);  //延时200ms  
}
}         
/***************************************************************************
**函 数 名:延时函数
**函数功能:延时指定毫秒数
**输    入:待延时毫秒数
**输    出: 无
**硬件连接:无
****************************************************************************/
void DelayMS(uint ms)  [url=]//@11.0592MHz[/url]
{
uint i=0,j=0;

for(i=0; i<ms; i++)
  for(j=0;j<123;j++);
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-12-25 12:47 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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