不错的文章,要是有文件版就好了 看了一些内容,觉得很好,继续看下去,努力完善自己的梦。 thanks for share this information 追贴到底,一直在路上! 还可以吧! 支持楼主,好样的 本帖最后由 牛东 于 2014-9-26 13:21 编辑
楼主能帮我看看,为什么TIME_PER_SEC设成200数码管显示跟不上,差很远!!一闪一闪,要设成2000才勉强不闪!!
#include "REG52.H"
#define MAX_TASK 4 //定义任务数量
#define CLOCK 11059200 //定义时钟晶振,单位Hz
#define TIME_PER_SEC 2000//定义任务时钟频率200Hz
void main()
{
Timer0Init();
initial_myself();
delay_long(100);
initial_peripheral();
EA = 1;
while(1)
{
if(task_delay==0) {display_drive(); task_delay = 1;} //按键服务程序5HZ
if(task_delay==0) {display_service(); task_delay = 20;} //显示服务程序5HZ
if(task_delay==0) {key_service();; task_delay = 1;}//显示驱动程序 10HZ
if(task_delay==0) {beep_service(); task_delay = 40;} //蜂鸣器服务程序20HZ
}
}
/******************************
T0初始化
******************************/
void Timer0Init(void)
{
unsigned char i;
for(i=0;i<MAX_TASK;i++) task_delay=0; //任务延时量清零
TMOD = (TMOD & 0XF0) | 0X01; //定时器 0 工作在模式 1, 16Bit定时器模式
TH0 =255-CLOCK/TIME_PER_SEC/12/256;//0xed (0xedff=60927大概5MS中断一次)
TL0 =255-CLOCK/TIME_PER_SEC/12%256;//0xff
//(11.0592MHz晶振 机器周期 1.085us,5000us则4608个机器周期,一个机器周期T0=10.085us计数一次,65535-4068=60927=0xedff)
TR0= 1 ;
ET0= 1 ;
}
/******************************
T0中断服务程序
******************************/
void Time0Isr(void) interrupt 1
{
unsigned char i;
TH0 =255-CLOCK/TIME_PER_SEC/12/256;//0xed (0xedff=60927大概5MS中断一次)
TL0 =255-CLOCK/TIME_PER_SEC/12%256;//0xff
//(11.0592MHz晶振(0.094us 震荡周期) 机器周期 1.085us, 延时5000us则4608个机器周期,一个机器周期T0计数一次,计数初值=65535-4068=60927=0xedff)
for(i=0;i<MAX_TASK;i++) if(task_delay) task_delay--;//每节拍对任务延时变量减1 ,减至 0 后,任务就绪。
ucKeyTimeFlag1=1; // 按键1消抖计数标志置1
ucKeyTimeFlag2=1; // 按键2消抖计数标志置1
ucKeyTimeFlag3=1; // 按键3消抖计数标志置1
ucKeyTimeFlag4=1; // 按键4消抖计数标志置1
ucTimeFlag=1; //倒计时的时钟中断标志置1
ucDpyTimeFlag=1;//数码管的闪烁计时中断标志置1
ucVoiceFlag=1;//蜂鸣器鸣叫计数时钟中断标志置1
}
/******************************
蜂鸣器服务程序
******************************/
void beep_service()
{
if(ucVoiceFlag==1)
{
ucVoiceFlag=0;
if(uiVoiceCnt==0)
{
uiVoiceCnt--; //每次进入定时中断都自减1,直到等于零为止。才停止鸣叫
beep_dr=1;//蜂鸣器是PNP三极管控制,低电平就开始鸣叫。
}
else
{
beep_dr=0;//蜂鸣器是PNP三极管控制,高电平就停止鸣叫。
}
}
}
带了好几个大学生,第一个给他们看的入门教程都是楼主这个帖子 好多 顶 lz好人,喜欢逛坛子就是因为坛子里有lz这种好人。 追贴到底 巨著啊初学者学习的模板 强烈支持 好贴,表示严重支持,文化低,看那英文语句有点吃力,不知大家有什么好的方法 楼主写得好,喝彩。 谢谢你的分享 mark一下。。。。 谢谢............{:tongue:} 技巧很重要{:lol:}{:lol:} 学习了!!! 感觉好强大的帖子,学习了 学习了,很好 MARK! mark收藏学习之 此文不顶,对不起我单片机初学者的身份,我们还应该把这个帖子,多告诉一些单片机的初学者,希望大家能相互告诉初学者们 {:smile:}{:smile:}{:smile:}{:smile:} 新人学习,谢谢楼主!{:smile:} 很不错,,,,,,,,,,,,,,,,,, 支持!!!!! 这个以前看过,不错 step by step 都是瓶颈期的苦窑里待好久了! 大赞楼主啦,谢谢分享! 帖子很经典,每过一段时间就会被顶起来 学习学习,不错 模块化程序编译遇到问题了,来学习学习。谢谢楼主。 多谢分享。 感谢楼主!这个真的是良心教程!阿莫论坛真没白注册啊! 非常有用! 从单片机初学者迈向单片机工程师 帖子记号。楼主辛苦了! mark 支持一下 @红金龙吸味,期待你的继续更新 很好,顶一个 是个好贴子,记号慢慢看 谢谢分享,mark 支持!!! 写的不错 不错!!!! 感谢分享! 顶楼主一下 想想自己的51 也是刚刚入门,未来的路很漫长 写的很好,支持! 菜鸟表示很犀利,赞 感谢楼主的分享,大力支持!正好在学习中 开篇说的不错,可内容仍是面向初学者呀 精华在第二页141楼 tangwei039 发表于 2010-4-23 08:17
今天讲个技巧方面的知识:
...
整形好说,浮点数也右移吗?再说0.0625作为一个常数,引用的时候或乘或除,都在具体引用的地方来个右移或左移,那移植起来就头大了。 马克下{:smile:}{:smile:}{:smile:}{:smile:}{:smile:} 学习 支持。。学习了。。其实走弯路未尝不是一件好事。。在弯路中得到的摸索出的经验对自己来说比别人教的捷径会价值更大。。 谢谢楼主分享这么多,加油!! 楼主厉害,小生从学STM32开始的,但楼主的思想太有益处了,望楼主能多帮助我们 楼主这样的必须支持,顺带来学习下。 楼主说的非常好期待更新 楼主辛苦了! 看完了帖子我就成高手了。。。 学习!!!!!!!!!!! 获益匪浅!谢谢! mark!!!!!!!!!! 收藏一下,,明天继续看
RE: 从单片机初学者迈向单片机工程师(一份正真的让你成...
tangwei039 发表于 2010-4-25 13:39发一个51单片机的键盘扫描程序,算法简单有效
再给大家分享一个不 ...
你好楼主,我正在按你的贴子学习,遇到一个问题。数码管是共阴极的“temp = ( 0x01<< dat ) ; //根据要选通的位计算出位码”这部分内容的0x01改为了0xfe后有重影现象,应该是左移后0跟进了。有什么办法解决? 值得一看,多谢分享 不用回答了,已经调通了。用_crol_(0xfe,data). 顺便说一下,谢谢,太好了。 支持,写的够好,够详细,楼主期待更新 谢谢分享。。 很实用,要是以word的形式可以下载下来慢慢学习就更好了。 好帖子啊,学习学习 楼主,怎么不更新了呀 顶一下楼主 写的真好 楼主整理整理可以编本了 入门福利啊,多谢。 挺好的……值得学习…… 很好,顶一个{:smile:} 写的很不错 值得初学者学习{:shy:} 我觉得发这样连载的帖子,可以先写好,一次性上传。否则,想这样,最后没有最后了,会扯淡的! 之前自己写了个时钟程序 感觉还行 看了这个后 感觉自己的CPU好多都浪费了 谢谢大神指点 感谢楼主的分享! MARK..精髓。。 学习了
哎,,,学单片机3年了。,走了很多弯路,后悔现在才看到你的帖子 学习,学习 写的很不错,受益匪浅,支持下{:smile:} {:handshake:} 感谢楼主,好人啊 很好的东西,学习了 很好的帖子,漫漫看。 艾玛,老有规范了 很好,希望多多写这样的帖子。 艾玛,终于看完了,翻了好久终于没有新的了