我是新手,还不会编程,要求键盘输入数字在数码管上显示8个数字,比如显示1204 5781,
#include<reg51.h>
#define uchar unsigned char;
uchar LED1,LED2,LED3,LED4;
uchar keyval,calflag,s_dat,d_dat;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
unsigned int number,r_dat;
void delay(unsigned int a)
{
unsigned int i,j;
for(i=0;i<a;i++)
for(j=0;j<1000;j++);
}
void dealdat()
{
switch(calflag)
{
case 0:
r_dat=s_dat+d_dat;
break;
case 1:
r_dat=s_dat-d_dat;
break;
case 2:
r_dat=s_dat*d_dat;
break;
case 3:
r_dat=s_dat/d_dat;
break;
default:break;
}
LED1=(r_dat/1000)%10;
LED2=(r_dat/100)%10;
LED3=(r_dat/10)%10;
LED4=r_dat%10;
}
uchar kbscan(void)
{
unsigned char sccode,recode;
P3=0x0f; //发0扫描,列线输入
if ((P3 & 0x0f) != 0x0f) //有键按下
{
delay(20); //延时去抖动
if ((P3&0x0f)!= 0x0f)
{
sccode = 0xef; //逐行扫描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return 0; //无键按下,返回0
}
void getkey(void)
{
unsigned char key;
key=kbscan();
if(key==0){keyval=0xff;return;}
switch(key)
{
case 0x11:keyval=7;break;
case 0x12:keyval=4;break;
case 0x14:keyval=1;break;
case 0x18:keyval=10;break;
case 0x21:keyval=8;break;
case 0x22:keyval=5;break;
case 0x24:keyval=2;break;
case 0x28:keyval=0;break;
case 0x41:keyval=9;break;
case 0x42:keyval=6;break;
case 0x44:keyval=3;break;
case 0x48:keyval=11;break;
case 0x81:keyval=12;break;
case 0x82:keyval=13;break;
case 0x84:keyval=14;break;
case 0x88:keyval=15;break;
default:keyval=0xff;break;
}
}
void t0isr() interrupt 1
{
TH0=0xf4;
TL0=0x48;
switch(number)
{
case 0:P2=0x04;P0=distab[LED1];break;
case 1:P2=0x08;P0=distab[LED2];break;
case 2:P2=0x01;P0=distab[LED3];break;
case 3:P2=0x02;P0=distab[LED4];break;
default:break;
}
number++;
if(number>3)number=0;
}
main()
{
TMOD = 0x01;
number = 0;
TH0=0xf4;
TL0=0x48;
TR0=1;
ET0=1;
EA=1;
LED1=0;
LED2=0;
LED3=0;
LED4=0;
while(1)
{
getkey();
switch(keyval)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
LED3=LED4;
LED4=keyval;
LED1=0;
LED2=0;
break;
case 10:break; //"ON"
case 11: //"="
d_dat=LED3*10+LED4;
dealdat();
break;
case 12: //"/"
calflag=3;
s_dat=LED3*10+LED4;
LED3=0;
LED4=0;
break;
case 13: //"*"
calflag=2;
s_dat=LED3*10+LED4;
LED3=0;
LED4=0;
break;
case 14: //"-"
calflag=1;
s_dat=LED3*10+LED4;
LED3=0;
LED4=0;
break;
case 15: //"+"
calflag=0;
s_dat=LED3*10+LED4;
LED3=0;
LED4=0;
break;
default:break;
}
}
}
键盘输入,在2个4位7段数码管上同时显示所需的8个数字,你发的图只能显示4个数字。我们的单片机是这样的
我用的是STC89C51单片机,键盘输入,在2个4位7段数码管上同时显示所需的8个数字,
我是新手,还不会编程,能否给我一个完整程序我参考看看,谢谢!
你问得也太不清楚了,2个4位数码管,说清楚多好。程序我可以给你,今晚吧,现在有事。
本回答被网友采纳通过RS232串口转USB接口,数码管有两块,每一块可以显示4个数字的那种
但是我是新手,还不会编程,想要一个这样的程序代码参考看看
用STC89C51单片机键盘输入任意一个8位的数字,然后在两个数码管(加起来...
列线输入 if ((P3 & 0x0f) != 0x0f) \/\/有键按下 { delay(20); \/\/延时去抖动 if ((P3&0x0f)!= 0x0f) { sccode = 0xef; \/\/逐行扫描初值 while((sccode&0x01)!=0) { P3=sccode; if((P3&0x0f)!=0x0f) { recode=(P3&0x0f)|0xf...
四.数码管显示数字
数码管是一种经济实用的显示器,它由多枚LED组成"8"字形结构。其工作原理涉及多个引脚,如共阴极的STC89C51单片机中的ABCDEFG DP,其中C代表高位,A代表低位。静态显示时,如要显示数字6,需要通过74LS138译码器将相应的二进制代码(0x7D)转化为LED的点亮状态,同时配合74HC245双向数据缓冲器管理和控制数据...
STC89C51单片机上的数码管怎么消隐?
方法如下:在每次送完段选数据后,在送入位选数据之前,需要加上一句“P0=0xff;”,这条语句就是“消影”。写个片段:dula=1;P0=table[1];dula=0;P0=0xff;\/\/送位选数据前关闭所有显示wela=1;P0=0xfe;wela=0;delayms(10);(对共阳极数码管)
四.数码管显示数字
数码管是一种简单而经济的显示设备,由多个发光二极管封装成“8”字型结构。引脚ABCDEFG DP分别对应每个灯管。在STC89C51单片机中,数码管采用共阴极连接方式。电路设计中,74LS138译码器用于实现高位与低位的编码逻辑。当显示数字0时,对应代码000对应0111 1111(LED1为0);当显示数字1时,对应代码001对应1...
STC89C51单片机串口通讯 ,发送数据数码管不显示,大佬们帮忙看看代码哪里...
STC89C51单片机串口通讯 ,发送数据数码管不显示,是因为串口初始化程序错误,设置串口方式1,要写成一行,别分开写,那样写是错的。写成SCON=0x50;TMOD方式也错了,串口用定时器T1的方式2。应该是TMOD|=0x20;你这个程序,T0和串口初始化写成了两个子程序,最好不要这么写程序,直接在主程序中合并写一...
STC89C51单片机P0口接一位数码管要接上拉电阻吗
一般都是要接的,因为P0口的I\/O口内部没有接上拉电阻,单片机的输出能力不足,所以需要外部接上拉电阻
基于51单片机PCF8591数字电压表数码管显示设计proteus仿真+程序+...
基于51单片机的数字电压表设计,采用PCF8591进行AD采样,实现0-5V电压范围内的精确测量,显示结果保留小数点后两位,使用数码管进行直观显示。此设计兼容多种51内核单片机,如AT89C51\/52、AT89S51\/52、STC89C51\/52等,程序编写采用C语言,使用keil 4或keil 5编译器。设计包含仿真图、程序代码、设计报告和讲解...
要求:用单片机控制,温度保持在25℃-30℃,用3位数码管显示当前温度
8031内置中央处理单元、128字节内部数据存储器RAM、32个双向输入\/输出(I\/O)口、2个16位定时\/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。但80C31片内并无程序存储器,需外接ROM。此外,8031还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而...
...串口),再使用特定的公式计算后显示在一个数显管上,最经济的做法_百 ...
建议买STC的51单片机,如果想要通用的话,就用STC89C51(或者STC89C52,RAM和FLASH更大些)。如果像体积小的话,可以用STC11\/10系列。如果要性能较强的话,就用STC12Cxx系列。如果你的传感器是RS232电平,除了单片机之外,还要增加一个MAX232或者MAX3232芯片。如果传感器是TTL或CMOS电平,就不用转换了。使用...
用C语言编写一个在八个数码管上轮流显示1-8的程序
2016-06-27 51单片机用c语言编写一个程序,数码管显示从10到30,再从... 2012-01-22 c语言程序设计 目标:编写程序要求:8路跑马灯输出,8个不... 2010-04-16 任务:用C语言设计程序,完成8个数码管的显示控制 2 2013-06-23 用STC89C51单片机键盘输入任意一个8位的数字,然后在两... 3 2016-07-02 求一...