
1赛前:
赛前的准备。其实这一阶段的主要工作就是储备:元器件的储备、软件程序的储备、硬件电路的储备、各种经验的总结等等。具体如下: u 元器件:分门别类按芯片的功能将芯片进行储备,比如放大器、时钟电路、模数转换器等u 软件程序:把一些单片机常用的外围芯片的驱动程序进行储备,比如键盘、显示等人机接口的程序设计,模数转换器的驱动程序等等u 硬件电路:将一些典型的电路做成模块的形式,比如放大器、滤波器等这样做的好处是,在赛前对各种典型的单元电路、驱动程序都做到心中有数,到比赛时就可以得心应手了,其实比赛和高考差不多,经过两年的储备,在四天三夜要把所学的知识技能融会贯通,做出成绩来。所以功夫要在平时,否则比赛时是不会有奇迹出现的。资料多了,要学会整理,不要所有的一切都放在一个文件下,这样管理起来很不方便。图1时我当时的资料分类目录。可以根据自身情况设计你的目录,原则就是管理方便、清晰。简单介绍一下:芯片文档:存放集成芯片的数据手册,设计电路程序时需要经常查阅。硬件电路设计:存放电路图,包括原理图、PCB版图软件程序:各种芯片的驱动程序、项目的程序……其它资料:论文、经典电路图、程序……调试记录:记录调试的现象、数据、失败的原因……图1 资料分类目录图2是我的芯片文档目录,以单片机为中心,将外围器件分类储备: AD转换器:ADC0809、MAX197 ……DA转换器:DAC0832、MAX525、MAX532 ……时钟芯片:DS1302、DS1307、DS12887 ……特殊器件:AD9851、AD603 AD637……人机接口器件:LCD1602、HD7279、ZLG7289、MAX7219 ……存储器:DS1554、DS1556 ……运算放大器:NE5532、LM358、OP07、AD603、AD620 ……比较器:LM339、LM393 ……图2 芯片文档目录 几个技巧:�0�1 技巧1:在阅读芯片手册时,可以在手册上面作上标记,(pdf 60以上的版本都支持文档中作笔记)比如工作电压、带宽、控制寄存器、公式 ……好处是下次阅读是可以直接找到重点,有的放矢。�0�1 技巧2:调试记录目录里,最好按照日期和调试的内容来命名,不断更新,最好纪录一些调试过程中出现的错误,这样以后就有了经验,避免同一个错误犯第二次。�0�1 技巧3:芯片文档里面的器件最好都是使用过的,而且有相应的程序、电路图等,没有用过的器件最好在新建一个目录存放,而比赛时最好使用平时用过的器件,心里有数,节省时间。PS:这次竞赛时,我们队选了A题(正弦信号发生器),用到了上述的芯片有:AD9851、MAX532、LCD1602、HD7279、AD603、NE5532等。在硬件电路设计时我们可以做到心中有数,直接就可以设计电路,而软件程序都是C语言编写的,模块化设计,移植起来也很方便,为我们节约了宝贵的时间。建议:赛前准备阶段的时间还是很长的,要好好利用这段时间,尤其是寒暑假的大块时间,有条件的同学可以三个人一起组队,把往年的赛题练习一下,很有好处的。2赛中:选题:拿到题目之后,第一步要做的就是选题。选题可以说是整个比赛当中最为关键的一步,题目选的不好,很可能到最后连实物都做不出来。具体的选题可以根据队伍的平时专攻方向,比如说你们平时就是搞电机控制的,那选题时最好也选控制相关的题目,还可以咨询一下老师和学长们的意见。但是,一旦题目确定下来之后就千万不要改题目了,毕竟我们的时间优先,只有4天3夜,在这么短的时间里是容不得临时改题目。PS:记得当时我们看题的时候先看得是A题,结果我们三个人就决定做这个题目了,以至于到比赛几天内,我都还不知道另外的几个题目内容是什么。分工: 分工只有不同,没有高低之分,调程序需要人,整理文档同样需要人,这个时候是最能体现团队的时候。我认为一个队中的三个人,最好能够有所侧重,一个负责硬件设计、驱动程序编写,一个负责上层软件程序的编写,另外一人负责整理文档。以我们队为例:我负责硬件电路的设计及驱动程序的编写,尹同学负责上层界面的软件程序及双机通信的程序,王同学负责电路板的制作、焊接、调试及文档的整理。我感觉正是我们三个人的分工不同,侧重不同才能使我们的制作过程很顺利,当然其间也遇到过很多的困难。论文: 论文一般是比赛时容易被忽略的一点,殊不知论文与作品一样举足轻重,因为论文同样占有50分的,在作品差不多的情况下,比的就是论文了,撰写论文建议参考《作品选编》,它是往届一等奖的作品论文选编,很有参考价值,这里说一下写论文的时间,一般来讲在第二个晚上就因该开始着手写了,此时硬件上应该已经有所进展,剩下的就是攻关了,所以此时就是写论文的好时间。3其它:时间安排: 在选定题目之后,同样需要制定方案。与其一上来就开始盲目的动手做,以至于后来在更改方案,还不如画几个小时的时间仔细研究一下对策,之后在动手做。还有就是写论文的时间,一定不要等到实物做出来之后再写论文,万一没做出来,那怎么办?我建议在第三天的白天就开始论文的整理。身体:要知道这个比赛,是需要通宵工作的,所以没有一个好的身体是不行的。在比赛期间要注意劳逸结合,累的时候出去走走,换换空气。通宵工作的时候要小心电烙铁,夜晚大家的注意力都不是很集中,一定要注意安全。信心:比赛过程中,保持一个平和的心态很重要,不要急躁,时刻保持冷静,当然我知道,这一点很难做到。当你遇到难题,心情很糟糕时,可以到外面去走一走,换个环境,什么都不想,休息一下。回过头来再重新面对问题。我觉得比赛时的心情波动是:刚拿到题:信心十足,感觉自己都能够做出来第一天:进展很快,情绪高涨第二天:没有什么进展,情绪低落第三天:稍有起色,心情有所改善并且逐渐提高信心。第四天:心态平和(大局已定)所以记住:当你心情不好时,就是你们在攻关爬坡时,坚持住,过了这一段时间就成功了
#include <reg52h>
#define uint unsigned int
#define uchar unsigned char
#define x1 0x80
#define x2 0x88
#define y 0x80
#define comm 0
#define dat 1
sbit cs = P0^0;
sbit std = P0^1;
sbit sclk = P0^2;
sbit psb = P0^3; //H=并口; L=串口;
sbit rst = P0^4; //Reset Signal 低电平有效
void wr_lcd (uchar dat_comm,uchar content);
void delay (uint us);
uchar code tab1[]={
"本系列中文模块内"
"任意位置反白显示"
"置二级字库,可在"
"使用更方便更灵活"
};
uchar code tab31[]={
"金鹏科技有限公司"
"Golden Palm TECH"
};
uchar code tab32[]={
/-- 调入了一幅图像:F:\梁\画图\HOCO12832bmp --/
/-- 宽度x高度=128x32 --/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x18,0x0C,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
0x01,0xFF,0x80,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x13,0x10,0x03,0xFE,0x00,
0x03,0xFF,0xC0,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3F,0x30,0x1F,0xFF,0xC0,
0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x8C,0x03,0xF0,0x00,0x7F,0xE0,0x7C,0x01,0xE0,
0x03,0xFF,0xF0,0x00,0x00,0x00,0x01,0x36,0x06,0xC0,0x00,0x5F,0xC0,0xFF,0xFC,0x60,
0x01,0xFF,0xF0,0x00,0x00,0x00,0x02,0x1B,0x0F,0x80,0x00,0xFF,0x01,0xFE,0x0F,0x30,
0x00,0xEF,0xF0,0x00,0x00,0x00,0x02,0x6D,0x9F,0x00,0x00,0x3E,0x03,0xFF,0xF1,0x90,
0x00,0xFF,0xF8,0x00,0x00,0x00,0x04,0x36,0xFE,0x00,0x01,0xFF,0x07,0xFF,0xFC,0x90,
0x00,0xEF,0xFF,0xFF,0x80,0x00,0x04,0xDB,0x7E,0x00,0x03,0xFF,0x87,0xFF,0xFC,0xD0,
0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x04,0x6D,0xFC,0x00,0x07,0xFF,0x8F,0xFF,0xFE,0x50,
0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x36,0xFC,0x10,0x07,0xFF,0x8F,0xFF,0xFE,0x90,
0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x1B,0xF8,0x10,0x07,0xFF,0xCF,0xFF,0xFE,0x80,
0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x04,0x0F,0xF8,0x10,0x07,0xFF,0xFF,0xFF,0xFA,0x00,
0x00,0x07,0xFF,0xFF,0xF0,0x00,0x04,0x07,0xF0,0x10,0x07,0xFF,0xFF,0xFF,0xFA,0x00,
0x00,0xFF,0xFF,0xFF,0xF8,0x00,0x02,0x03,0xF0,0x20,0x07,0xFF,0xFF,0xFF,0xBA,0x00,
0x00,0xFD,0xFF,0xFF,0xFC,0x00,0x02,0x03,0xF0,0x20,0x03,0xFF,0xFF,0xDF,0xB8,0x00,
0x00,0xC1,0xC0,0x3F,0xFC,0x00,0x01,0x01,0xE0,0x40,0x00,0xFF,0xFF,0xDF,0xB0,0x00,
0x00,0x81,0xC0,0x3F,0xCE,0x00,0x00,0x81,0xE0,0x80,0x00,0x7F,0xFF,0xDF,0xA0,0x00,
0x00,0x81,0x80,0x1D,0xCF,0x00,0x00,0x41,0xE1,0x00,0x00,0x3F,0xFF,0x9B,0x00,0x00,
0x01,0x83,0x80,0x1F,0xC7,0x80,0x00,0x21,0xE2,0x00,0x00,0x1F,0xFD,0xB6,0x00,0x00,
0x01,0xC3,0x00,0x0E,0xE6,0x80,0x00,0x19,0xEC,0x00,0x00,0x07,0xFE,0x20,0x00,0x00,
0x00,0xC3,0x00,0x07,0x67,0x40,0x00,0x07,0xF0,0x00,0x00,0x03,0x3E,0x00,0x00,0x00,
0x00,0x02,0x00,0x03,0xE7,0xA0,0x00,0x00,0x00,0x00,0x00,0x02,0x8E,0x00,0x00,0x00,
0x00,0x06,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00,
0x00,0x06,0x00,0x07,0x03,0x00,0x77,0x46,0x74,0x24,0x80,0x06,0x04,0x00,0x00,0x00,
0x00,0x1C,0x00,0x06,0x00,0x00,0x55,0x45,0x54,0x57,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x1C,0x00,0x0E,0x00,0x00,0x45,0x45,0x74,0x57,0x80,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1C,0x00,0x00,0x55,0x45,0x44,0x74,0x80,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x38,0x00,0x00,0x77,0x76,0x47,0x54,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
uchar code tab5[]={
/-- 调入了一幅图像:F:\梁\画图\COCKbmp --/
/-- 宽度x高度=128x64 --/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0C,0x43,0x01,0x80,0x00,0x7F,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x19,0xFF,0x07,0x00,0x07,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x3F,0xFC,0x1E,0x00,0x1F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xBF,0xFF,0xFC,0x00,0x7F,0xFC,0x00,0x7F,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xFF,0xF0,0x00,0xFF,0xC0,0x00,0x0F,0xE0,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xFC,0x01,0xF0,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xDF,0xFF,0xC0,0x07,0xFF,0xFF,0xFF,0x80,0xF0,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x0F,0xFF,0xFF,0xFF,0xE0,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0xF8,0x00,0x1F,0xFF,0xF0,0x03,0xF8,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0xE0,0x00,0x3F,0xFF,0xFF,0xC0,0x7C,0x18,0x00,0x00,0x00,
0x00,0x00,0x00,0x04,0x7F,0xF0,0x00,0x3F,0xFF,0xFF,0xF8,0x1E,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xF8,0x00,0x7F,0xFF,0xFF,0xFE,0x0F,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xFF,0xFC,0x00,0xFF,0xFF,0xFF,0xFF,0x87,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,0x83,0x88,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0xFF,0xFE,0x01,0xFF,0xFF,0xFF,0xFF,0xC3,0x88,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xFF,0xFE,0x01,0xFF,0xFF,0xFF,0xFF,0xE1,0x88,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xE1,0x88,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xF1,0x88,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xF3,0x08,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0xF2,0x10,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xFF,0xF0,0x20,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x70,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x70,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0x7F,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0x7F,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0x7E,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0x3E,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xCF,0xFF,0x3C,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xCF,0xFE,0x38,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0x8F,0xFE,0x38,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x8F,0xFE,0x30,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x7C,0x20,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x1E,0x78,0x00,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFE,0x1E,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xDA,0x3C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xF2,0x30,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xF1,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7C,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x78,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x72,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x40,0x04,0xD8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0C,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x38,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xE2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/------------------初始化-----------------/
void init_lcd (void)
{
rst=1;
psb=0;
wr_lcd (comm,0x30); /30---基本指令动作/
wr_lcd (comm,0x01); /清屏,地址指针指向00H/
delay (100);
wr_lcd (comm,0x06); /光标的移动方向/
wr_lcd (comm,0x0c); /开显示,关游标/
}
/---------------显示汉字或字符----------------/
void chn_disp (uchar code chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
for (j=0;j<4;j++)
{
for (i=0;i<16;i++)
wr_lcd (dat,chn[j16+i]);
}
}
/-----------上半屏显示汉字或字符------------/
void chn_disp1 (uchar code chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
j=0;
for (i=0;i<16;i++)
wr_lcd (dat,chn[j16+i]);
wr_lcd (comm,0x90);
j=1;
for (i=0;i<16;i++)
wr_lcd (dat,chn[j16+i]);
}
/----------------显示图形-----------------/
void img_disp (uchar code img)
{
uchar i,j;
for(j=0;j<32;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j);
wr_lcd (comm,x1+i);
wr_lcd (comm,0x30);
wr_lcd (dat,img[j16+i2]);
wr_lcd (dat,img[j16+i2+1]);
}
}
for(j=32;j<64;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j-32);
wr_lcd (comm,x2+i);
wr_lcd (comm,0x30);
wr_lcd (dat,img[j16+i2]);
wr_lcd (dat,img[j16+i2+1]);
}
}
wr_lcd (comm,0x36);
}
/-------------下半屏显示图形--------------/
void img_disp1 (uchar code img)
{
uchar i,j;
for(j=0;j<32;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j);
wr_lcd (comm,x2+i);
wr_lcd (comm,0x30);
wr_lcd (dat,img[j16+i2]);
wr_lcd (dat,img[j16+i2+1]);
}
}
wr_lcd (comm,0x36);
}
/--------------显示点阵----------------/
void lat_disp (uchar data1,uchar data2)
{
uchar i,j,k,x;
x=x1;
for(k=0;k<2;k++)
{
for(j=0;j<16;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j2);
wr_lcd (comm,x+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data1);
wr_lcd (dat,data1);
}
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j2+1);
wr_lcd (comm,x+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data2);
wr_lcd (dat,data2);
}
}
x=x2;
}
wr_lcd (comm,0x36);
}
/-----------------------------------------------/
//当data1=0xff,data2=0xff时,在x0,y0处反白显示16xlyl
void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)
{
uchar i,j;
for(j=0;j<yl;j++)
{
for(i=0;i<xl;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y0+j);
wr_lcd (comm,x0+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data1);
wr_lcd (dat,data2);
}
}
wr_lcd (comm,0x36);
}
/--------------清DDRAM------------------/
void clrram (void)
{
wr_lcd (comm,0x30);
wr_lcd (comm,0x01);
delay (180);
}
/---------------------------------------/
void wr_lcd (uchar dat_comm,uchar content)
{
uchar a,i,j;
delay (50);
a=content;
cs=1;
sclk=0;
std=1;
for(i=0;i<5;i++)
{
sclk=1;
sclk=0;
}
std=0;
sclk=1;
sclk=0;
if(dat_comm)
std=1; //data
else
std=0; //command
sclk=1;
sclk=0;
std=0;
sclk=1;
sclk=0;
for(j=0;j<2;j++)
{
for(i=0;i<4;i++)
{
a=a<<1;
std=CY;
sclk=1;
sclk=0;
}
std=0;
for(i=0;i<4;i++)
{
sclk=1;
sclk=0;
}
}
}
/-----------------------------------/
void delay (uint us) //delay time
{
while(us--);
}
void delay1 (uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<15;j++)
delay(1);
}
/------------------主程序--------------------/
void main ()
{
SP=0x5f;
init_lcd ();
while (1)
{
lat_disp (0x00,0x00);
chn_disp (tab1);
con_disp (0xff,0xff,0x8c,0x80,2,16);
delay1 (8000);
clrram();
lat_disp (0xcc,0xcc);
delay1 (8000);
lat_disp (0x00,0x00);
chn_disp1 (tab31);
img_disp1 (tab32);
delay1 (8000);
clrram();
lat_disp (0xff,0x00);
delay1 (8000);
img_disp (tab5);
delay1 (8000);
}
}
36个单片机新手入门问题:
1C语言和汇编语言在各有哪些优缺点? 2初学者到底是应该先学C还是汇编? 3400减50,程序语句上如何SUBB实现呢?
4C或汇编语言可以用于单片机,C++能吗? 5学了电子线路、C语言,感觉很迷茫怎么办? 68位机还能延续多久?
7搞单片机开发,一定要会C吗? 8请问作为学生,如何学好单片机? 9单片机的生命期还有多长?
10当开发项目时,用C还是用汇编开发好? 11如何才能才为单片机的高手啊? 12符合44PIN的80系列8位单片机的MCU有哪些?
13请问那里可以找到关于这方面的书或资料? 14女性是否适合单片机软件编程这个行业? 15从51转到ARM会有困难吗?
16利用单片机来检测手机电池的充放电时间? 17商业级芯片和工业及芯片区别? 18低辐射MCU方法可以减少,有什么别的方法?
1996单片机开发系统时,有那些注意事项? 20在demo板上采样电压,不稳定,如何消除? 21在车载DVD系统中,如何设计电子防震系统?
22电子防震技术中,那些IC或器件可供选择? 23如何进行编程可以减少程序的bug? 24有没有解决加密问题又不破坏MCU的方法?
25如何使生成的代码具有和汇编一样的效率? 26ARM单片机和哪种内核的单片机比较接近? 27测试中如何用一些比较短的时间来工作?
28怎样学51系列和cygnal系列单片机? 29MCU的C汇编优化,有没有通用的原则? 30估计一个算法的MIPS,有什么好的途径?
31AT89S51,复位RAM中数据被修改怎么回事? 32如何正确的使用IO功能? 33频率100kHz,atiny15那样怎么办?
34单片机应注重哪几个方面的学习? 35汽车电子用的单片机是8位多,还是32位? 36复用技术的使用在实际应用?
单片机开发与测试中的若干问题:
1Delta-Sigma软件测量方式,是什么概念? 2要同时用到3个counter,该怎么办? 3有那些是衡量系统的稳定性的标准?
4芯片封装及设计过程中需要注意哪些问题? 5抗干扰技术对软件的可靠性怀疑。怎么办? 612M的晶振,如何实现480MB/S数据传输率呢?
7当今世界单片机的应用与发展有什么不同? 8在中国,单片机在哪方面有较好的前景? 9高性能要求选用32位单片机这样认为对吗?
1051系统过渡到ARM系统,要注意哪些事情? 11能否用PSoC嵌入式代替部分单片机系统呢? 12如何理解如下概念?
13选用什么型号的仿真器和编程器比较好? 14C语言是否有关于位 *** 作地址的指令 15运行以后看到从R0到R7都被占用,为什么?
16发电机系统,如何设计复位电路? 17PWM做到100kHz(8bit上)的方法有哪些? 18医疗电子应用的最多是几位单片机?
19单片机对modem要进行哪些初始化 *** 作? 20各种各样的输入怎么样与MCU进行通讯? 21两个串口、16KEPROM、512个字节的RAM?
22在嵌入式开发中软件抗干扰有哪些问题? 23语音识别会不会是单片机下个消费热点? 24如何设计实现低成本测量电池组电压的装置?
25调用函数会不会影响定时/计数器的中断? 26LM4915是什么IC? 27被嵌套高优先级中断程序怎样返回主程序?
28介绍单片机系统的故障自诊断的知识? 29如何使照的相片可存储,看的时候可调用? 30将Wafer切割成Die后对单个Die进行?
31测试整个MCU的功能是否正确? 32如何测试程序达到较高的测试覆盖度? 33MCU逻辑电路是测试合格的,如何解决呢?
34cpu一直工作在复位状态,会不会有问题? 35单片机系统的故障相关问题如何解决?
holtek单片机常见问题汇总:
1Holtek的数据手册在哪里下载? 2学单片机缺乏实践经验请问该怎么办? 3A/D,D/A的采样速率有什么优势?
4学习ARM是否比学习单片机更有使用前景? 5遥控的编解码思路和设计流程是怎样的? 6Holtek的编程语句是否就是C51或是相关?
7介绍一下MCU的测试方法。 8如何理解预分频,12时钟模式等概念? 9请推荐配套的编译仿真烧录的硬软件?
10在ARM编程中又应当如何? 11采用什么方法来测试单片机系统的可靠性? 12Holtek如何解决测试问题?
13如何使PIC16F87X宽温度内误差尽量小呢? 14如何适当的喂狗,判定软体的运行时间? 15RISC架构的单片机它的主要特点是什么?
16RISC和CISC内核的MCU,代码量哪个更大? 17单片机的I/O口何种状态能获得最低功耗? 18Holtek和AT系列编程有何不同?
19Holtek和AT系列有FLASH可电擦写的型号? 20Holtek的单片机能符合该项应用要求吗? 21WATCHDOG功能的单片机,如何确认其起作用?
22能否推荐一个DSP或现在的高速单片机? 24HT48系列单片机支持串行通信吗? 24返回指令能用跳转指令替代到主程序中?
8051单片机设计教程与实例---指令基础教程
1什么是嵌入式系统 2单片机的技术发展历史 3单片机应用模式
4单片机的开发过程 5单片机基本结构与工作原理 6单片机内部资源的配置
7单片机的外部特性 880C51的SFR运行管理模式 9单片机I/O端口及应用特性
1080C51单片机存储器系统及 *** 作方式 11单片机的指令系统 12指令系统的分类与速解
13指令的应用例子 14定时器/计数器的基本结构与 *** 作方式 15定时器/计数器的SFR
16定时器/计数器的工作方式 17定时器/计数器的编程和使用 18定时器应用举例
19中断系统的基本组成 20中断系统中的SFR 21中断响应的自主 *** 作过程
22串行口的基本结构与 *** 作方式 23串行口的特殊功能寄存器 24串口的工作方式
25汇编语言应用程序设计的一般格式 26汇编语言程序的设计方法 27常用的伪指令
28简单结构程序 29分支结构程序 30循环结构程序
31子程序结构程序 32查表程序 33查键程序
8051单片机设计教程与实例---实战程序设计
1显示程序 2 闪烁LED小灯的设计 3闪烁LED控制程序
4闪烁LED小灯主程序图 5数码管时钟电路的设计 688点阵LED字符显示器的设计
7数码管时钟电路的主程序 88路输入模拟信号数值显示电路的设计 98路输入模拟信号数值显示电路程序
10单键学习型遥控器的设计 11单键学习型遥控器的程序 12电路主要性能指标
1315路电器遥控器的设计 14系统的功能实现方法 15遥控发射及接收控制程序流程图
16自行车里程/速度计的设计 17系统内存的规划 18系统内存设计的程序
19自动往返行驶小汽车的设计 20系统内存资源的分配 21系统内存资源的程序
22遥控小汽车的设计 23发射板控制程序的设计 24汽车行驶信息发送与接收器的设计
25数据帧的编码格式及发送/接收过程 26汽车行驶信息发送与接收器的程序 27系统调试中的问题及解决方法
28数控调频发射台的设计 29内存单元的使用要求 30W78E516B的功能特点
31W78E516B中的几个特殊寄存器 32W78E516B在线编程的规则 33W78E516B在线编程的硬件电路
34W78E516B应用系统的程序设计 35电子定时器的设计 36电子定时器的程序
37电子定时器的程序流程图
单片机相关资料
(1)单片机的图形化编程方法探讨 (2)单片机应用编程技巧 (3)单片机自身的抗干扰若干措施
(4)单片机编音乐程序 (5)用89C51做直流稳压电源 (6)王款主流CMMB调谐器的特性比较
(7)红外遥控器控制的风扇温控器 (8)用单片机89S52制作计算器 (9)用单片机89C51制作程控交换机
(10)数据采集和记录系统单片机AT89C51 (11)简单的制作AT89SXX的单片机教程板 (12)热敏电阻温度计:液晶版
(14)热敏电阻温度计 (15)使用DS1307的数字闹钟 (16)SPI闪存编程器的制作
(17)8051SBC单片机微处理器学习板 (18)Atmel 89系列编程器的制作 (19)ISP微控制器编程
(20)制作简单的S51学习板 (21)89S52单片机开发板 (22)keil 与protues安装的详细步骤和说明
详见:>
实时时钟电路的原理及应用
[日期:2006-11-16] 来源:互联网 作者:未知 [字体:大 中 小]
1 引言
现在流行的串行时钟电路很多,如DS1302、DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32768kHz晶振。
2 DS1302的结构及工作原理
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为25V~55V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
21 引脚功能及结构
图1示出DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+02V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行 *** 作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥25V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。
22 DS1302的控制字节
DS1302的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示 *** 作单元的地址;最低有效位(位0)如为0表示要进行写 *** 作,为1表示进行读 *** 作,控制字节总是从最低位开始输出。
23 数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
24 DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读 *** 作,偶数为写 *** 作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
3 DS1302实时显示时间的软硬件
DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。图3示出DS1302与89C2051的连接图,其中,时钟的显示用LCD。
31 DS1302与CPU的连接
实际上,在调试程序时可以不加电容器,只加一个32768kHz的晶振即可。只是选择晶振时,不同的晶振,误差也较大。另外,还可以在上面的电路中加入DS18B20,同时显示实时温度。只要占用CPU一个口线即可。LCD还可以换成LED,还可以使用北京卫信杰科技发展有限公司生产的10位多功能8段液晶显示模块LCM101,内含看门狗(WDT)/时钟发生器及两种频率的蜂鸣器驱动电路,并有内置显示RAM,可显示任意字段笔划,具有3-4线串行接口,可与任何单片机、IC接口。功耗低,显示状态时电流为2μA(典型值),省电模式时小于1μA,工作电压为24V~33V,显示清晰。
32 DS1302实时时间流程
图4示出DS1302的实时时间流程。根据此流程框图,不难采集实时时间。下面结合流程图对DS1302的基本 *** 作进行编程:
根据本人在调试中遇到的问题,特作如下说明:
DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写 *** 作(输入),D0=1,指定读 *** 作(输出)。
在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。
DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读 *** 作,偶数为写 *** 作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。
要特别说明的是备用电源B1,可以用电池或者超级电容器(01F以上)。虽然DS1302在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池。可以用老式电脑主板上的36V充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。100 μF就可以保证1小时的正常走时。DS1302在第一次加电后,必须进行初始化 *** 作。初始化后就可以按正常方法调整时间。
4 结论
DS1302存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题
现在有很多流行的串行时钟芯片,如DS1302,DS1307,PCF8485等,由于简单的接口,低成本和易用性,他们被广泛应用于电话、传真、便携式仪器等产品领域。在本实验中,我们将使用DS1302实时时钟(RTC)模块获取当前日期和时间。
DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析,及对异常数据出现的原因的查找具有重要意义。
传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。
★Raspberry Pi 3主板1
★树莓派电源1
★40P软排线1
★DS1302实时时钟模块1
★面包板1
★跳线若干
DS1302是DALLAS(达拉斯)公司出的一款涓流充电时钟芯片,2001年DALLAS被MAXIM(美信)收购。
DS1302实时时钟芯片广泛应用于电话、传真、便携式仪器等产品领域,他的主要性能指标如下:
1、DS1302是一个实时时钟芯片,可以提供秒、分、小时、日期、月、年等信息,并且还有软年自动调整的能力,可以通过配置AM/PM来决定采用24小时格式还是12小时格式。
2、拥有31字节数据存储RAM。
3、串行I/O通信方式,相对并行来说比较节省IO口的使用。
4、DS1302的工作电压比较宽,大概是20V~55V都可以正常工作。
5、DS1302这种时钟芯片功耗一般都很低,它在工作电压20V的时候,工作电流小于300nA。
6、DS1302共有8个引脚,有两种封装形式,一种是DIP-8封装,芯片宽度(不含引脚)是300mil,一种是SOP-8封装,有两 种宽度,一种是150mil,一种是208mil。我们看一下DS1302的引脚封装图:
7、当供电电压是5V的时候,兼容标准的TTL电平标准,这里的意思是,可以完美的和单片机进行通信。
8、由于DS1302是DS1202的升级版本,所以所有的功能都兼容DS1202。此外DS1302有两个电源输入,一个是主电源, 另外一个是备用电源,比如可以用电池或者大电容,这样是为了保证系统掉电的情况下,我们的时钟还会继续走。如果使用的是充电电池,还可以在正常工作时,设置充电功能,给我们的备用电池进行充电。
DS1302的特点第二条“拥有31字节数据存储RAM”,这是DS1302额外存在的资源。这31字节的RAM相当于一个存储器一样,我们编写单片机程序的时候,可以把我们想存储的数据存储在DS1302里边,需要的时候读出来,这块功能和EEPROM有点类似,相当于一个掉电丢失数据的“EEPROM”,如果我们的时钟电路加上备用电池,那么这31个字节的RAM就可以替代EEPROM的功能了。
DS1302一共有8个引脚,下边要根据引脚分布图和典型电路图来介绍一下每个引脚的功能:
DS1302的电路一个重点就是时钟电路,它所使用的晶振是一个32768k的晶振,晶振外部也不需要额外添加其他的电容或者电阻电路了。时钟的精度,首先取决于晶振的精度以及晶振的引脚负载电容。如果晶振不准或者负载电容过大过小,都会导致时钟误差过大。在这一切都搞定后,最终一个考虑因素是晶振的温漂。随着温度的变化,晶振往往精度会发生变化,因此,在实际的系统中,其中一种方法就是经常校对。比如我们所用的电脑的时钟,通常我们会设置一个选项“将计算机设置于internet时间同步”。选中这个选项后,一般可以过一段时间,我们的计算机就会和internet时间校准同步一次。
对DS1302的 *** 作就是对其内部寄存器的 *** 作,DS1302内部共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读/写除充电寄存器以外的寄存器。
DS1302的一条指令一个字节8位,其中第7位(即最高位)是固定1,这一位如果是0的话,那写进去是无效的。第6位是选择RAM还是CLOCK的,这里主要讲CLOCK时钟的使用,它的RAM功能我们不用,所以如果选择CLOCK功能,第6位是0,如果要用RAM,那第6位就是1。从第5到第1位,决定了寄存器的5位地址,而第0位是读写位,如果要写,这一位就是0,如果要读,这一位就是1。
DS1302时钟的寄存器,其中8个和时钟有关的,5位地址分别是00000一直到00111这8个地址,还有一个寄存器的地址是01000,这是涓流充电所用的寄存器,我们这里不讲。在DS1302的数据手册里的地址,直接把第7位、第6位和第0位值给出来了,所以指令就成了80H、81H那些了,最低位是1,那么表示读,最低位是0表示写。
寄存器一:最高位CH是一个时钟停止标志位。如果我们的时钟电路有备用电源部分,上电后,我们要先检测一下这一位,如果这一位是0,那说明我们的时钟在系统掉电后,由于备用电源的供给,时钟是持续正常运行的;如果这一位是1,那么说明我们的时钟在系统掉电后,时钟部分不工作了。若我们的Vcc1悬空或者是电池没电了,当我们下次重新上电时,读取这一位,那这一位就是1,我们可以通过这一位判断时钟在单片机系统掉电后是否持续运行。剩下的7位高3位是秒的十位,低4位是秒的个位,这里注意再提一次,DS1302内部是BCD码,而秒的十位最大是5,所以3个二进制位就够了。
寄存器二:bit7没意义,剩下的7位高3位是分钟的十位,低4位是分钟的个位。
寄存器三:bit7是1的话代表是12小时制,是0的话代表是24小时制,bit6固定是0,bit5在12小时制下0代表的是上午,1代表的是下午,在24小时制下和bit4一起代表了小时的十位,低4位代表的是小时的个位。
寄存器四:高2位固定是0,bit5和bit4是日期的十位,低4位是日期的个位。
寄存器五:高3位固定是0,bit4是月的十位,低4位是月的个位。
寄存器六:高5位固定是0,低3位代表了星期。
寄存器七:高4位代表了年的十位,低4位代表了年的个位。这里特别注意,这里的00到99年指的是2000年到2099年。
寄存器八:bit7是一个保护位,如果这一位是1,那么是禁止给任何其他的寄存器或者那31个字节的RAM写数据的。因此在写数据之前,这一位必须先写成0。
物理上,DS1302的通信接口由3个口线组成,即RST,SCLK,I/O。其中RST从低电平变成高电平启动一次数据传输过程,SCLK是时钟线,I/O是数据线。这个DS1302的通信线定义和SPI很像,事实上,DS1302的通信是SPI的变异种类,它用了SPI的通信时序,但是通信的时候没有完全按照SPI的规则来,下面我们介绍DS1302的变异SPI通信方式。
请注意数据是对时钟信号敏感的,而且一般数据是在下降沿写入,上升沿读出。平时SCLK保持低电平,当需要写命令或者写数据时,在时钟输出变为高电平之前先输出数据;当需要读数据时,在时钟输出变为高电平之前采样读取数据。
第1步: 连接电路。
第2步: DS1302的Python程序比较复杂,我们先编写一个模块ds1302py,在里面创建一个类DS1302(),在里面编写读取时钟信息等方法。
第3步: 编写实际控制程序,导入上面的模块ds1302。运行本文件,不断循环读取并打印时钟信息。
实验结果示例:
摘要:介绍了以PC(个人计算机)、MCU(单片机AT89C52)、双音多频编解码集成电路MT8880C、语音录放芯片ISD4004和无线数据收发芯片nRF401为核心,通过现有的电话网络终端或者互联网网络终端实现远程控制的智能家居系统,给出了该系统的电路原理和办硬件设计与实现方法。 关键词:远程控制 双音多频 网络通讯 无线通讯 家庭自动化21世纪是信息化的世纪,各种电信和互联网新技术推动了人类文明的巨大进步。数字化家居控制系统的出现使得人们可以通过手机或者互联网在任何时候、任意地点对家中的任意电器(空调、热水器、电饭煲、灯光、音响、DVD录像机)进行远程控制;也可以在下班途中,预先将家中的空调打开、让热水器提前烧好热水、电饭煲煮好香喷喷的米饭……;而这一切的实现都仅仅是轻轻的点几下鼠标,或者打一个简单的电话。此外,该系统还可使家庭具有多途径报警、远程监听、数字留言等多种功能,如果不幸出现某种险情,您和110可以在第一时间获得通知以便进一步采取行动。舒适、时尚的家居生活是社会进步的标志,智能家居系统能够在不改变家中任何家电的情况下,对家里的电器、灯光、电源、家庭环境进行方便地控制,使人们尽享高科技带来的简便而时尚的现代生活。1系统的总体结构及工作过程智能家居系统由系统主机、系统分机、Internet服务器和网络接口等部分组成。其中系统主机通过服务器(个人计算机)连入Internet,并通过自己的PSTN�公用电话交换网 接口电路连入PSTN。其结构图如图1所示。主机与分机通过无线传输组成星形拓扑结构。系统主机通过本地无线传输网络同系统分机进行通讯、传输控制命令和反馈信息。该系统正常工作时,用户可以通过screenwidth-400)thisstylewidth=screenwidth-400;\>Internet和PSTN两种网络进行访问,当通过Internet访问时,本系统可提供一个界面友好的终端软件,用户只需登陆到运行在家中的服务器即可对家中的设备进行远程控制;当通过PSTN访问时,本系统将为用户提供语音 *** 作界面。其工作流程如图2所示。2系统的硬件构成本系统的硬件主要有系统主机与系统分机两大部分。系统主机由单片机AT89C52和各种接口电路组成,如图3所示。系统分机由单片机AT89C52和各种接口电路、传感器单元电路、固态继电器控制电路组成,并由固态继电器控制具体设备,具体硬件组成框图如图4所示。通过系统主机的各种接口电路可将主机CPU从繁忙的计算中解脱出来,以便把主要精力运用在控制和信息传递上。系统主机主要依照各个功能电路的输出结果进行逻辑判断和控制命令的输出。系统分机的各种接口电路和主机相似,只是根据设备的不同(传感器单元)有着细节上的变化。下面主要介绍系统主机的各种接口电路。2.1 nRF401 无线数据传输电路无线数据传输电路由Nordic公司的单片UHF无线数据收发芯片nRF401及其外围电路构成。nRF401采用FSK调制解调技术,其工作效率可达20kbit/s,且有两个频率通道供选择,并且支持低功耗和待机模式。它不用对数据进行曼彻斯特编码,其天线接口设计为差分天线,因而很容易用PCB来实现。screenwidth-400)thisstylewidth=screenwidth-400;\> 2.2 看门狗电路看门狗电路由MAX813L及其外围元件组成。通常,在单片机的工作现场,可能有各种干扰源。这些干扰源可能导致程序跑飞、造成死机或者程序不能正常运行。如果不及时恢复或使系统复位,就容易造成损失。看门狗电路的作用就是在程序跑飞或者死机时,能有效地使系统复位以使系统恢复正常运转。因此,在程序中定期给P1.5送入看门狗信号,就可以保证在程序运行异常时,由MAX813L使单片机复位。2.3 DS1307时钟接口电路DS1307时钟芯片是美国DALLAS公司生产的I2C总线接口实时时钟芯片。DS1307可以独立于CPU工作,它不受晶振和电容等的影响,并且计时准确,月积累误差一般小于10秒。此芯片还具有掉电时钟保护功能,可自动切换到后备电源供电。同时还具有闰年自动调整功能,可以产生秒、分、时、日、月、年等数据,并将其保存在具有掉电保护功能的时间寄存器内,以便CPU根据需要对其进行读出或写入。由于单片机AT89C52没有I2C总线接口,因此,要驱动DS1307,就必须采用单主机方式下的I2C总线虚拟技术。在此方式下,以单片机为主节点(主器件),主器件永远占有总线而不出现总线竞争,且可以用两根I/O口线来虚拟I2C总线接口。I2C总线上的主器件(单片机)可在时钟线(SDL)上产生时钟脉冲,在数据线(SDA)上产生寻址信号、开始条件、停止条件以及建立数据传输的器件。任何被选中的器件都将被主器件看成是从器件。在这里,DS1307作为I2C总线的从器件。I2C总线为同步串行数据传输总线,其内部为双向传输电路,端口输出为开漏结构,因此,需加上拉电阻。2.4 MT8880C双音频编解码电路由于单片机是通过MT8880C芯片得到PSTN网络的双音频信号解码输出,也就是说,单片机可以识别来自PSTN网络的控制信号,用户可以根据系统的语音提示进行按键选择以实现用户身份的识别与远程控制。因此,利用MT8880C的双音频编码功能,系统可以在紧急时刻将用户预置的紧急电话打到PSTN网络,从而把损失减少到最低。2.5 ISD4004语音录放电路ISD4004是美国ISD公司生产的一种语音录放芯片。它可录制8~16分钟的语音信号。该芯片可提供SPI标准接口和单片机进行接口,其语音的录放控制均通过单片机来实现。该芯片的一个最大特点是可以按地址编程录放,因而可由ISD4004和单片机编程控制来构成本系统与PSTN网络用户的语音平台。由于ISD4004的INT和RAC脚输出为开漏结构,因此需要加上拉电阻。screenwidth-400)thisstylewidth=screenwidth-400;\>2.6 MAX202串行通讯电路通讯电路可由串行通讯专用芯片MAX202组成,通过此电路可以方便地与PC机进行串行通讯。2.7 铃流检测与摘挂机控制电路当系统被呼叫时,电话交换机发出铃流信号。振铃为25±3V的正弦波,失真小于10%,电压有效值为90±15V。振铃信号以5秒为周期,即1秒送,4秒断。由于振铃信号电压比较高,所以先要通过高压稳压二极管进行降压,然后输入至光耦。再经光耦隔离转换后,从光耦输出时通时断的正弦波,最后经RC回路进行滤波以输出标准的方波。该方波信号可以直接输出至单片机的定时器1进行计数,以实现对铃流的检测。由于程控电话交换机在电话摘机时电话线回路电流会突然变大(约30mA),因此,交换机检测到回路电流变大就认为电话机已经摘机。自动摘挂机电路可以通过单片机的P1.7来控制一个固态继电器,固态继电器的控制端应连接一个大约300Ω的电阻后再接入电话线两端,从而完成模拟摘挂机。
3系统软件编制本系统软件主要由系统主机和系统分机的C51程序和系统与Internet网络通讯程序组成。3.1 系统主机程序的编制系统主机程序主要用于实现系统的总体功能。包括无线数据传输程序、看门狗程序、时间戳程序、双音频编解码程序、语音录放程序、串行通讯程序、铃流检测与摘挂机控制程序、系统初始化程序、意外事件处理程序等。程序编制以消息驱动为主导思想。消息由计数器中断1、外部中断0和串行中断产生,在中断服务程序中,应将相应的状态位置位,而在消息循环中则应按相应的状态位调用功能函数,然后由功能函数将相应的状态位清0并完成所需功能,并最后返回到消息循环中。其程序流程如图5所示。该系统的分机程序和主机类似,故此不再详述。screenwidth-400)thisstylewidth=screenwidth-400;\>3.2 系统与Internet网络通讯程序的编制这部分通讯程序分为服务器和客户端两个程序,主要通过Internet网络完成用户的控制功能。服务器程序主要完成客户端与系统主机通讯的中转,即将客户端发来的控制或者查询命令翻译成系统主机能识别的格式,或者将系统主机收到的报警等信息上传到客户端。服务器程序使用Socket与客户端进行Internet通讯。客户端程序是运行在远端用户的控制界面,主要用于完成家居内状态的显示以及对家居内电器的远程控制,同时使客户端直接连接到服务器。4结论本系统充分利用了现有的网络资源。通过在实际电话网络和Internet网络中的试运行证明:该系统能够达到设计初期的各项要求。相信将在信息家电、智能小区等方面得到广泛应用。
以上就是关于参加电子设计大赛要做哪些准备全部的内容,包括:参加电子设计大赛要做哪些准备、20分!给个51单片机图像液晶程序、求一份单片机答辩的题目和答案 我不是计算机专业的 简单点就行 拜托了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)