求一单片机简单程序*****想实现首先是全亮。再一次实现个一…

用单片机和ds1302写一个简单的数码钟,代码量有多大?|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
心血来潮自己写个时钟程序,用的是89c,编译的时候*** ERROR L121: IMPROPER FIXUP,keil设定code rom size为64k就能通过,但2051只有2krom,烧写芯片的时候出错,应该是超了。不知道大家写时钟程序用了多少代码,我只写了不到300行(C语言),结果就超2k了,感觉不太正常,求指导!
赞助商链接
换个单片机吧……
没法说,大小与用的代码有关,试试9级优化代码。2k以内按说完全可以
是keil没破解,所以会很大
:是keil没破解,所以会很大 ( 14:48) 果然如你所说,太感谢啦
反正我的2k已经够了
我写的是8k,代码很复杂,不过很准,一年不会大于12秒,也就是一个月一秒,加入了游丝概念,at89s51芯片
一年误差12秒,用的是原子钟频率基准?
:一年误差12秒,用的是原子钟频率基准? ( 16:52) 频率就是就是单片机12m晶振,引人游丝概念,就能控制再一个月一秒的误差
不知如何解决晶振的温漂?
:不知如何解决晶振的温漂? ( 17:47) 加入18b20测温度,通过温度高低反馈采取不同算法修正误差,这个思路如何?不过温度对晶振的影响有多大得系统测试过才知道。其实时钟不准才好呢,以前上学那会儿,家里的钟要调快至少5分钟,放在教室课桌里的电子表得调慢,自欺欺人有时候也挺好的
:我写的是8k,代码很复杂,不过很准,一年不会大于12秒,也就是一个月一秒,加入了游丝概念,at89s51芯片 ( 16:51) 这个精度与编写代码没关系,你的晶振频率精确稳定,就可以达到这个精度。软件精度再高也就是定时器重装模式了。对了,如果可以与网上链接自动校准是另外一码事了。20年前我出差上海,买了一个石英钟,花了18元,精度也是一个月1秒这样,到现在我还不舍得丢。这个石英钟不需要8K代码,也不需要引入游丝概念。
这么折腾还不如找个好晶振。
:频率就是就是单片机12m晶振,引人游丝概念,就能控制再一个月一秒的误差( 17:14)嬀/color]想听听游丝是个什么东东
:想听听游丝是个什么东东 ( 20:37) 很多朋友都用ds1302做时钟,单片机只是读取这个芯片上的时钟数据,这样时钟的精度就是ds1302晶振的精度,当然很不准了。我设计的纯粹是单片机的定时器12m时钟晶振,当然重装模式50ms也不准,这就需要引进一个类似于发条闹钟后面的游丝调整概念。来修整50ms的精度,这个精度的误差,一天大概有34.72/秒分点,所以30天可以有1.16点修正分叉,取整数1,剩下0.16个误差,所以,这个精度是非常非常准的。就这样一个东西,ds1302我只是用来每小时存一次,当断电时候读出数据,不断电我可以根本不用。0.16误差还可以细分下去,没必要了,很准了
:很多朋友都用ds1302做时钟,单片机只是读取这个芯片上的时钟数据,这样时钟的精度就是ds1302晶振的精度,当然很不准了。我设计的纯粹是单片机的定时器12m时钟晶振,当然重装模式50ms也不准,这就需要引进一个类似于发条闹钟后面的游丝调整概念。来修整50ms的精度,这个精度的误差 ..&( 21:38)&亲,可否共享一下啊/
亲亲,同问:可否共享一下啊/?
:很多朋友都用ds1302做时钟,单片机只是读取这个芯片上的时钟数据,这样时钟的精度就是ds1302晶振的精度,当然很不准了。我设计的纯粹是单片机的定时器12m时钟晶振,当然重装模式50ms也不准,这就需要引进一个类似于发条闹钟后面的游丝调整概念。来修整50ms的精度,这个精度的误差 ..&( 21:38)&还是比较不明白!用单片机定时代替时钟定时这不就是将32.468晶振和12M晶振对调,最终还不一样依赖晶振
:频率就是就是单片机12m晶振,引人游丝概念,就能控制再一个月一秒的误差 ( 17:14) 游丝概念&&是什么????&& 很牛的样子&&求代码&&呵呵
:游丝概念  是什么????   很牛的样子  求代码  呵呵zhang_ ( 22:47) 这样提示你,如果一个星期快一秒,一年52周,也就是控制在一分钟里面,那么,7天差一秒,推算到50ms的频率上是多少,你算过吗,游丝概念,取至机械表的游丝震荡,调整震荡周期,修整钟表快慢。那么同样计算一个月差一秒。
:还是比较不明白!用单片机定时代替时钟定时这不就是将32.468晶振和12M晶振对调,最终还不一样依赖晶振 ( 22:20) 晶振是不准的,修整定时器中断,会变得很准,32468更不准了,也不能调整。12m晶振不一定就是12m,如果单纯的用TH0=()/256,那就错大了
你这是建立在晶振频率稳定不变的基础上。实际上晶振的频率会受温度、老化等影响产生漂移,虽然漂移十分微小,但是日积月累还是相当客观的。如果仅仅是晶振的频率误差,那么每隔一定时间软件做一个补偿就可以的。最头疼的是晶振的频率漂移,很难解决,只能依靠高精度晶振。
:你这是建立在晶振频率稳定不变的基础上。实际上晶振的频率会受温度、老化等影响产生漂移,虽然漂移十分微小,但是日积月累还是相当客观的。如果仅仅是晶振的频率误差,那么每隔一定时间软件做一个补偿就可以的。最头疼的是晶振的频率漂移,很难解决,只能依靠高精度晶振。 ( 07:30) 可以随时修整,这个游丝长度键盘扫描里有这段/***********************************************************************/void key_scan(){&&&&if (set==0)&&&&{&&&&&&&&delayus(500);&&&&&&&&if (set==0) &&&&&&&&{&&&&&&&&&&&&bb=0;&&&&&&&&&&&&TR1=1;&&&&&&&&&&&&while(set==0 && bb&60);//等待按键释放或者3秒&&&&&&&&&&&&TR1=0;&&&&&&&&&&&&if (bb&60)&&&&&&//按键小于3秒是短按键&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&button_flag=1;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&button_flag=2;&&&&&&&&&&&&&&&&}//==========长按键改变设置状态============&&&&&&&&&&&&if (button_flag==2)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&set_flag++;&&&&&&&&&&&&&&&&if (set_flag&6) set_flag=0;&&&&&&&&&&&&&&&&// 设定:1,年;2,月;3,日;4,时;5,分;6,游丝;0,正常模式。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&while(set==0); //长按键,等待按键释放&&&&&&&&&&&&}//==========短按键增加设置===================&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&if (button_flag==1)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&switch (set_flag)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&case 1:&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&year++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&if (year&30) year=14;&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 2:&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&month++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&if (month&12) month=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 3:&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&date++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&if (date&31) date=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 4:&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&hour++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&if (hour&23) hour=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 5:&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&min++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&if (min&59) min=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 6:&&&&{&&&&//游丝调整&&&&&&&&&&&&&&&&&&&&&&&&&&&&balance_spring++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&if (balance_spring&59) balance_spring=40;&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 0:&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&if (sec&30)&&&&sec=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&else if (min==59) sec=59;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& else&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&sec=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&min++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&aa=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&week_proc();&&&&&&&&&&&&&&&&writealldata();&&&&&&&&&&&&}&&&&&&&&&&&&button_flag=0;&&&&&&&&}&&&&}}这是我的一键设置代码,以前论坛上发表过的游丝初值现在是50,上面到59,下面到40,有19格游丝宽度民用的晶振,是有温漂,调整游丝,就是为了克服温漂带来的误差。当你走了半年,发现快了或慢了,调整一格游丝,让他慢慢地慢下来或快上去,再走半年,又没误差了,就是这个理念。
:不知如何解决晶振的温漂?&( 17:47)&游丝的概念就是解决晶振温漂的问题
单片机和ds足已,还超过2K?
:可以随时修整,这个游丝长度键盘扫描里有这段/***********************************************************************/void key_scan()....... ( 07:38) 这好像只是按键设置,游丝的核心代码没有啊我做的钟从来没准过,即使软件修正也不行,走着走着就差几分钟了,的确晶振的问题很难搞,电源,温度,晶振,
:游丝的概念就是解决晶振温漂的问题( 08:02)嬀/color]概念是了解了,但是还是不知道如何实现的啊。能分享一下代码就太好了
:这好像只是按键设置,游丝的核心代码没有啊我做的钟从来没准过,即使软件修正也不行,走着走着就差几分钟了,的确晶振的问题很难搞,电源,温度,晶振, ( 10:10) 直接换一个高端的时钟芯片就可以了&&真麻烦……
查看完整版本: [--
Powered by
Time 0.052293 second(s),query:5 Gzip enabled求救,一个简单的单片机程序,C语言。_百度知道
求救,一个简单的单片机程序,C语言。
大致就是单片机初始化。在线等,开中断控制程序,求各位帮帮忙。麻烦会的老师帮助我编写一个控制程序。但是我实在不会C语言,用的是C单片机。上面是指导老师告诉我的大致的程序流程,临时学也来不及了,P0输入),但是毕业设计的内容是有一部分和电有关。,然后端口初始化 (用到P1输出,然后输出口是P1口,先命令解析,得到开关命令,毕业设计以前没有接触过这些。这个是大致的电路原理图,然后执行命令,但是对于我的毕业设计来说是一个重要的内容,C语言真的是不会.0-P1。开中断是设置子程序。现在要做的就是写一个程序执行P1口的开中断动作,控制几号口开关,在论坛求教各位老师帮忙编个C语言程序.5六个口控置六个继电器。所以来论坛求救了。内容很简单的,端口定义,P1,比较急:得到几号口,本人是个纯机械的,输出口是P1,我知道相对你们这个是很简单的程序,然后就结束了。本人是机械生,是主要机械那一块的
//h.baidu:///zhidao/pic/item/377adab44aed2e73ecf01a8bd6fa78://h.jpg" esrc="http./zhidao/wh%3D600%2C800/sign=bedd7ebdf03/377adab44aed2e73ecf01a8bd6fa78.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http.hiphotos电路原理图<a href="/zhidao/wh%3D450%2C600/sign=4f109d0c033b5bb5bef90f/377adab44aed2e73ecf01a8bd6fa78
提问者采纳
0-P1;下拉模式
PICTL |= 0X02.5
P0INP &= ~0Xc7;P0_6按下
P0IF = 0;写你要做的事
} else if((P0 & 0X40) == 0X00)/按键配置为输入
P1DIR |=0XC3;使能P0_7;/按键配置为输输出P1;/
P0IF = 0;/&#47。至于中断程序你没有说明中断要怎么做 没有办法给你写;/ /延时函数
if((P0 & 0x80) == 0X00)/P0_7按下 {///中断标志
P0IFG = 0;写你要做的事
P0IFG = 0;下降触发
P0IEN |=0XC7;// &#47。void InitIO(void)///IO口初始化{
P0DIR &=~0Xc7;/////}#pragma vector = P0INT_VECTOR__interrupt void KEY1_ISR(void){
halMcuWaitMs(5),P0_6中断
P0IE = 1;&#47我只能给你写这些了 没有具体的板子和要求书 我也不知道你到底要什么
提问者评价
真心很感谢。这个我已经自己写了一份了。但还是很感谢你。分都给你了。
其他类似问题
您可能关注的推广回答者:
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求一个可以在MPLAB上调试的简单的PIC单片机程序,本人初学者,,只是为了看它是怎么运行的。_百度知道
求一个可以在MPLAB上调试的简单的PIC单片机程序,本人初学者,,只是为了看它是怎么运行的。
希望高手可以多发几个给我,我的邮箱是
万分感谢。
提问者采纳
#include &p16f877A.inc&;****************************************;实现逐个来点亮8个LED灯;*****************************************add
0ffhdelay3
00hmain nop
banksel TRISC可以根据寄存器地址所在的bank来自动生成STATUS的RP1,跟RP0块指令 clrf
TRISC clrf
STATUS返回体0 或 BCF STATUS,RP0
因为add所在的地址是bank0快,所以要返回0块 movlw
STATUS,C置进位标志位为1,因循环移位是带进位循环的(也是带着1来左右移)loop rlf
PORTC,1执行后C自动清0 call
delay decfsz
add,1 goto
main;*************************************************delay movlw
delay1 movwf
delay2 movwf
delay3 movwf
52h decfsz
52h,1 goto
$-1 decf哗矗糕匪蕹睹革色宫姬sz
50h,1 goto
$-9 return end不知道你是要C还是要汇编,不过你说在MPLAB上运行,所以给个流水灯的汇编给你先
提问者评价
其他类似问题
pic单片机的相关知识
其他1条回答
简单的流水灯程序:#include &pic.h&void mms(int ms)
//延时程序;{ for(;ms&0;ms--){for(i=0;i&272;i++){;}}}void main(){ TRISD=0;
PORTD=0X00;for(j=0;哗矗糕匪蕹睹革色宫姬j&7;j++){ PORTD=0X01;
PORTD&&j;mms(1000);if(j==7){j=0; PORTD=0X01;}}}
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求一个电脑与单片机连接的程序!_百度知道
求一个电脑与单片机连接的程序!
我现在想实现这样一个程序:从电脑向单片机发一个信号(例如点击鼠标或敲击键盘),单片机接收到订孩斥绞俪悸筹溪船娄信号后开始计时并显示显示使用一组8个的多段数码管完成。能否帮我写一份源程序?或者告诉我应该怎样写哪些部分的程序,例如电脑信号如何检测,如何发送到单片机上,单片机接收后如何处理等。谢谢!
提问者采纳
这里有2 个部分1是单 片机计数显示。2 是电脑和单片机通信 ,你可用mscomm,比较简单。按鼠标或键盘,送一个指定数据给单片机,订孩斥绞俪悸筹溪船娄单片机收到这个数据就开始计数,收到的不是,就不开始。
其他类似问题
您可能关注的推广回答者:回答者:
单片机的相关知识
其他3条回答
这问题也太简单了吧!请翻阅单片机教材UART通信篇,讲的很清楚。上位机如果你对.net平台熟悉,那就用VS编一个上位机,鼠标啊,键盘啊,都是事件调用,很简单的。如果你完全是一个新手的话,那建议还是用基础的东西学起,找别人要代码这习惯不好。
上位机需要一个软件去扫描鼠标或者键盘的键值。扫描成功后通过串口发送给单片机,自己制定一个协议,单片机收到正确的数据后去驱动数码管显示就可以了。祝成功~
好容易啊,有东西不会的应该自己多查资料。串口通信的……
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁&& 该以51系列为控制中心,比例伺服舵机为执行元件,结合按键操作来控制舵机的转角和转向,控制的实现由程序来完成。
&&& 首先就伺服舵机的工作原理作一简单说明:伺服舵机是一个典型的闭环反馈系统,其原理可由图6表示。
&&& 减速齿轮组由电机驱动,其输出端 带动一个线性的比例电位器作为位置检测,该电位器把转角坐标转换为一比例反馈给控制线路板,控制线路板将其与输入的控制脉冲信号比较,产生纠正脉冲,并驱动电机正向或反向地转动,使齿轮组的输出位置与期望值相符,令纠正脉冲最终趋于为O,从而达到使伺服电机精确定位的目的。伺服舵机的控制端需输入性的正向脉冲信号,这个周期性脉冲信号的高时间通常在1ms-2ms之间,而低电平时间应在5ms到20ms之间,并不很严格。下图表示出一个典型的20ms周期性脉冲的正脉冲宽度与微型伺服舵机的输出臂转动时与输入脉冲的对应关系:
&&& 接下来就可调脉宽的20ms周期性脉冲的产生作一下说明:这里利用了51单片机内部的两个定时/计数器。一个用来产生时间为20ms的定时中断,另一个用来产生时间为50 μ s的定时中断。
&&& 再一个就是按键部分的去抖问题:由于按键的结构为机械弹性开关,在按下和断开操作时,触点在闭合和断开的瞬问会接触不稳定,产生抖动。图8所示,按键的抖动时间一般为5-10ms,会引起CPU对一次键操作进行多次处理。所以要用硬件或软件方法进行消抖,为了节省开支,这里采用了软件消抖的方法。具体的做法就是在判断键有没有闭合时加入延时来避开抖动。为了避免误操作,要使每次按键只进行一次操作,需要对按键有没有释放进行判断,同样引入延时判断环节,保证操作正常。
&&& 控制部分的电路图9所示。&&&&&&& 其中:为12M,使单片机的机器周期为1 μ s;RESET为手动复位按钮,来复位单片机,主要用于将手臂还原回初始状态;J为舵机插槽。
&&& 控制程序如下:(由于页面的限制,将程序分成了三段,输入时应将其依次顺序输入,保证程序完整。)
&&& 通过按键来调整手臂的位置,每按一次按键,相应的舵机正转或反转约5°。
【内容导航】
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670&

我要回帖

更多关于 再一次实现 的文章

 

随机推荐