
>
void main()
{
TMOD=0x20;//设置定时器1为工作方式2
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
//REN=1;
//SM0=0;
//SM1=1;
EA=1;
ES=1;
……
太模糊了。问题可能是硬件,也有可能是软件,不过既然能显示,硬件可能是好的。至于那个为位选,是跟硬件有关,你看原理图对应起来。你可以先把一个变量赋值 char a=123;在显示出来,排除是ADC电路采集的问题
我首先声明我没看完郭天祥的视频,不过我可以告诉你
puts(“turn on ad!”);这句是让串口输出“turn on ad!”的,puts这个函数和c++中的cout差不多
TI=1,这个我不知道为什么,清除之前的中断?没必要吧,因为每次退出中断都会清除这一位的。
while(!TI);TI = 0;这两句的意思很简单,等待串口输出数据完成呗,当串口把数据都传输完成之后,硬件是自动置位TI中断位,用于通知CPU串口传输完成。
然后TI=0是软件清除TI位,不然下次串口传输就无法继续下去。
以上理解仅代表我个人,在此不评论郭天祥
根据你第一个led程序可以看出,led点亮的条件是led=0,至于你后面的第二个程序,其实(10101010)的最低位,也就是最右边的0,是对应(亮灭亮灭亮灭亮灭)的第一个状态的,也就是亮(最左边状态),没有错,第三个程序同理
还有,关于0点亮灯还是1点亮,这和电路板设计有关,LED灯两个引脚(假设为+、-),当电路设计时+引脚接5V,-引脚接单片机I/O口,则led=0为点亮;若当+引脚接I/O口,-引脚接地,则led=1点亮,
你好:
我刚刚用定义蜂鸣器的方式测试了一下,在屏蔽掉TI和ES之后,在printf之前写beep=0,蜂鸣器能响,但是我吧beep放在printf之后,蜂鸣器不响了。
这时因为在C51中调用printf函数,printf函数进而会调用putchar(),这就是关键所在,putchar会触发中断,所以要关闭串口中断ES,且如果不置位TI,从反汇编代码来看C:0521 JNB TI,C:0521,PC指针会一直在此判断TI,所以形成了死循环,而加上TI=1,PC判断就会跳过,所以printf函数就能正常工作了。
再说,屏蔽掉ES和TI后,刚下载程序时串口还有数据,所以屏蔽之后下载进单片机第一次就触发了中断,进入功能函数,又是调用puts之类的函数导致死循环,而复位后串口已没了数据,所以就能看似的正常工作,但只要一接收数据又是同样的死循环。
希望我的回答能帮助到你。
哈哈,选我吧!我们知道1602地址分布如下:
第一行00H27H
第二行40H67H
显示地址为:
第一行:00H0FH
第二行:40H4FH
现在看看程序,第一个循环写入地址从10H开始,那么写完后abcde67890123456789012345abcde对应的地址为10H45H,落在显示区域的地址为40H~45H,对应的字符为5abcde,所以第二行左侧显示这些。之后进入第二个循环
写入地址从50H开始,类似上面的推论,溢出后将有一部分落进第一行的显示区域对应ABCDE
之后就是命令18,这是个屏移动命令,就是将隐含地址的内容移到显示区域显示。
这就是你看到的现象。
以上就是关于哪里可以找到郭天祥单片机视频教程中所涉及的全部程序全部的内容,包括:哪里可以找到郭天祥单片机视频教程中所涉及的全部程序、急啊,各位大侠帮忙啊,今天在调试郭天祥的十天学会单片机视频中的程序,最后有一个可以向单片机输入数据、单片机 我用的郭天祥的TX 1C,写AD程序,就是通过螺丝刀拧电位器改变电压 作为AD输入端 VI等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)