max7219c语言,51单片机+MAX7219数码管显示C程序 - max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)...

2、51单片机+MAX7219数码管显示C程序

/**************************************************

*程序名称: MAX7219 C语言控制程序

*程序功能: 3线串行控制8位共阴数码管

*3线定义:DIN 串行数据输入

* LOAD 数据锁存

* CLK 时钟输入

***************************************************/

#include 《reg52.h》

#include 《intrins.h》

sbit pinDIN=P0^0; //串行数据输入端

sbit pinLOAD=P0^1; //数据锁存端

sbit pinCLK=P0^2; //时钟输入端

#define uchar unsigned char

uchar code LEDcode[]=

{0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00 /*0,1,2,3,4,5,6,7,8,9,全灭*/

/* 0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x67,0x3e,0xff, */ }; /*A,B,C,D,E&#

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是51单片机+DS1302+MAX7219驱动8位共阳数码管显示时间的代码: ```c #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit DSPORT=P2^0; sbit DSIO=P2^1; sbit RCLK=P2^2; sbit SRCLK=P2^3; uchar code table[17]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; uchar second,minute,hour,week,day,month,year; uchar time[8]; uchar disp_buf[8]; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void ds1302_writebyte(uchar dat) { uchar i; for(i=0;i<8;i++) { DSIO=dat&0x01; dat>>=1; _nop_(); SRCLK=0; _nop_(); SRCLK=1; } } uchar ds1302_readbyte(void) { uchar i,dat; for(i=0;i<8;i++) { dat>>=1; if(DSIO) dat|=0x80; SRCLK=0; _nop_(); SRCLK=1; } return dat; } void ds1302_write(uchar address,uchar dat) { DSPORT=0; _nop_(); DS1302_writebyte(address); DS1302_writebyte(dat); DSPORT=1; } uchar ds1302_read(uchar address) { uchar dat; DSPORT=0; _nop_(); DS1302_writebyte(address); dat=DS1302_readbyte(); DSPORT=1; return dat; } void read_time(void) { uchar i; second=ds1302_read(0x81); minute=ds1302_read(0x83); hour=ds1302_read(0x85); day=ds1302_read(0x87); month=ds1302_read(0x89); week=ds1302_read(0x8B); year=ds1302_read(0x8D); time[0]=year; time[1]=month; time[2]=day; time[3]=week; time[4]=hour; time[5]=minute; time[6]=second; for(i=0;i<7;i++) disp_buf[i+1]=table[time[i]&0x0F]; } void init_ds1302(void) { ds1302_write(0x8e,0x00); ds1302_write(0x80,0x00); } void init_max7219(void) { ds1302_write(0x0C,0x01); ds1302_write(0x0B,0x07); ds1302_write(0x09,0xFF); ds1302_write(0x0F,0x00); } void write_max7219(uchar address,uchar dat) { uchar i; DSPORT=0; _nop_(); for(i=1;i<=8;i++) { if(i==address) { DS1302_writebyte(dat); } else { DS1302_writebyte(0x00); } } DSPORT=1; } void main() { init_ds1302(); init_max7219(); while(1) { read_time(); write_max7219(1,disp_buf[1]); write_max7219(2,disp_buf[2]); write_max7219(3,disp_buf[3]); write_max7219(4,disp_buf[4]); write_max7219(5,disp_buf[5]); write_max7219(6,disp_buf[6]); write_max7219(7,disp_buf[7]); delay(500); } } ``` 该代码主要分为以下几个部分: 1. 定义了一些常量和变量,包括DS1302、MAX7219的IO口,数码管显示所需的表格等; 2. 定义了延时函数delay(); 3. 定义了DS1302操作函数ds1302_writebyte()、ds1302_readbyte()、ds1302_write()、ds1302_read(),用于读取和设置DS1302的时间; 4. 定义了读取时间的函数read_time(),将DS1302中读取到的时间存储到数组time中,并将时间转换为数码管显示所需的格式存储到数组disp_buf中; 5. 定义了初始化DS1302和MAX7219的函数init_ds1302()和init_max7219(); 6. 定义了向MAX7219写数据的函数write_max7219(); 7. 在主函数中循环读取时间并显示到数码管上。 需要注意的是,该代码中使用了51单片机的IO口操作,因此需要根据具体硬件连接情况对代码进行修改。另外,需要将该代码烧录到51单片机中才能够正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值