请教一个51单片机关于中断的问题

[复制链接]
2531|11
 楼主| hellozj 发表于 2009-1-23 16:23 | 显示全部楼层 |阅读模式
代码如下:<br />/********<br />2009-1-23<br />采用中断方式<br />Chow<br />********/<br />#include&ltreg52.h&gt<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char;<br /><br />uchar&nbsp;code&nbsp;tab_lcd[]={<br />0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,<br />0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,<br />0x86,0x8e,0x89,0xc1,0xf1,0xc8,0x7f,<br />};//共阳LCD&nbsp;数字表:0--f<br /><br />uchar&nbsp;code&nbsp;tab_dx[8]={<br />0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe<br />};//LCD段选开关<br />unsigned&nbsp;int&nbsp;i,j;<br />sbit&nbsp;d1&nbsp;=&nbsp;P1^1;<br /><br />void&nbsp;delay(unsigned&nbsp;int&nbsp;z)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&ltz;&nbsp;i++);<br />}<br /><br />void&nbsp;exter0()&nbsp;interrupt&nbsp;0//中断0<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;d1&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;<br /><br />int&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;EA&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;EX0&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;&nbsp;j&lt16;&nbsp;j++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2&nbsp;=&nbsp;tab_dx[j%8];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0&nbsp;=&nbsp;tab_lcd[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(50000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d1&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />程序启动后,<br />我将P3.2口即int0&nbsp;于&nbsp;Gnd&nbsp;用杜邦线连接,lcd并没有中断停止,而是比原来显示速度慢了许多,拔去后恢复正常。<br /><br />请问lcd为何没有停止,而是变慢了?
NE5532 发表于 2009-1-23 21:51 | 显示全部楼层

没看懂

杜邦线&nbsp;是什么<br />你想让中断怎么样做,想实现什么功能?
 楼主| hellozj 发表于 2009-1-23 22:12 | 显示全部楼层

~

杜邦线就是导线啊,我看郭天翔的视频里面学着写的程序。<br />我是想给中断0一个低电平,然后让LCD数码管停止,但是实际上不能停止,计数的速度变慢,很奇怪
NE5532 发表于 2009-1-24 11:30 | 显示全部楼层

同学,务实一点,刚入门要踏实。

新奇名词不能帮你解决问题,跳线就是跳线。<br /><br />你的中断程序里并没有让闪烁停下来的语句。<br /><br />d1&nbsp;=&nbsp;0;<br /><br />在外面对d1判断了吗?没有!<br /><br />你的主程序应该这样写:<br /><br />while(d1==1)<br />{<br />&nbsp;&nbsp;for(j=0;&nbsp;j&lt16;&nbsp;j++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;P2&nbsp;=&nbsp;tab_dx[j%8];<br />&nbsp;&nbsp;&nbsp;P0&nbsp;=&nbsp;tab_lcd[j];<br />&nbsp;&nbsp;&nbsp;delay(50000);<br />&nbsp;&nbsp;}<br />}<br />while(1);
lifufeng 发表于 2009-1-25 14:07 | 显示全部楼层

楼上说得正是啊,那个d

  
lifufeng 发表于 2009-1-25 14:08 | 显示全部楼层

那个

  
lifufeng 发表于 2009-1-25 14:15 | 显示全部楼层

哎,总是按回车键就回复了

sbit&nbsp;d1&nbsp;=&nbsp;P1^1;<br />定义这个d1有什么用啊?
 楼主| hellozj 发表于 2009-1-27 01:05 | 显示全部楼层

~

没用&nbsp;,就是看看有没有停止了。<br /><br />我指的是lcd数码管为什么没有停止,不是发光二极管这个东西为什么没有停,这个好像跟d1没有关系
NE5532 发表于 2009-1-27 12:02 | 显示全部楼层

请告诉我,你哪一句语句是让循环停下来的?

  
hotpower 发表于 2009-1-27 14:39 | 显示全部楼层

数字不变就表示停止

  
 楼主| hellozj 发表于 2009-1-30 23:13 | 显示全部楼层

.

void&nbsp;exter0()&nbsp;interrupt&nbsp;0//中断0<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;d1&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;<br /><br />这个不是通过外部让他停止么
NE5532 发表于 2009-1-31 12:07 | 显示全部楼层

无语了,画流程图,新手不要跳步骤。

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

24

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部