对端口输出操作,直接适用赋值语句即可。 比如 P1 = 0x03;
对端口读取操作,直接赋值给局部变量即可。
对数码管操作,需要先定义 对应的 码表, Tab[16] = {, }分别对应 0~F 的端口输出值、点亮相应的LED位; 然后直接 操作端口输出对应字符即可,比如P1=Tab[3] 数码管输出显示3
依程序来看,你的LCD应该是1602,所以Y不可大于1,除了0就是1,代表只有2行,15则代表16列(0-15)。
while (DData[ListLength]0x19) //若到达字串尾则退出 还有这里为什么不能 〉0x19
这一句的意思是,你传入的字符串结尾以大于0x19来表示字符串的结束,是自定义的.
还有什么问题
那个uCOS-II是利用了宏开关。
例如:
Global.h文件里如下定义:
#ifdef
GLOBAL_VAR
unsigned
char
i_var;
#else
extern
unsigned
char
i_var;
#endif
如果在C文件里包含"Global.h"之前,先进行宏定义
#define
GLOBAL_VAR
#include
"Global.h"
那么,就相当于在
这个C文件里定义了
unsigned
char
i_var;
如果在包含之前,没有定义
GLOBAL_VAR
相当于,在这个C文件里引用了i_var,相当于:
extern
unsigned
char
i_var;
三种可能,
1、如果是多个数码管都很亮的话,是数码管的驱动电流太大,这种情况可串接一个小电阻实现。
2、是显示子程序里面的延时时间太长,一般5MS就够了。
3、也可能是因为你定义int s[4];是局部变量,当这个子程序执行结束后,变量释放,数值是随机的。虽然说单片机的程序的执行速度很快能够弥补这一点,但还是有可能会出问题的。建议把int s[4];定义为全局变量来试试。
不会有大问题的。加油!
我不知道你的整体电路时怎么实现的。你补充的很对,单片机的输出的控制信号应接到锁存器的输入端,锁存器的输出信号应与数码管的控制引脚相连接,这样才有锁存的意义,锁存器的输入输出如果弄反了,肯定不能工作的。如果还不行,建议你先试试把数码管的位选和段选直接接到单片机的IO来试一试,看程序本身有没有问题。程序没问题的话,那就是电路的问题了。
这题目,何时提出的,系统,也不给显示。
现在,解决了吗?
还需要答案吗?
你在设立一个标志位,55和25的时候分别翻转一次,然后你在去判断是什么状态的标志位来确定什么时候翻转。也就是反馈。
51单片机c语言试卷及答案的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:51单片机c语言试卷及答案