本帖最后由 fengtianzhifeng 于 2012-6-19 13:56 编辑
请问下大家~谁能给我说下
时间片轮转调度算法~举个很简单的例子我的小系统中有4*4的矩阵键盘,有LCD1602,还有ADC转换器。当我只测试LCD1602的时候没什么问题,测试键盘也没有什么问题~测试AD也没有问题,但是只要把这些模块集合到一起就会出问题,单片机的执行周期变的很大,浪费了很多很多时间,单片机就是属于站着等待了,而不是跑着等待,说的通俗点就是系统的实时性变的超级差~请问大家有什么解决的法子
更通俗点就是如何实现多任务
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
额用时间中断对吧~那个键盘检测至少也要20MS的消抖吧~LCD1602显示部分也差不多要10MS左右的吧~那这些如何利用时间中断结合起来呢?
还有对于中断的时间必须要比执行程序的时间要长才可以的啊~这样的话几乎没有起到什么积极的作用呀
lcd用状态机
不要死等较长的时间
额~我写了个小的程序只有矩阵键盘和LCD的您能帮我修改下么?
我LCD就是显示键盘的那个按键按下是第几行第几列
- #include "reg52.h"
- #define ReadData P1
- #define ShowData P2
- sbit RS=P0^0;
- sbit EN=P0^1;
- unsigned char tar=0;
- unsigned char cont=0;
- unsigned char hang=0;
- unsigned char lie=0;
- void delay1ms(unsigned char a)
- {
- unsigned char i=0,j=0;
- for(i=0;i<a;i++)
- for(j=0;j<110;j++)
- ;
- }
- void LCDwriteData(unsigned char com)
- {
- RS=1;
- ShowData=com;
- delay1ms(5);
- EN=1;
- delay1ms(5);
- EN=0;
- }
- void LCDwritecom(unsigned char date)
- {
- RS=0;
- ShowData=date;
- delay1ms(5);
- EN=1;
- delay1ms(5);
- EN=0;
- }
- void LCDinit(void)
- {
- RS=0;
- LCDwritecom(0X38);
- LCDwritecom(0X0C);
- LCDwritecom(0X06);
- LCDwritecom(0X01);
- }
- void keytest(void)
- {
- unsigned char date;
- ReadData=0x0f;
- date=ReadData;
- ReadData=0xf0;
- date=(date|ReadData)^0xff;
- tar=date&(date^cont);
- cont=date;
- }
- void htos(unsigned char hex)
- {
- hang=hex%16;
- lie=hex/16;
- if(hang==1)
- hang='1';
- else if (hang==2)
- hang='2';
- else if(hang==4)
- hang='3';
- else if(hang==8)
- hang='4';
- if(lie==1)
- lie='1';
- else if(lie==2)
- lie='2';
- else if(lie==4)
- lie='3';
- else if(lie==8)
- lie='4';
- }
- void keypro(void)
- {
- if(tar)
- {
- htos(tar);
- LCDwritecom(0x80+0x00);
- LCDwriteData(hang);
- LCDwriteData(lie);
- }
- }
- void main(void)
- {
- LCDinit();
- while(1)
- {
- keytest();
- keypro();
-
- }
- }
复制代码一周热门 更多>