Ⅰ 单片机两位数码管显示数字
#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=29;
void t0isr() interrupt 1
case 0:P2=0x02;P0=distab[dat/10];
break;
case 1:P2=0x01;P0=distab[dat%10];
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}
分类
数码管也称LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。
以上内容参考:网络-数码管
Ⅱ 在KEIL环境下的51编程LED两位数倒计时
#include<AT89X51.H>
unsigned char flag1=0;
unsigned char counter=0;
unsigned char first=0;
unsigned char second=0;
unsigned char code dptable[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码表
main()
{
TMOD=0x10;//定时器T1,方式1
TH1=0xfa;//晶振为3.6864MHz,每5ms进一次中断
TL1=0x00;
TR1=1;
ET1=1;
EA=1;
while(1)
{
P1_0=1;//P1口为位选
P2=dptable[second];//P2口为段选
P1_0=0;
while(flag1==0);//动态扫描,每个数码管亮5ms
flag1=0;
P1_0=1;
P2=dptable[first];
P1_1=0;
while(flag1==0);
flag1=0;
P1_1=1;
}
}
void interT1() interrupt 3//5ms进一次中断
{
TH1=0xfa;
TL1=0x00;
flag1=1;
counter++;
if(counter==200)//定时至1s
{
counter=0;
first--;
if(first==255)
{
first=9;
second--;
}
if(second==255)
{
second=7;
first=9;
}
}
}
Ⅲ keil写程序 单片机二位数码管显示倒计时
#include<reg52.h>
#define uchar unsigned char
#define an P0 //共阴数码管的阳极端口
sbit wei1=P2^4; //共阴数码管的阳极端口,我的是四位的,下面语句中把1,2关了,只用到了3,4。
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
uchar code num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0~9的十六进制码
void delay(uchar xms) //软件延时
{
int i,j;
for(i=xms;i>0;i--)
for(j=125;j>0;j--);
}
void display(int tens,ones) //用来显示数字的函数,显示此时的十位,个位。
{
int i,j;
for(i=2;i>0;i--)//通过改变i和j的值,可以改变计时时间。
for(j=50;j>0;j--)
{
wei3=1;//扫描原理。
wei4=0;
an=num[tens];
delay(5);
wei3=0;
wei4=1;
an=num[ones];
delay(5);
}
}
void main()
{
int onesp=0,tensp=0;//定义ones place和tens place。
wei1=0;
wei2=0;
while(1)
{
for(tensp=9;tensp>=0;tensp--)
{
for(onesp=9;onesp>=0;onesp--)
{
display(tensp,onesp);//调用函数显示此时的数字。
}
}
}
}
这个程序测试可用,从99计数到00。只用了比较简单知识,不涉及定时器和系统中断。不懂可以追问。
Ⅳ keil编程开关闭合状态数码管静态显示
51单片机怎样用键盘控制数码管显示的方法。如下参考:1.首先,编写代码并点亮数码管。2.在编写源代码之后,确保原始代码是正确的。3.确认代码正确后,进入下一步,就是在这一行代码(箭头所指)中,删除这四个单词。4.然后如图所示,四个单词已被删除,只要修改相应的代码编号即可。5.表示数字0的代码在这里进行了更改,如图所示。6、最后写代码,将生成的十六进制文件写进单片机应答,数码管显示的数字变为0。
Ⅳ 用keil软件,汇编语言编程使两个数码管同时显示不同内容,比如以“37为例,,,谢谢,”
两个光脚控制选中的数码管,然后其他管脚输入数字。把这个过程放在一个循环里,不停的循环。
Ⅵ 用单片机实现2位静态数码管(共阳)控制,其中系统还包括4个独立按键(中断形式),
2位共阳数码管分别接在P0口和P口。难点是4个按键要采用中断方式,所以,4个按键不但接成独立式按键,还要用一个4输入与门得到一个中断请信号加到P3.2上,用INT0中断。右移,左移指定的位,用小数点显示。仿真图如下。
Ⅶ 求2位数码管显示C程序
首先,你没有给出数码管的相应电路,这里就用Display()函数来代替你的显示程序。按键也没有给出电路,这里以普通IO按键来编写程序。
unsigned
char
disp_data;
//定义一个用于存储需要显示数值的全局变量
void
Display(unsigned
char
disp)
//数码管显示函数,输入参数为要显示的值。
void
Delay_ms(unsigned
char
disp)
//毫秒级延时函数,用于按键去抖动。
void
main()
{
disp_data=50;
Display(disp_data);
//初始显示"50"
while(1);
//循环查询+-按键的状态
{
if(K+
==
0)
//判断K+是否被按下(假如按键按下时为低电平)
{
Delay_ms(20);
//延时,去抖动
if(k+
==
0)
//再次判断
{
disp_data++;
//数值+1
if(disp_data>80)
//判断数据是否超出范围
{
//已经超出
disp_data=80;
//使数据保持在80;
Display(disp_data);
//显示数据
}
else
//没有超出
{Display(disp_data);}
//显示数据
}
}
if(K-
==
0)
//判断K-是否被按下(假如按键按下时为低电平)
{
Delay_ms(20);
//延时,去抖动
if(k-
==
0)
//再次判断
{
disp_data--;
//数值-1
if(disp_data<50)
//判断数据是否超出范围
{
//已经超出
disp_data=50;
//使数据保持在50;
Display(disp_data);
//显示数据
}
else
//没有超出
{Display(disp_data);}
//显示数据
}
}
}
}
浏览器里直接打的代码,整体思路应该是对的,需要注意的是K+\K-这样的变量keil中是非法的,实际程序中请自行改正。
Ⅷ keil 用c51如何编写按键通过74hc164控制两个共阳极数码管
要用74hc164控制两个共阳极数码管,应该用单片机的串口,并用方式0,74HC164的A、B端接P3.0,CLK端接P3.1。四个按键接法错误,是不能识别按键的,应该按下图这接地,不要用二极管。左上角的四个LED是不会亮,也要用下图这种LED,仿真时才会亮。4个LED和4个按键不能与数码管的段控端abcdefg共用。仿真图有这么多错误,就是写程序也没用。
Ⅸ 在2位数码管上持续稳定显示字形"EL"。在单片机上怎么弄
对于一位的数码管,如图示共阳极,那么在P0端口输出要显示字符的七段码即可;