⑴ 51单片机led数码管显示0-99静态程序
假设P0 P2口接数码管 程序如下
include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=0;
//共阴数码管七段码
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void main(void )//主程序
{
while(1)
{
delay_ms(1000);
num++;
if(num==100)num=0;
P0=table[num/10];
P2=table[num%10];
⑵ 单片机数码管显示0到999c语言程序怎么编
#include<reg51.h>
unsigned char xs_d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned int time=0,s,sz;delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
for(j=0;j<125;j++);
}INT_0()interrupt 0
{ delay(10);
if(INT0==0){sz++;<br> if(sz>2){sz=0;}
}
}
void T0_int()interrupt 1
{
TH0=(65535-50000)/256;//设置初值
TL0=(65535-50000)%256;
s++;
if(s>20){s=0;<br> if(sz==1)time++;<br> if(time>999){time=0;}
if(sz==0){time=0;//清零<br> }
(2)用单片机数码管实现0到99扩展阅读:
运算器由运算部件——算术逻辑单元(Arithmetic & Logical Unit,简称ALU)、累加器和寄存器等几部分组成。
ALU的作用是把传来的数据进行算术或逻辑运算,输入来源为两个8位数据,分别来自累加器和数据寄存器。ALU能完成对这两个数据进行加、减、与、或、比较大小等操作,最后将结果存入累加器。
运算器有两个功能:
(1) 执行各种算术运算。
(2) 执行各种逻辑运算,并进行逻辑测试,如零值测试或两个值的比较。
运算器所执行全部操作都是由控制器发出的控制信号来指挥的,并且,一个算术操作产生一个运算结果,一个逻辑操作产生一个判决。
⑶ 求用51单片机接两个数码管,0-99动态显示程序(用C语言)
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharDSY_CODE[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
voiddelay(uintx)
{
uchari;
while(x--)for(i=0;i<120;i++);
}
voidmain()
{
uchari;
P0=0x00;
P2=0x00;
while(1)
{
for(i=0;i<=99;i++)
{
P0=DSY_CODE[i/10];
P2=DSY_CODE[i%10];
delay(100);
}
}
}
是根据你的要求设计的,你复制进去编译试一下,不过提示一下:你的51单片机P0口是要接上拉电阻的。
⑷ 单片机用汇编写两个数码管显示0到99循环的程序
1、新建项目,做好准备。
⑸ 求单片机0~99共阳数码数码管显示用C语言编写的程序谢谢!
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharnum,count,ge,shi;
voiddelayxms(uint);
voiddisplay(uchar,uchar);
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x98};
voidmain()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
display(shi,ge);
}
}
voidT0_time()interrupt1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
count++;
if(count==5)
{
count=0;
num++;
if(num==100)
num=0;
shi=num/10;
ge=num%10;
}
}
voiddelayxms(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddisplay(ucharshi,ucharge)
{
P2=0x02;
P0=table[ge];
delayxms(20);
P2=0x01;
P0=table[shi];
delayxms(20);
}
⑹ 用单片机控制两个led数码管采用静态连接方式要求两个数码管显示00-99,
程序是刚做的,没测试过,你试试,能用再给分吧。P0口是位选,P2口段选。#includeunsignedintbittime=0;unsignedcharbitdisplay=0;unsignedcharmg=0,ms=0;unsignedcharTab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00};voidtimer0(void)interrupt1{TH0=0xF0;TL0=0x60;switch(bitdisplay){case0:P2=Tab[mg];P0=0xFE;break;case1:P2=Tab[ms];P0=0xFD;break;}bitdisplay++;bittime++;if(bitdisplay>=2)bitdisplay=0;if(bittime>=500){bittime=0;mg++;if(mg>9){mg=0;ms++;}if(ms>9)ms=0;}}voidmain(void){TMOD=0x01;TH0=0xF0;TL0=0x60;TR0=1;EA=1;while(1);}
⑺ 单片机中二位数码管的显示,怎样用c语言写一段从0到99的程序啊
大致步骤为先确定数码管显示数字需要单片机如何驱动(一般单片机一个I/O口控制一个小灯管正负中的一级),然后一个循环递减应该能实现
⑻ 单片机求助,用汇编语言写一个双位数码管0到99循环
给你做一个C的吧
#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number,dat,cnt=0;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
if(number>1)number=0;
switch(number)
{
case 0:P2=0x02;P0=distab[dat/10];
break;
case 1:P2=0x01;P0=distab[dat%10];
break;
default:break;
}
}
void t1isr() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
cnt++;
if(cnt>=20)
{
dat++;
dat%=100;
}
}
main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
ET1=1;
TR0=1;
ET0=1;
EA=1;
while(1);
}
⑼ C51单片机:用数码管显示0到999的值。求c语言程序和原理图
#include<reg51.h>
#define uchar unsigned char
uchar temp;
int key1,key,disbuf;// 此表为 LED 的字模 0 1 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};
unsigned char ledx[8];
bit s0,s1;
void delay(uchar z)
{
uchar i,j;
for(i=0;i<120;i++)
for(j=0;j<z;j++);
}
void scan() //要是按键了,扫描键盘编码值
{
P1=0xF0;
delay(1);
temp=P1;
switch(temp)
{
case 0xe0: key1=0;
break;
case 0xd0: key1=1;
break;
case 0xb0: key1=2;
break;
case 0x70: key1=3;
break;
}
P1=0x0f;
delay(1);
temp=P1;
switch(temp)
{
case 0x0E: key=key1+0;
break;
case 0x0D: key=key1+4;
break;
case 0x0B: key=key1+8;
break;
case 0x07: key=key1+12;
break;
default : key=-1;
}
if((key1+1)&&(key+1)) disbuf=key;
}
void ejjc() //判断是否按键
{
P1=0xF0;
if(P1!=0xF0) { scan();s0=1;}
else { s0=0; s1=1;}
}
void main()
{
uchar i;
while(1)
{
ejjc();
if(s0==1 && s1==1)
{
s0=0;s1=0;
for(i=0;i<8;i++)
{ ledx[i]=ledx[i+1]; ledx[8]=disbuf; }
}
P0=0xff;
P2=LED7Code[ledx[0]];
P0=0xfe;
delay(5);
P0=0xff;
P2=LED7Code[ledx[1]];
P0=0xfd;
delay(5);
P0=0xff;
P2=LED7Code[ledx[2]];
P0=0xfb;
delay(5);
P0=0xff;
P2=LED7Code[ledx[3]];
P0=0xf7;
delay(5);
P0=0xff;
P2=LED7Code[ledx[4]];
P0=0xef;
delay(5);
P0=0xff;
P2=LED7Code[ledx[5]];
P0=0xdf;
delay(5);
P0=0xff;
P2=LED7Code[ledx[6]];
P0=0xbf;
delay(5);
P0=0xff;
P2=LED7Code[ledx[7]];
P0=0x7f;
delay(5);
}
}
⑽ 怎样在单片机中用C语言编写一个2位数码管显示0到99。管脚接线图如下:
//8字段定义
//先进行宏定义,然后进行查表,输出就OK了
unsigned int i ;
#define SEGA 0x04
#define SEGB 0x08
#define SEGC 0x10
#define SEGD 0x80
#define SEGE 0x20
#define SEGF 0x02
#define SEGG 0x01//
#define SEGDP 0x40//
#define NSEGG 0x7f//无解
#define NUM_0 SEGA + SEGB + SEGC + SEGD + SEGE + SEGF
#define NUM_1 SEGB + SEGC
#define NUM_2 SEGA + SEGB + SEGG + SEGE + SEGD
#define NUM_3 SEGA + SEGB + SEGC + SEGD + SEGG
#define NUM_4 SEGF + SEGG + SEGB + SEGC
#define NUM_5 SEGF + SEGG + SEGC + SEGD + SEGA
#define NUM_6 SEGA + SEGF + SEGE + SEGD + SEGC + SEGG
#define NUM_7 SEGA + SEGB + SEGC
#define NUM_8 SEGA + SEGB + SEGC + SEGD + SEGE + SEGF + SEGG
#define NUM_9 SEGA + SEGB + SEGC + SEGD + SEGF + SEGG
const unsigned char tNUMBER[] = {NUM_0,NUM_1,NUM_2,NUM_3,NUM_4,NUM_5,NUM_6,NUM_7,NUM_8,NUM_9};
if(i==9)
{P2 = tNUMBER[9];}
else
{P2 = 0x00;}
具体问题你也描述的不详细,所以只能写到这个地方了。