标题:
51单片机P1^0口led改变状态,产生脉冲,T0计数加一数码管显示,T1定时
[打印本页]
作者:
安暖暖
时间:
2018-11-29 20:37
标题:
51单片机P1^0口led改变状态,产生脉冲,T0计数加一数码管显示,T1定时
51单片机问题求助,P1^0口led改变状态,产生脉冲,T0计数加一数码管显示,T1定时数码管,正常显示不了,改了好几次,不知道哪里错了,求助,谢谢
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0; //用杜邦线连接p1^0和p3^4
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]=(0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f); //0~9
void delay(uint j)
{
uint m,n;
for(m=j;m>0;m--)
for(n=125;n>0;n--);
}
void display(uchar i)
{
uchar bai,shi,ge;
bai=i/100;
shi=i%100/10;
ge=i%10;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[bai];
dula=0;
delay(1);
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
dula=1;
P0=table[shi];
dula=0;
delay(5);
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
dula=1;
P0=table[ge];
dula=0;
delay(5);
}
void t0Init() //
{
TR0=1;
TMOD |=0x05; //实现计数功能
TH0=0;
TL0=0;
}
void t1Init()
{
TR1=1;
TMOD |=0x10;
TH1=0x4b; //定时50ms
TL1=0xfd;
}
void main() //main函数自身会循环
{
uchar mSec; //毫秒和秒储存变量
t0Init() ;
t1Init() ;
TH0=0;
TL0=0;
while(1)
{
if(TF1==1)
{ //判断是否溢出
TF1=0; //软件清零溢出标志位
TH1=0x4b; //定时50ms
TL1=0xfd;
mSec++;
if(mSec==10)
{
mSec=0;
led=~led; //产生方波
}
}
display(TL0);//数码管显示函数
}
}
复制代码
作者:
wulin
时间:
2018-11-30 09:23
你的数组括号用错了,另外动态数码管显示程序也有缺陷,亮度不均匀。给你改了下,你试试。
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0; //用杜邦线连接p1^0和p3^4
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9
/*
void delay(uint j)
{
uint m,n;
for(m=j;m>0;m--)
for(n=125;n>0;n--);
}*/
void display(uchar i)
{
static uchar a=0;
// uchar bai,shi,ge;
// bai=i/100;
// shi=i%100/10;
// ge=i%10;
P0=0x00;
switch(a)
{
case 0:
P0=0xfe;
wela=1;
wela=0;
P0=table[i/100];
dula=1;
dula=0;
a++;
break;
case 1:
P0=0xfd;
wela=1;
wela=0;
P0=table[i%100/10];
dula=1;
dula=0;
a++;
break;
case 2:
P0=0xfb;
wela=1;
wela=0;
P0=table[i%10];
dula=1;
dula=0;
a=0;
break;
}
}
void t0Init() //
{
TMOD |=0x05; //实现计数功能
TH0=0;
TL0=0;
TR0=1;
}
void t1Init()
{
TMOD |=0x10;
TH1 = 0xEC; //定时5ms
TL1 = 0x78;
TR1=1;
}
void main() //main函数自身会循环
{
uchar mSec; //毫秒和秒储存变量
t0Init() ;
t1Init() ;
TH0=0;
TL0=0;
while(1)
{
if(TF1==1)
{ //判断是否溢出
TF1=0; //软件清零溢出标志位
TH1 = 0xEC; //定时5ms
TL1 = 0x78;
mSec++;
if(mSec==100)
{
mSec=0;
led=~led; //产生方波
}
display(TL0);//数码管显示函数
}
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1