玩的51系列对吧? 你现在估计才刚开始接触单片机.记住一个重点,重中之重:不要用delay_延时.不要用delay_延时.不要用delay_延时.
现在给你一个思路,你可以做下参考.
void main (void)
{
POWER_INITIAL(); //单片机初始化:IO口输出输入定义;上下拉设置;IO口初始电平;单片机晶振频率选择,晶振频率根据需要选
//合适的频率.选好之后后面需要用到的都是在选的频率之上计算
TIME0_INITIAL(); //定时器初始化设置.这个开中断,设置4MS一次定时中断.后面所有的计数都是在4MS以上进行计算的
//比如你要延时1秒,直接用变量累加,累加到250次的时候执行你延时1秒之后的程序,没有累加到1S的时候
//可以执行其它程序,因为delay延时程序是在哪里空跑,其它的程序跑不了,用变量延时,可以跑其它的程序,
//比如我按键还没有到的时候我可以执行灯里面的程序.
TIME1_INITIAL(); //模拟蜂鸣器的定时4K的频率,125US进一次中断,进一次翻转一直蜂鸣器电平,组成一个250US,4K频率的蜂
//鸣器方波
WTD_INITAL(); //看门狗初始化 ,这个我不知道C51系列用到没有但是前面的肯定是用到了
//开T0 定时器中断 //这个我没有玩过C51不知道那一段代码
//开T1 定时器中断 //
//开总中断.
while(1)
{
if(F_4MS)
{
F_4MS=0;
//清看门狗程序 //这一段代码是清看门狗的,防止看门狗复位
//////////////////////// //下面是所有程序的子函数,你把子函数模块写好嵌套进去就可以了
KEY_SCAN(); //按键扫描
LED_DISPLAY(); //指示灯
PWM_OUT(); //马达输出
}
}
}
因为我不是写C51的.但是我写的都是51内核的.和它差距不大.所以整体上是一个思路.这是出来工作后的思路, 你的那个思路学习可以.但是想要学习好,学习精,你那个思路要把不好的去掉. 因为我没有玩过51,我只看了它的教程,所以不知道定时器怎么配,下面是中断函数处理:
void interrupt(void)
{
//T0中断处理
//这个T0主程序定时的到了之后把4_4MS这个标志位置1;下面while(1)哪里就是靠这个标志位来进入主程序里面的子程序模块
F_4MS=1;
//T2处理 模拟蜂鸣器的
//51的我不知道到了之后有没有标志位什么的,你只需要把下面这个放到T2中断里面去就可以了
if(F_BELL_WORK)
{
P_BELL=!P_BELL;
}
}
void TIME0_INITIAL(void)
{
//操作T0定时器中断的寄存器,让它定时为4MS进一次中断
}
void TIME2_INITIAL(void);
{
//操作T2定时器中断的寄存器,让它定时为125US进一次中断
}
可能写的有点乱. 但是我想这个你应该能看懂 |