#includereg51.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;ik;i++)
for(j=0;j125;j++);
}INT_0()interrupt 0
{ delay(10);
if(INT0==0){sz++;br if(sz2){sz=0;}
}
}
void T0_int()interrupt 1
{
TH0=(65535-50000)/256;//设置初值
TL0=(65535-50000)%256;
s++;
if(s20){s=0;br if(sz==1)time++;br if(time999){time=0;}
if(sz==0){time=0;//清零br }
扩展资料:
运算器由运算部件——算术逻辑单元(Arithmetic Logical Unit,简称ALU)、累加器和寄存器等几部分组成。
ALU的作用是把传来的数据进行算术或逻辑运算,输入来源为两个8位数据,分别来自累加器和数据寄存器。ALU能完成对这两个数据进行加、减、与、或、比较大小等操作,最后将结果存入累加器。
运算器有两个功能:
(1) 执行各种算术运算。
(2) 执行各种逻辑运算,并进行逻辑测试,如零值测试或两个值的比较。
运算器所执行全部操作都是由控制器发出的控制信号来指挥的,并且,一个算术操作产生一个运算结果,一个逻辑操作产生一个判决。
#includereg51.h
unsigned char code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9
unsigned char time,sec=30,scanled;
unsigned char disdat[6]={1,2,3,4,5,6};
sbit keys=P1^0;
sbit keyc=P1^1;
sbit fmq=P3^0;
void t1isr() interrupt 3 //显示
{
TH1=0xec;
TL1=0x78;
P2=1scanled;
if(scanled==2)P0=~(ledtab[disdat[scanled]] | 0x80);
else P0=~ledtab[disdat[scanled]];
scanled++;
scanled%=6;
}
main()
{
TMOD=0x10;
TH1=0xec;
TL1=0x78;
TR1=1;
ET1=1;
EA=1;
while(1);
}
可以通过代码优化的方式来简化代码。
一、设置延时函数
延时函数在单片机中有着让现实延时的能力,本程序中可以通过采用for循环方式进行延时,具体代码如下:
void delay()
{
uinti,j;
for(i=100;i0;i--)
for(j=1000;j0;j--);
}
二、设置数码管显示数组
数组定义简单,而且访问很方便。所有元素类型相同,在数码管显示程序中可以让程序代码减少。数组代码如下:
chara[10]={0xff,0x3,0x9f,0x25,0xd,0x99,0x49,0x41,0x1f,0x1,0x9};
三、设置数码管显示循环
数码管显示循环可以不用编写一次又一次的数码管显示代码,既方便又简洁。具体代码如下:
for(int i=0;i10;i++)
{
P0=a[i];
delay();
}
扩展资料
单片机程序进行简化可以查看是否有反复出现的代码序列,整合成循环进行更改。同一类型且用法相同的变量可以整合成数组,方便对各个内容进行访问。有特定功能的代码段可以定义一个函数进行访问。
注意:用C51语言编辑的单片机程序与普通C语言不同,C51语言中的数据类型和标准c中的数据类型不同。
sbit dula=P2^6;//段锁存器锁存湍
sbit wela=P2^7;;//位锁存器锁存湍
char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
void display(shiwan_c,wan_c,qian_c,bai_c,shi_c,ge_c)//6位显示子程序
{
P0=table[shiwan_c]; //显示十万位
dula=1;
dula=0;
P0=0xfe;
wela=1;
wela=0;
delay(2);
P0=table[wan_c]; //显示万位
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(2);
P0=table[qian_c]; //显示千位
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(2);
P0=table[bai_c]; //显示百位
dula=1;
dula=0;
P0=0xf7;
wela=1;
wela=0;
delay(2);
P0=table[shi_c]; //显示十位
dula=1;
dula=0;
P0=0xef;
wela=1;
wela=0;
delay(2);
P0=table[ge_c]; //显示个位
dula=1;
dula=0;
P0=0xdf;
wela=1;
wela=0;
delay(2);
P0=0xff; //显示完毕后关闭最后一位显示
wela=1;
wela=0;
}
以上程序需放在循环程序中,数码管需反复显示
如果其中两位不需显示,可赋值为16
给LED编个数组,控制IO口,或者直接控制IO口,不过要看显示的28要多大,会占用比较多的IO口,道理和矩阵键盘差不多。
例程:
#includereg52.h//单片机头文件
void delay1ms(unsigned int ms);//延时ms函数声明(可根据实际情况更改)
unsigned char code led0[]={};//字码表,你自己把你要显示的字码放进去就可以了
void main()
{
unsigned char w,i;
while(1)
{
//显示0
w=0x01; //行变量为第一行
for(i=0;i8;i++)
{
P1=w; //行数据送P1口
P0=led0[i];
delayms(1); //列数据送P0口
w=1; //向下移动一行
}
}
}
void delay1ms(unsigned int ms)
{
unsigned int i,j;
for(i=0;ims;i++)
for(j=0;j110;j++)
}
1、最开始,我们先打开keil。
2、接着,我们要定义好库函数,想要实现动态数码灯,这个步骤是很重要的。
3、接着,我们加上一条循环语句。
4、最后,我们把先前定义的延时语句delayms写好。
5、最后,点击这里进行编译,生成一个hex文件。
6、如果这里无错误警告的话,就说明我们的程序写对了,那我们就可以点亮动态数码管了。
单片机显示数字的c语言程序的介绍到此就结束了,感谢您耐心阅读,谢谢。
本文标签:单片机显示数字的c语言程序