[quote=小比尔/5]不好意思,卖弄了。
其实c用好了比汇编简单,汇编老要研究怎么传递参数,c可以直接利用参数来传
比如说
假设有个动态显示的函数(右侧用汇编类比):
void display(unsigned char num); // display: mov p0,a/ ret
一个扫描的函数:
unsigned char scankey(); // scankey: .../ ret
一个延时函数:
void delay(); // delay: mov r2,#xx .../ djnz ... /ret
那么你可以这样:
while(1) // 主程序循环 main:
{
unsigned char i,key;
p2=0x80; // mov p2,#80h
for(i=4;i>0;i--) // 显示循环 for:
{
display(...); // 显示一位 mov a,.../ acall display
key=scankey(); // 扫键 acall scankey/ push acc
delay(); // 延时 acall delay/ pop acc
if(key!=0) key=scankey(); // 键消抖 jz main0/ acall scankey / main0:...
switch(key) // ...
{
case up: addnum();break; // 加1 cjne main1/ acall addnum
case down: ...;break; // ... main1: cjnz main2/ acall ...
case left: ...;break; // ...
case right: ...;break; // ...
case ...
default: break;
}
p2=p2>>1; // 字位码右移 // mov a,p2/ rl a/ mov p2,a
} /* for */ // djnz r5, for
} // ajmp main
整个流程和汇编其实是一样的,这个过程由你自己安排。当然,处理按键的时候,显示扫描就会受到影响。
所以如果要处理和动态显示互不影响,就要把显示放到中断去,当然也可以用移位寄存器搞静态显示,就是硬件会复杂些。
再疯狂一点的,要“同时”处理多个乱七八糟的对时间要求都很高的任务,就要搞实时操作系统rtos了(卖弄了,一般是用不到啦~

)[/quote]
谢谢详细的讲解,明白了.谢谢!!! 并不是您卖弄,是我还有很长的路要走,很多的知识要学呀