加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 数码

51单片机中键盘控制数码管显示有谁会?

时间:2024-01-28 11:20:35  来源:http://www.facechina.net  作者:admin

一、51单片机中键盘控制数码管显示有谁会?

用51的话,由于51的I/O没有高阻态,用中断去扫描键盘的话你给的电路图是行不通的(个人意见仅供参考),想要节省CPU开销的话可以用定时器,定时扫描键盘。下面是仿真图和程序。

#include#define uint unsigned int #define uchar unsigned char sbit ctl=P1^0; sbit h1=P2^0; sbit h2=P2^1; sbit s1=P2^2; sbit s2=P2^3; sbit int0=P3^2; uchar keyflag,temp; uchar num[3]; uchar plus,eq; /*八位共阳数码管0~9码表*/ uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0xff}; void keyinit(); uchar mykey(); void main() { ctl=0;//数码管使能 TMOD=0x11;//设置定时器0为工作方式1 TH0=0xb8; TL0=0x00; //定时20ms EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 keyinit(); P0=0xff; //数码管显示清零 while(1) { if(keyflag==1) { if((temp=mykey())!=10) { if(plus==0) { num[0]=temp; //取被加数 num[2]= num[0]; } else { num[1]=temp;//取加数 num[2]= num[1]; } } if(eq==1) { num[2]= num[0]+num[1]; //求和 num[0]=0; num[1]=0; eq=0; plus=0; } } P0=table[num[2]]; } } void keyinit() { keyflag=0; num[0]=10; num[1]=10; num[2]=10; h1=1; h2=1; s1=1; s2=1; } /*键盘扫描*/ uchar mykey() { uchar keynum; h1=0; h2=1; s1=1; s2=1; keynum=10; if(s1==0) { keynum=1; while(s1==0); } else if(s2==0) { keynum=2; while(s2==0); } h1=1; h2=0; s1=1; s2=1; if(s1==0) { plus=1; while(s1==0); } else if(s2==0) { eq=1; while(s2==0); } ET0=1; return keynum; } //20ms定时中断 void setkeyflag() interrupt 3 { TH0=0xb8; TL0=0x00; keyflag=1; ET0=0; }

二、问下·TX-51单片机中数码管显示如何移位,比如说我按键1在第6个根数码管上显示1。

其实不存在移位问题,只是一个数的显示而已,按键1该数为1,铵键2该数为11……然后即时将该项数在数码管中显示。给你一个函数,作用时将一个数在第几个数码管中显示。

void display(uchar firstbit,uchar Num) //firstbit为要第一位显示数码管,NUM是要显示数的位数

{

uchar s;

for(s=0;s{ P0=0xff; duan=1; duan=0; P0=table2[s+firstbit]; wei=1; wei=0; P0=tempdata[s]; duan=1; duan=0; delay(1); } }

三、51单片机C语言程序中如何确定数码管显示内容

这个就要看希望显示的是什么呢,比如现在要做一个数字时钟,那么,那些时间变量就是要显示的,可以建立一个数组变量,作为显示缓冲,在主程序里,不停的把当前的时间变量放入显示缓冲区, 数码管动态刷新的时候,就直接把显示缓冲区你的数值进行显示就可以了

四、用51单片机编程,如何让一位数码管显示数字0~9,显示一遍之后,再变换为A~J,时间间隔为1秒

一般的数码管显不了某些字符 g和9都是一样的

五、51单片机、一个18b20测温,数码管显示的电路图

51单片机连接多个数码管,不使用锁存器等附加元件,需要进行扫描来显示。八个数据口,每个数码管再占用一个使能位选。给你一张图片看看。图上的三极管是增加驱动能力的,用普通数码管时可以不加。

  18b20是单线的,就是说加个两条电源线,和一条单条数据线(自己选51单片机的一个引脚就可以了)。连接非常简单,但对时序要求非常严格哦,建议你参考几份程序,手边在对照18b20的器件手册来看。

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
相关文章
    无相关信息
栏目更新
栏目热门