一、LedNumVal%10000/1000
%是模,取余数的意思,%10000,得到的数最大是四位数。
/是整除的意思不带小数,如8/3=2
一个小于10000的数,整除1000结果一定是0到9之间的一个数
二、Disp_Tab
以及LedOut,
dispbit都是数组,根据相应的数可得到对应的字符数据,达到位选的功能。
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> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
code unsigned char tab[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管 0-9
unsigned char Dis_Shiwei;//定义十位
unsigned char Dis_Gewei; //定义个位
//
/ 延时函数 /
//
void delay(unsigned int cnt)
{
while(--cnt);
}
//
/ 主函数 /
//
main()
{
TMOD |=0x01;//定时器设置 10ms in 12M crystal,工作在模式1,16位定时
TH0=0xd8;
TL0=0xf0;
IE= 0x82; //打开中断
TR0=1; //打开定时开关
while(1)
{
P0=Dis_Shiwei;//显示十位
P2=0;
delay(300); //短暂延时
P0=Dis_Gewei; //显示个位
P2=1;
delay(300);
}
}
//
/ 定时器中断函数 /
//
void tim(void) interrupt 1 using 1
{
static unsigned char second,count;
TH0=0xd8; //重新赋值
TL0=0xf0;
count++;
if (count==100) //100x10ms=1S,大致延时时间
{
count=0;
second++; //秒加1
if(second==100)
second=0;
Dis_Shiwei=tab[second/10];//十位显示值处理
Dis_Gewei=tab[second%10]; //个位显示处理
}
以上就是关于关于单片机数码管的C语言代码,高分求详解,先谢过全部的内容,包括:关于单片机数码管的C语言代码,高分求详解,先谢过、请教单片机控制数码管显示数字C语言程序问题,满意加分、电路如下图请问单片机动态数码管显示C语言程序怎么写呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)