历史上的今天
返回首页

历史上的今天

今天是:2024年09月16日(星期一)

2020年09月16日 | 51单片机控制+MAX7219+DS1302 电子钟

2020-09-16 来源:51hei

/**************************************************
*程序名称:  MAX7219 C语言控制程序                          
*程序功能: 3线串行控制8位共阴数码管                                 
*3线定义:DIN 串行数据输入                                                  
*                 LOAD  数据锁存                                                         
*                 CLK   时钟输入                                                         
***************************************************/
#include
#include    
#define uchar unsigned char
#define uint unsigned int

sbit sclk=P1^0;
sbit io=P1^1;
sbit ce=P1^2;
uchar time_data[]={13,6,4,17,21,51,30};//? ? ? ? ? ? ?
uchar write_add[]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};
uchar read_add[]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
sbit pinDIN=P1^3;                        //串行数据输入端
sbit pinLOAD=P1^4;                        //数据锁存端
sbit pinCLK=P1^5;                        //时钟输入端
#define uchar unsigned char
uchar p=0,num;
uchar disp[6];
uchar code LEDcode[]=
{0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00,0x01     /*0,1,2,3,4,5,6,7,8,9,全灭*/
/* 0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x67,0x3e,0xff, */  };    /*A,B,C,D,E,F,P,U,全亮*/

delay(uchar x)
{
        uchar a,b;
        for(a=x;a>0;a--)
                for(b=200;b>0;b--);
}

/**************************************************
*         向MAX7219写入字节(8位)函数                      *
***************************************************/

void sendbyte (uchar dat)
{
         uchar i,temp;
         _nop_();
         for (i=0;i<8;i++)
    {
        temp=dat&0x80;
        dat=dat<<1;
        if(temp)
            pinDIN=1;
        else
            pinDIN=0;
        pinCLK=0;
        _nop_();
        pinCLK=1;         
    }
}
/**************************************************
*        向MAX7219写入地址和控制字(16位)                  *
***************************************************/
void sendword (uchar addr,uchar dat)
{
         pinLOAD=0;
         _nop_();
         sendbyte (addr);
         _nop_();
         sendbyte (dat);
         _nop_();
         pinLOAD=1; //第16个上升沿之后,第17个上升沿之前必须把pinCLK置高,否则数据丢失
}
/**************************************************
*                MAX7219初始化                                          *
***************************************************/
void init7219 (void)
    {
             sendword (0x0c,0x01);     /*  设置电源工作模式      */   
             sendword (0x0a,0x03);     /*   设置亮度  19/32      */  
             sendword (0x0b,0x07);     /*  设置扫描界限          */
             sendword (0x09,0x00);     /*   设置译码模式         */
                 sendword (0x0f,0x00);     /*显示测试 00为正常工作状态*/
    }
/**************************************************
*                MAX7219清除显示                                  *
***************************************************/
void clear7219(void)
{
         uchar i;
         for(i=8;i>0;i--)
         {
                 sendword(i,0x00);
         }
}



void write_ds1302_byte(uchar add)
{
        uchar i;
        for(i=0;i<8;i++)
        {
                sclk=0;
                io=add&0x01;
                add=add>>1;
                sclk=1;       
        }
}

void write_ds1302(uchar add,uchar dat)
{
        ce=0;
        sclk=0;
        ce=1;
        _nop_();
        write_ds1302_byte(add);
        write_ds1302_byte(dat);
        ce=0;
        _nop_();
        io=1;
        sclk=1;
}

uchar read_ds1302(uchar add)
{
        uchar i,value;
        ce=0;
        sclk=0;
        ce=1;
        _nop_();
        write_ds1302_byte(add);
        for(i=0;i<8;i++)
        {
                value=value>>1;
                sclk=0;
                if(io)
                {
                        value=value|0x80;       
                }
                sclk=1;
        }
        ce=0;
        _nop_();
        sclk=0;
        _nop_();
        sclk=1;
        io=1;
        return value;
}

void set_rtc()
{
        uchar i,j,k;
        for(i=0;i<7;i++)
        {
                j=time_data[i]/10;
                k=time_data[i]%10;
                time_data[i]=k+j*16;
        }
        write_ds1302(0x8e,0x00);//?????
        for(i=0;i<7;i++)
        {
                write_ds1302(write_add[i],time_data[i]);
        }
        write_ds1302(0x8e,0x80);//????
}

void read_rtc()
{
        uchar i;
        for(i=0;i<7;i++)
        {
                time_data[i]=read_ds1302(read_add[i]);
        }
}

推荐阅读

史海拾趣

G-Link Technology公司的发展小趣事

为了进一步扩大市场份额,蜂鸟无线积极实施国际化战略。公司先后在亚洲、欧洲和北美等多个地区设立了研发中心和销售网络,以更好地服务全球客户。在国际化过程中,蜂鸟无线注重与当地企业和政府机构的合作,共同推动无线通信技术的发展和应用。通过参与国际展会、举办技术交流会等活动,蜂鸟无线不仅提升了品牌知名度,还成功吸引了众多国际合作伙伴,为公司的全球化发展奠定了坚实基础。

旌芯半导体(GN)公司的发展小趣事

随着物联网技术的飞速发展,蜂鸟无线也紧跟时代步伐,将研发重心向物联网安全领域倾斜。公司推出的Hnt网关,集成了先进的加密芯片和Helium共识机制,有效抵御了物联网设备面临的各种安全威胁。这一创新产品不仅提升了物联网系统的安全性,还降低了运维成本,为物联网行业的健康发展提供了有力支持。蜂鸟无线的这一举措,进一步巩固了其在无线通信和物联网安全领域的领先地位。

Advanced Thermal Solutions公司的发展小趣事

为了进一步扩大市场份额,ATS开始实施全球化战略。公司先后在北美、欧洲和亚洲等地设立了分公司或办事处,以便更好地服务全球客户。同时,ATS还积极参与国际展览和交流活动,与全球各地的合作伙伴建立紧密的合作关系。这些举措使ATS的产品和服务得以覆盖更广泛的地域,公司的知名度和影响力也不断提升。

安普康(AMPCOM)公司的发展小趣事

安普康(AMPCOM)自创立之初,就致力于将品牌推向国际市场。随着公司规模的扩大和产品线的丰富,安普康开始实施全球商标注册战略。从2011年首次申请安普康AMPCOM商标,到随后的几年内在泰国、日本、新加坡、老挝、澳大利亚等多个国家成功注册,安普康的品牌影响力逐渐扩大。这一过程中,公司不仅面临着不同国家法律法规的挑战,还需应对文化差异和市场需求的差异。然而,凭借专业的团队和精准的市场定位,安普康成功地将品牌推向了全球舞台。

广东长利光电(Changli Optoelectronic)公司的发展小趣事

进入21世纪,广东长利光电开始将目光投向国际市场。公司积极参加各种国际展览和交流活动,与世界各地的客户建立了广泛的联系。凭借优质的产品和服务,公司逐渐在国际市场上崭露头角。为了更好地服务全球客户,广东长利光电在中国设立了多个办事处,并建立了完善的销售和服务网络。

Emulation Technology Inc公司的发展小趣事

为了进一步扩大市场份额,Emulation积极实施国际化战略。公司先后在北美、欧洲和亚洲等地设立了分支机构,与当地合作伙伴建立了紧密的合作关系。这些分支机构不仅为Emulation提供了更多的市场机会,还帮助公司更好地了解当地市场需求和竞争态势。

问答坊 | AI 解惑

电流放大电路

谁有电流放大电路的相关资料,拿出来分享一下。实用的电路最好,我找了好几个电路,但调试结果都不太理想。 就这么多了。 [ 本帖最后由 竹林中人 于 2009-6-3 20:26 编辑 ]…

查看全部问答>

ZigBee技术语音图像无线监控系统的设计与实现

在环境比较恶劣,温度、压力、湿度、震动、噪声和电磁等因素时刻都可能发生变化的情况下,利用一般的网络技术来组建监控系统,可能会因为实时性不够强、灵敏度较小、延迟大、距离短、可靠性较低、受环境限制明显等缺陷,无法全面实时有效地实现安全 ...…

查看全部问答>

LPC1114 第一个程序

收到开发板 今天上午 做啦下串口的实验, 其实是很简单的程序 开发 人员已经给设计的差不多啦, 只要做少许的修改 添加上自己的动能就好啦 希望大家多多支持 !! 多提些宝贵的意见!!!共同交流, 共同学习!! [ 本帖最后由 lanyu345 于 2010-4 ...…

查看全部问答>

关于ADS8556死机的问题~!

最近在用ADS8556,虽然它采样很准确,但存在死机问题。不知道怎么回事,跪求各位大侠给点建议。谢谢!…

查看全部问答>

如何计算FPGA设计频率

我们的设计需要多大容量的芯片?我们的设计能跑多快?这是经常困扰工程师的两个问题.对于前一个问题,我们可能还能先以一个比较大的芯片实现原型,待原型完成再选用大小合适的芯片实现.对于后者,我们需要一个比较精确的预估,我们的设计能跑50M,100M 还 ...…

查看全部问答>

怎样根据原理图编写VHDL程序

怎样根据原理图编写VHDL程序…

查看全部问答>

TI 医疗成像应用指南

医疗成像技术处在不断演进与发展中,其目的在于改善患者的护理水平。TI 完整的模拟信号链路、电源管理、接口和嵌入式处理产品库可满足主要医疗成像模式的需要,例如超声波、计算机体层成像、核磁共振成像、正电子放射层析成像和数字式X光,以及后期 ...…

查看全部问答>

跪求大神帮我列出所需要的元器件,仿真图,最好还顺便留些个程序

需求是我自己定义的:有10个数据采集点;1.每个小时测1次,记录在缓存,周期一天(即24个小时)向数据中心发送1次所有记录的数据,并且删除本地缓存中的所有数据2。如果数据中心需要特殊时间点的数据则可以发送指令,监测点立即测量数据并且把数据 ...…

查看全部问答>