主要显示出来的框架会写,目前只会写1234567,就是不知道该怎么让我想要的数字显示出来~求解!谢谢!
下面程序显示1572942动态显示,[]这个或号里填什么数字,就会在数码管上显示什么数,程序太长,数字有限,私信给你了。
#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint);
void main()
{
while(1)
{
dula=1;
P0=table[1];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(500);
dula=1;
P0=table[5];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(500);
dula=1;
P0=table[7];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delayms(500);
dula=1;
P0=table[2];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(500);
dula=1;
P0=table[9];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delayms(500);
dula=1;
P0=table[4];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;//
wela=0;
delayms(500);
dula=1;
P0=table[2];
dula=0;
P0=0xff;
wela=1;
P0=0xBF;
wela=0;
delayms(500);
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--) ;
}
谢谢你!请问在我这个基础上该怎么改动啊?目前学的很浅,没有看懂你写的部分内容
sbit dula=P2Λ6//申明U1锁存器的锁存端sbit dula=P2Λ7/申明U2锁存器的锁存端P0=table[1]//送段选数据 dula=1打开U1锁存器dula=0//关闭U1锁存器
P0=0xff//送位选数据前关闭所有显示,防止打开位选锁存器wela=1原来段选数据通过位选锁存器造成混乱P0=0xfe送位选数据,delayms(500)廷时
wela=1打开U2锁存端wela=0关闭……
proteus仿真一下,就了解了
搞错了是申明U2U3锁存器
你要改动话([]里的1572942)改成1234567就行了
追问好的谢谢你…让我看看
本回答被网友采纳请问我该怎么修改呢?这个是从左到右显示1234567的,怎么写才能从左到右显示我想要的七个数呢?
SWITCH语句即是控制显示哪一位
P0=smgduan[i]就是要显示的内容,由于你把显示的位数和显示的内容固定死了,因此只能显示固定的数字 且0 和9就 无法显示
改成P0=smgduan[ a[i] ]
a[i]是个数组,存的是你从变量里分离出来的个十 百千 万,成员数量不多于8个,因你只有8 个数码管,这个数组里的每一个成员数值范围都在0到9之间
所以smgduan[ ]这个数组至少有10个元素,存0到9这10个数字的段码,而不仅仅是0到7或1到8
则开始不会写动态扫描程序,先用笨办法,让某一数码管亮或某2个数码管亮,显示出你想要的内容,而不是直接来个FOR循环,看起来很简洁,却限制了你的想像
请问keil4里数组该怎么定义啊?该怎么编写?可不可以麻烦你具体写一下
追答uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f};//共阴七段码表
void display(uint num )// 5位显示程序 uint型数据最大65535
{
uchar a0,a1,a2,a3,a4;
a0=num/1000;//万位
a1=num/1000%10;//千位
a2=num/100%10;//百位
a3=num/10%10;//十位
a4=num%10;//个位
LSA=1;LSB=1;LSC=1;
P0=table[a0];//显示万位
delayms(1);
LSA=0;LSB=1;LSC=1;
P0=table[a1];//显示千位
delayms(1);
LSA=1;LSB=0;LSC=1;
P0=table[a2];//显示百位
delayms(1);
LSA=0;LSB=0;LSC=1;
P0=table[a3];//显示十位
delayms(1);
LSA=1;LSB=1;LSC=0;
P0=table[a4];//显示个位
delayms(1);
}
当然用数组后再用for循环会更简单
请问我该怎么修改呢?这个是从左到右显示1234567的,怎么写才能从左到右显示我想要的七个数呢?
这能想办法改红圈中的i。
这段程序应该显示8位的,怎么说是7个呢?
追问我也很懵,我要写的是在这个基础上改进的。要求的是从左到右显示7个数
追答发完整的程序
追问可以教教我怎么编写从左到右显示我想要的七个数字吗?
unsigned的那一行是多打的,删除了
code
追答你想显示那七个数字?
在延时函数前加一个数组
u8 code xs_data[7]={ 7,5,6,8,3,1,2 };
然后将前面给你圈过的位置把i改成xs_data[i]
追问啊谢谢你!!成功了
请问有什么不会的我可以继续私信问你吗
本回答被提问者采纳