
/显示子程序/
void display(unsigned char bai,unsigned char shi,unsigned char ge,unsigned char xs)
{
P3=dispbitcode[0]; P0=dispcode[bai]; //显示佰位
delay(5);
P3=dispbitcode[1]; P0=dispcode[shi]; //显示十位
delay(5);
P3=dispbitcode[2]; P0=dispcode[ge] + 128; //显示个位时加上小数点
delay(5);
P3=dispbitcode[3]; P0=dispcode[xs]; //显示小数位
delay(5);
}
我这里有个上学时候的51程序,选了几行有用的你回去改一下。
int i[10]={0x3f,0x06,0x05b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/数码字模/
void display(int k)
{int b,d[4]={0,0,0,0}; 四个位拆开 暂存缓冲
d[3]=k%10;
d[2]=k/10%10;
d[1]=k/100%10;
d[0]=k/1000; 提取四个位的数
for(b=0;b<4;b++) 疯狂扫描
{P1=0xff;
P2=~i[d[b]];
P1=~(1<<b);
delaya(); 这个延时可能要改,它决定显示的对比度
P1=0xff; 关显示
}
}
void delaya(void) 延时函数,没啥说的。
{int i,j;
for(i=0;i<20;i++)
{for(j=0;j<10;j++);
}
}
int main(void) 主程序,你往里面加点你自己的东西就行了。
{
display(k);
}
这个就是从0000-9999的。
/四个数码管的动态显示/
#include<reg52h>
#define uint unsigned int
#define uchar unsigned char
sbit du = P2^6;
sbit we = P2^7;
uchar code table[] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uint a;
//---------------------------------------------
void delayms(uint xms)
{
uint i, j;
for(i=xms;i>0;i--) for(j=110;j>0;j--);
}
//---------------------------------------------
void disp()
{
we = 1; P0 = 0xf7; we = 0; //锁存开启 个位 锁存关闭
P0 = table[a % 256 % 16]; delayms(5); //输出个位数
we = 1; P0 = 0xff; we = 0; //锁存开启 消隐 锁存关闭
we = 1; P0 = 0xfb; we = 0; //锁存开启 十位 锁存关闭
P0 = table[a % 256 / 16]; delayms(5); //输出十位数
we = 1; P0 = 0xff; we = 0; //锁存开启 消隐 锁存关闭
we = 1; P0 = 0xfd; we = 0; //锁存开启 百位 锁存关闭
P0 = table[a / 256 % 16]; delayms(5); //输出百位数
we = 1; P0 = 0xff; we = 0; //锁存开启 消隐 锁存关闭
we = 1; P0 = 0xfe; we = 0; //锁存开启 千位 锁存关闭
P0 = table[a / 256 / 16]; delayms(5); //输出千位数
we = 1; P0 = 0xff; we = 0; //锁存开启 消隐 锁存关闭
}
//---------------------------------------------
void main()
{
char i;
a = 0;
while(1) {
for (i = 0; i < 20; i++) disp();
a++;
}
}
//---------------------------------------------
上述的《千百十个》四个位,实际上,显示的是16进制数。
程序,是借用了楼主的《单个显示程序》,但是,和楼主的电路,并不配套。
楼主的电路,并没有锁存器。
而程序中,却是使用锁存器的编程思路。
未必好用,试试看吧。
程序如下,看不懂的话,追问一下就好了。
#include<reg52h>
//unsigned char code liushideng[]=(0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f); /led灯共阳型 /
unsigned char shumaguan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; /共阳型数码管 /
unsigned char i=0;
sbit p20=P2^0; //数码管位控制端
sbit p21=P2^1; //数码管位控制端
sbit p22=P2^2; //数码管位控制端
sbit p23=P2^3; //数码管位控制端
void yanshi() //延时函数
{
unsigned int x,y;
for(x=0;x<10;x++)
for(y=0;y<20;y++) ;
}
void smgxs(void) //数码管显示函数
{ p20=1; //开通位1
P0=shumaguan[1]; //赋值
yanshi(); //延时
p20=0; //关闭位1
p21=1; //开通位2
P0=shumaguan[2]; //赋值
yanshi(); //延时
p21=0; //关闭位2
p22=1; //开通位3
P0=shumaguan[3]; //赋值
yanshi(); //延时
p22=0; //开通位3
p23=1; //开通位4
P0=shumaguan[4]; //赋值
yanshi(); //延时
P2=0XF0; //关闭所有位
}
void main() /主函数/
{
while(1) //防止程序跑飞
{
smgxs(); //数码管显示
}
}
动态显示的是有固定格式的,赋值,开显示,延时,关显示,假设p0口接数据显示位,p2口低4位接片选,
p2=tab[1];
//赋值
p3_0=0;
//开第一位显示
for(i=0;i<200:i++);//延时
p3_0=1;
//关第一位显示
p2=tab[2];
p3_1=0;
//开第二位显示
for(i=0;i<200:i++);
p3_1=1;
这个程序就是让两个数码管分别显示1和2,注意程序开头包含头文件regx52h,如果是包含reg52h编译不了的
以上就是关于4位7段数码管显示123.4的程序怎么写求大神帮助!!急!!全部的内容,包括:4位7段数码管显示123.4的程序怎么写求大神帮助!!急!!、跪求~四位数码管计数显示程序~~急用~~!!!、单片机实现4位一体数码管显示0000—FFFF的16进制(C语言编程)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)