历史上的今天
今天是: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]);
}
}
史海拾趣
|
在环境比较恶劣,温度、压力、湿度、震动、噪声和电磁等因素时刻都可能发生变化的情况下,利用一般的网络技术来组建监控系统,可能会因为实时性不够强、灵敏度较小、延迟大、距离短、可靠性较低、受环境限制明显等缺陷,无法全面实时有效地实现安全 ...… 查看全部问答> |
|
收到开发板 今天上午 做啦下串口的实验, 其实是很简单的程序 开发 人员已经给设计的差不多啦, 只要做少许的修改 添加上自己的动能就好啦 希望大家多多支持 !! 多提些宝贵的意见!!!共同交流, 共同学习!! [ 本帖最后由 lanyu345 于 2010-4 ...… 查看全部问答> |
|
我们的设计需要多大容量的芯片?我们的设计能跑多快?这是经常困扰工程师的两个问题.对于前一个问题,我们可能还能先以一个比较大的芯片实现原型,待原型完成再选用大小合适的芯片实现.对于后者,我们需要一个比较精确的预估,我们的设计能跑50M,100M 还 ...… 查看全部问答> |
|
医疗成像技术处在不断演进与发展中,其目的在于改善患者的护理水平。TI 完整的模拟信号链路、电源管理、接口和嵌入式处理产品库可满足主要医疗成像模式的需要,例如超声波、计算机体层成像、核磁共振成像、正电子放射层析成像和数字式X光,以及后期 ...… 查看全部问答> |
|
跪求大神帮我列出所需要的元器件,仿真图,最好还顺便留些个程序 需求是我自己定义的:有10个数据采集点;1.每个小时测1次,记录在缓存,周期一天(即24个小时)向数据中心发送1次所有记录的数据,并且删除本地缓存中的所有数据2。如果数据中心需要特殊时间点的数据则可以发送指令,监测点立即测量数据并且把数据 ...… 查看全部问答> |




