单片机试验数码管上如何显示数字
/********************************************************************************标题:试...
/*******************************************************************************
* 标题: 试验数码管上如何显示数字(共阳极) *
* *
* 连接方法:P0 与JP3 用8PIN排线连接 *
********************************************************************************
* *
* 请学员认真消化本例程,用单片机脚直接控制数码管 *
********************************************************************************/
#include <reg51.h>
void delay(unsigned int i); //函数声名
// 此表为 LED 的字模 01 2 3 4 5 6 7 8 9 a b c d e f
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
main()
{
unsigned int LedNumVal ; //定义变量
while(1)
{
// 将字模送到P0口显示
LedNumVal++;
P0 = LED7Code[LedNumVal%16]&0x7f; //LED7 0x7f为小数点 共阴和共阳此处也是不一样;
delay(20000); //调用延时程序
}
}
/*****************************************************************
**
* 延时程序*
**
*****************************************************************/
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--) //循环6000*200次
for(j = 200; j > 0; j--);
}
问题是
while(1)
{
// 将字模送到P0口显示
LedNumVal++;
P0 = LED7Code[LedNumVal%16]&0x7f; 这一段为什么&0x7f 小数点会亮,没&0x7f小数点不会亮?请告诉我原理。 展开
* 标题: 试验数码管上如何显示数字(共阳极) *
* *
* 连接方法:P0 与JP3 用8PIN排线连接 *
********************************************************************************
* *
* 请学员认真消化本例程,用单片机脚直接控制数码管 *
********************************************************************************/
#include <reg51.h>
void delay(unsigned int i); //函数声名
// 此表为 LED 的字模 01 2 3 4 5 6 7 8 9 a b c d e f
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
main()
{
unsigned int LedNumVal ; //定义变量
while(1)
{
// 将字模送到P0口显示
LedNumVal++;
P0 = LED7Code[LedNumVal%16]&0x7f; //LED7 0x7f为小数点 共阴和共阳此处也是不一样;
delay(20000); //调用延时程序
}
}
/*****************************************************************
**
* 延时程序*
**
*****************************************************************/
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--) //循环6000*200次
for(j = 200; j > 0; j--);
}
问题是
while(1)
{
// 将字模送到P0口显示
LedNumVal++;
P0 = LED7Code[LedNumVal%16]&0x7f; 这一段为什么&0x7f 小数点会亮,没&0x7f小数点不会亮?请告诉我原理。 展开
2个回答
展开全部
解决方法:
试验数码管上显示数字( 单片机直接实现位选 共阴极) 。
解决方式:
连接方法:P0与J12 用8PIN排线连接 P1与JP16 用排线连接 。
代码:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=0;y<113;y++)
{
}
}
}
unsigned int code dbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};
unsigned int code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
void main()
{
while(1)
{
P1=dbit[4];
P0=num[9];
}
}
位定义
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=0;y<113;y++)
{
}
}
}
void main()
{
while(1)
{
LSA=0;
LSB=0;
LSC=0;
P0=num[6];
delay(2);
LSA=1;
LSB=0;
LSC=0;
P0=num[6];
delay(2);
}
}
//让八个数码管全部亮并且从0~9循环
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar num;
uchar wnum=0x00;
uchar code dbit[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段选,选择要显示的数字
//uchar code wnum[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//八位数码管
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=0;y<113;y++)
{
}
}
}
void main()
{
P1=wnum;
while(1)
{
for(num=0;num<10;num++)
{
P0=dbit[num];
delay(500);
}
}
}
试验数码管上显示数字( 单片机直接实现位选 共阴极) 。
解决方式:
连接方法:P0与J12 用8PIN排线连接 P1与JP16 用排线连接 。
代码:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=0;y<113;y++)
{
}
}
}
unsigned int code dbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};
unsigned int code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
void main()
{
while(1)
{
P1=dbit[4];
P0=num[9];
}
}
位定义
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=0;y<113;y++)
{
}
}
}
void main()
{
while(1)
{
LSA=0;
LSB=0;
LSC=0;
P0=num[6];
delay(2);
LSA=1;
LSB=0;
LSC=0;
P0=num[6];
delay(2);
}
}
//让八个数码管全部亮并且从0~9循环
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar num;
uchar wnum=0x00;
uchar code dbit[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段选,选择要显示的数字
//uchar code wnum[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//八位数码管
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=0;y<113;y++)
{
}
}
}
void main()
{
P1=wnum;
while(1)
{
for(num=0;num<10;num++)
{
P0=dbit[num];
delay(500);
}
}
}
展开全部
0x7f的8位二进制数是01111111,与字模相与(&)之后会亮,这说明共阳LED数码管小数点属于字模编码的最高位,如果最高位为0小数点则亮。而字模编码的小数点默认都是不亮的。如数字0的字模~0x3F按位取反后的二进制数是11000000,最高位为1小数点不亮,那么11000000与上述01111111相与的结果是01000000,最高位变为0小数点也就亮了。还有:
数字1的字模~0x06按位取反后的二进制数是11111001,最高位为1;
数字2的字模~0x5B按位取反后的二进制数是10100100,最高位为1;
。。。。。。
其它的字模你自己看看最高位都是1。
数字1的字模~0x06按位取反后的二进制数是11111001,最高位为1;
数字2的字模~0x5B按位取反后的二进制数是10100100,最高位为1;
。。。。。。
其它的字模你自己看看最高位都是1。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询