-
最新日志
最新评论
- 中国博客网 发表于《Hello world!》
- XX 发表于《谢谢你,橙子帮》
- 老妹 发表于《谢谢你,橙子帮》
- 英子百合 发表于《一个为难了好久的错误(关于C)》
- 00 发表于《一个为难了好久的错误(关于C)》
存档页
分类
功能
Category Archives: 单片机
单键自动关机电路
从阿莫论坛的马潮老师专栏里看到这个电路,觉得比我之前的好多了。因为可以实现完全断电 我之前是单片机进入掉电模式,但外部还有升压芯片在工作,受升压芯片限制,而且占用一个外部中断资源 工作过程为 1.按下K,电源通过4007为整个系统供电,AVR开始工作。此时PB1为高电平。 2.AVR检测PB1,连续2秒为高(反之干扰和和误按K),PB0输出高电平,继电器工作。 3.AVR等待PB1为低,然后进入正式工作。 4.此时K已经释放,整个系统有电,保持工作,但PB1为低电平(因为4007隔离)。 5.如果AVR再次检测到PB1为高时(连续2秒),AVR的PB0输出低电平,然后什么也不做了。 6.释放K后,系统电源关闭。 不过好象按键按下去的时候有个二极管的压降,用肖特基应该能比较好。
单片机第一课(数码管显示以及红外解码)
先上传源程序及烧录文件 大家可以用我先前教大家的下载程序的方法把烧录文件烧录进单片机,晶振用11.0592M 然后用配套的遥控器对着板的红外接收头,每按一个键,数码管会显示二个字节数据,二个字节数据都是16进制 比如0x12 0x23,在数码管上显示的为1223 数码管显示的第一个字节是遥控器的用户码,后面为按键数据码 这个遥控器编码组成为: 起始码+用户码+用户反码+键码+键反码 起始码由9MS低电平+4.5MS高电平组成。 数据0由600us高+500us低组成 数据1由600us高+1.64ms低组成 这个月的目标就是把数码管显示和红外解码教给大家,以后每个月我都会更新 这么长一段时间没有更新已经觉得很对不起大家了。 学过单片机的可以先看下源程序,没有学过的就先体会下红外解码以及数码管显示。 还有原来单片机的测试程序我已经丢掉了,所以烧录后将不能恢复到原来显示时间和温度的状态,希望大家原谅 但我会后面一步一步教板上这些资源的使用的。 程序项目由四个源文件组成,分别是main.h,main.c display.h,display.c 前面的是主程序,红外解码我放在主程序里面了 后面的是显示程序,比较简单,就是动态扫描函数。 二个头文件的内容分别是 /* 文件名:main.h 功能:用于单片机学习板的红外解码程序的头文件(用于超薄遥控器) 单片机晶振:外部晶振11.0592M 创建者:lusson 创建日期:2008.5.13 修改者: 修改日期: */ #ifndef MAIN_ #define MAIN_ #include<reg52.h> #include<intrins.h> #define uchar unsigned char … Continue reading
rand、srand及randomize的用法
首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。 rand(产生随机数) 表头文件: #include<stdlib.h> 定义函数 :int rand(void) 函数说明 : 因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。 返回值: 返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。若用unsigned int 双字节是65535,四字节是4294967295的整数范围。 0~RAND_MAX每个数字被选中的机率是相同的。 范例: /* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考 srand()*/ #include<stdlib.h> main() { int i,j; for(i=0;i<10;i++) { j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); printf("%d ",j); } } 执行: 9 4 8 8 … Continue reading
Posted in 单片机
Leave a comment