51单片机新手,刚开始学,求大神帮我看看问题出在哪了
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
sbit WEI=P2^7; //数码管位控制脚
sbit DUAN=P2^6; //数码管段控制脚
uchar aa,tt;
void main()
{ WEI=0; //位锁存置0电平,防止LED亮的时候数码管亮
DUAN=0; //段锁存置0电平,防止LED亮的时候数码管亮
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
aa=0xfe;
P0=aa;
while(1)
{
if(tt==20)
tt=0;
aa=_crol_(aa,1);
}
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
第二个也是除了问题
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<intrins.h>
#define uchar unsigned char
sbit WEI=P2^7; //数码管位控制脚
sbit DUAN=P2^6; //数码管段控制脚
uchar aa;
void Delay(unsigned int t); //函数声明
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{ aa=0x7f;
P0=aa;
WEI=0; //位锁存置0电平,防止LED亮的时候数码管亮
DUAN=0; //段锁存置0电平,防止LED亮的时候数码管亮
while(1)
{ Delay(50000);
aa=_crol_(aa,1);
}
}
/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
LED

52单片机

锁存器

自己顶一下自己顶一下自己顶一下自己顶一下
我帮你顶一下,,呵呵
可能你描述有点问题,
第一个程序很明显啊,你只把aa做了运算,但是没有赋值给P0口,肯定不会动啦!你把 if(tt==20)
tt=0;
aa=_crol_(aa,1);P0 = aa;放到中断服务函数里面就好了!
第二个问题是样的问题,没有把aa的值赋给P0口,自然看不到流水灯了!
给你参考一个可以用的程序
************************************************************/
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp>>=1;
}
}
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
你没有对P0口 进行逻辑运算 肯定他的没有电平 输出。
aa=0xfe;
P0=aa;
我不是把aa的值赋给了P0口了么
只有刚开始一瞬间把aa的值赋给了P0口了,之后全在while(1)里循环,循环里没有给P0口啊
主函数里面要给P0口赋值
while(1)里面要赋值,要不然你只是给aa做了处理,还没给P0
貌似有点懂哪里出错了,十分感谢
不是一般的简单
循环左移下面加句
P0=aa;
你让程序进入了while 而你给P0的语句在main里面。都不执行~~~就是刚开机执行一次~~~你说会有反应么~~~~~~~~
恩,已经纠正了 谢谢你的回复
我也试过了 是8个LED都亮,是不是LED适合延时函数 跟中断不协调啊 晕!
