|
之前把数码管和按键都放在中断里面处理,是这样写的:http://www.amobbs.com/thread-5501382-1-1.html,因为PROTERU的原因,我一度怀疑程序在哪里出了错误呢 ,现在我把数码管刷新和按键处理都放在主程序里面,在中断里面设置标志位,主程序中判断以后选择性的执行这两个函数,想请教下达人,这是不是就是所谓的“任务调度”?如果是,那么这种方式比较好处理,因为程序执行的间隔时间都是固定的,但对于有些交互式外设,如AD,DA,LCD,必须从对方读取数据,时间间隔是离散的,应该怎样安排任务? 以上请教!
附本次程序和仿真图(仿真是看不到效果的,但通过硬件测试)- #include <reg51.h>
- #define uchar unsigned char
- uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- uchar shu=85,count;
- bit flag;
- sbit kb=P3^4;
- void sumaguan()
- {
- static uchar i=0;
- i++;
- P0=0XFF;
- P2=~(1<<(i-1));
- if(i<3)
- P0=0XC0;
- else if(i==3)
- P0=tab[shu/10];
- else if(i==4)
- {
- P0=tab[shu%10];
- i=0;
- }
- }
- void anjianchuli()
- {
- static uchar zhuangtai=0;
- switch(zhuangtai)
- {
- case 0:
- {
- if(kb==0)
- zhuangtai++;
- };break;
- case 1:
- {
- if(kb==0)
- zhuangtai++;
- else
- zhuangtai--;
- };break;
- case 2:
- {
- if(kb==0)
- {
- zhuangtai++;
- shu++;
- if(shu==100)
- shu=0;
- }
- else
- zhuangtai--;
- };break;
- case 3:
- {
- if(kb==1)
- zhuangtai=0;
- };break;
- }
- }
- main()
- {
- TMOD = 0x01;
- TH0 = 0x0E8;
- TL0 = 0x90;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- while(1)
- {
- if(flag==1)
- {
- flag=0;
- sumaguan();
- }
- if(count>=3)
- {
- anjianchuli();
- count=0;
- }
- }
-
- }
- void timer0() interrupt 1
- {
- flag=1;
- count++;
- TH0 = 0x0E8;
- TL0 = 0x90;
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|