请教单片机控制数码管显示数字C语言程序问题,满意加分

请教单片机控制数码管显示数字C语言程序问题,满意加分,第1张

if(8==j) j=0;

错在这里改if(j==8){j=0;}还有就是你的程序也有问题,程序运行时P0=0x01的情况不会出现,因为P0=0x01<<(j++);后进入switch的P0只会从0x02开始~粗心了吧~还有就是你用的什么数码管?不是用的那种共阳、共阴8位数据端的数码管?是8421那种?下面修改后的程序(数码管采用的是共阳的数码管)#include <reg51h>#define uchar unsigned charuchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

main()

{

int i;

char j=0;

while(1)

{

switch(P0)

{

case 0x01: P2=led[0];break;

case 0x04: P2=led[1];break;

case 0x02: P2=led[2];;break;

case 0x08: P2=led[3];;break;

case 0x10: P2=led[4];;break;

case 0x40: P2=led[5];;break;

case 0x20: P2=led[6];;break;

case 0x80: P2=led[7];;break;

}

for(i=0;i<10000;i++);//延时时间随意写的

if(j<7) {j++;P0=0x01<<j;}else{P0=0x01;j=0;}

}

}

如果还有问题~就留给邮箱~我发仿真和程序给你~上面的程序是随手打的~可能有错哈~不过思路是对的~

#include<reg52h>

//52系列单片机头文件

#define

uchar

unsigned

char

//宏定义

#define

uint

unsigned

int

sbit

dula=P2^6;

//申明u1锁存器的锁存端

sbit

wela=P2^7;

//

u2

uchar

num1,num2;

uchar

code

table[]={

//数组定义

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar

code

aable[]={

//位选数组定义

0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

void

delays(uint);

//子函数申明

void

main()

{

while(1)

{

for(num1=0;num1<48;num1++)

//6个数循环显示

{

wela=1;

//打开u2锁存端

P0=aable[num1%6];

//送入位选信号

wela=0;

//关闭u2锁存端

//

delays(1);

dula=1;

//打开u1锁存端

P0=table[num1%16];

//送入段选信号

dula=0;

//关闭u1锁存端

delays(1);

}

}

}

/---------主函数-----------------------------------------------/

void

delays(uint

xs)

{

uint

i,j,k;

for(i=xs;i>0;i--)

for(j=1000;j>0;j--)

for(k=110;k>0;k--);

}

/----------------延时程序-----------------------------------------------/

以下是使用51单片机(如STC89C52)和4个开关来控制数码管显示一位密码的简单示例代码。假设使用的是共阴数码管,并且数码管的引脚连接到了单片机的P0口。

#include <reg52h> // 引入单片机寄存器定义头文件// 数码管显示的密码模式,共16种,每种模式使用4位二进制表示unsigned char password[16] = { 0x3F, // 0b00111111, 模式0

0x06, // 0b00000110, 模式1

0x5B, // 0b01011011, 模式2

0x4F, // 0b01001111, 模式3

0x66, // 0b01100110, 模式4

0x6D, // 0b01101101, 模式5

0x7D, // 0b01111101, 模式6

0x07, // 0b00000111, 模式7

0x7F, // 0b01111111, 模式8

0x6F, // 0b01101111, 模式9

0x77, // 0b01110111, 模式10

0x7C, // 0b01111100, 模式11

0x39, // 0b00111001, 模式12

0x5E, // 0b01011110, 模式13

0x79, // 0b01111001, 模式14

0x71 // 0b01110001, 模式15};void main() { unsigned char i = 0; // 密码模式的索引

while (1) { // 读取四个开关的状态,每个开关对应一个二进制位

unsigned char switchValue = (P1 & 0x0F); // 根据开关状态选择密码模式

i = switchValue; // 设置数码管显示的密码模式

P0 = password[i]; // 简单延时

for (unsigned int j = 0; j < 1000; j++);

}

}

以上代码通过读取四个开关(连接到P1口的低4位)的状态来选择密码模式,并将选择的密码模式通过P0口设置到数码管上显示。

#include<reg52h>

#define

uchar

unsigned

char

#define

uint

unsigned

int

uchar

count;

uint

disnum;

sbit

dula=P2^6;

sbit

wela=P2^7;

uchar

code

tabledu[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

display(uchar,uchar,uchar);

delay(uchar);

void

main()

{

EA=1;

ET1=1;

TMOD=0x10;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

TR1=1;

while(1)

{

if(count==20)

{

count=0;

//

if(disnum==1000)

//

disnum=0;

disnum++;

}

display(disnum/100,disnum%100/10,disnum%100%10);

}

}

void

tim1()

interrupt

3

using

3

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

count++;

}

display(uchar

bai,uchar

shi,uchar

ge)

{

P0=tabledu[bai];

dula=1;

dula=0;

P0=0xfe;

wela=1;

wela=0;

delay(1);

P0=tabledu[shi];

dula=1;

dula=0;

P0=0xfd;

wela=1;

wela=0;

delay(1);

P0=tabledu[ge];

dula=1;

dula=0;

P0=0xfb;

wela=1;

wela=0;

delay(1);

}

delay(uchar

x)

{

uchar

a,b;

for(a=x;a>0;a--)

for(b=255;b>0;b--);

}

//你自己看一下,有不对的就改点别忘了给分啊

以上就是关于请教单片机控制数码管显示数字C语言程序问题,满意加分全部的内容,包括:请教单片机控制数码管显示数字C语言程序问题,满意加分、51单片机数码管显示程序、51单片机,利用0和1两个数字组成16种模式,并用四个开关控制数码显示一位密码求程序设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9279405.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存