为甚麽灯点不亮呢
sbit x1=P0^0;
sbit x2=P0^1;
sbit x3=P0^2;
sbit x4=P0^3;
sbit y1=P2^4;
sbit y2=P2^5;
sbit y3=P2^6;
sbit y4=P2^7;
void delay2ms()
{
uchar i;
TMOD=0x10;
for(i=0;i<8;i++)
{ TH1=256-250;
TL1=256-250;
TR1=1;
while(!TF1)
TF1=0;
}
}
void main()
{
x1=0x04;
y1=0xaf;
delay2ms();
x2=0x0f;
y2=0x1f;
delay2ms();
x3=0x04;
y3=0xaf;
delay2ms();
x4=0x0b;
y4=0xaf;
delay2ms();
仿真图
仿真图

那些x,y都是1位
你用的是位定义,直接负高低电平就行了!
路过,看看,看看
#include<reg52.h>
#define uchar unsigned char
sbit x=P0;
sbit y=P2;
void delay2ms()
{
uchar i;
TMOD=0x10;
for(i=0;i<8;i++)
{ TH1=256-250;
TL1=256-250;
TR1=1;
while(!TF1)
TF1=0;
}
}
void main()
{
x=0x00;
y=0xff;
x=0x04;
y=0xaf;
delay2ms();
x=0x0f;
y=0x1f;
delay2ms();
x=0x04;
y=0xaf;
delay2ms();
x=0x0b;
y=0xaf;
delay2ms();
}
仿真图

为神魔还是不行
呵呵,不好意思,我刚在学习,具体怎么赋值呢
简单的延时就不需要定时器了吧,况且你那定时器总中断EA都没开
不需要写吧,我们书上都没有,我觉得他就是计满溢出吧,到底是怎样的,能不能具体帮我分析一下呢,非常感谢
还在学习中。起步阶段...
我编译通过了,没有仿真,我改了两条语句,注意查看注释
- #include<reg52.h>
- #define uchar unsigned char
- sbit x1=P0^0;
- sbit x2=P0^1;
- sbit x3=P0^2;
- sbit x4=P0^3;
- sbit y1=P2^4;
- sbit y2=P2^5;
- sbit y3=P2^6;
- sbit y4=P2^7;
- void delay2ms()
- {
- uchar i;
- TMOD=0x10;
- for(i=0;i<8;i++)
- {
- TH1=256-250;
- TL1=256-250;
- TR1=1;
- while(!TF1); //少了一个分号。通过while语句不断检测定时器是否溢出,一旦溢出执行下一跳语句
- TF1=0;
- }
- }
- void main()
- {
- x1=1;
- y1=0; //x1,y1已经是一位数据了,赋值时只需赋1或0就可以了。
- delay2ms();
- x2=0;
- y2=1;
- delay2ms();
- x3=1;
- y3=0;
- delay2ms();
- x4=0;
- y4=1;
- delay2ms();
- }
LED灯不用连接上拉电阻? 还有 控制LED等亮灭的赋值方法就是送1或者0
楼上的编程提示就很好啊,你再试试。加油
我刚试了,灯真的亮点,可是我想做的是通过led点阵显示一个“大”字,用位定义好像有点难
4*4能出现大字吗
呵呵,显示个类似字形
你定义的 xy都是 位定义 你却用0x04这类的 这一下就是八位 你确定编译能过?
使用IO口不用位定义,直接负值就行了啊!如:P0=0xaa;
