全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版

模拟计算器数字输入及显示

[复制链接]
1754 0

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
1.实验任务
  (1).开机时,显示“0”
  (2).第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三按下时,显示“D1D2D3”,8个全显示完毕,再按下按键下时,给出“嘀”提示音。
  2.电路原理图
   2012111905264611841138.jpg

                        图4.23.1
  3.系统板上硬件连线
  (1).把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上;
  (2).把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上;
  (3).把“单片机系统”区域中的P0.0-P0.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上;
  (4).把“单片机系统:区域中的P2.0-P2.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上;
  4.相关程序设计内容
  (1).行列式键盘输入及按键功能设定;
  (2).动态数码显示;
  (3).数码显示方式处理;
  5.汇编源程序
  (略)
  6.C语言源程序
  #include
  unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
  unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  unsigned char dispbuf[8]={0,16,16,16,16,16,16,16};
  unsigned char dispbitcount;
  unsigned char temp;
  unsigned char i,j;
  unsigned char key;
  unsigned char keypos;
  bit alARMflag;
  void change(unsigned char *p,unsigned char count)
  {
  while(count>0)
  {
  *(p+count)=*(p+count-1);
  count--;
  }
  }
  void main(void)
  {
  TMOD=0x01;
  TH0=(65536-4000) / 256;
  TL0=(65536-4000) % 256;
  TR0=1;
  ET0=1;
  EA=1;
  while(1)
  {
  P3=0xff;
  P3_4=0;
  temp=P3;
  temp=temp & 0x0f;
  if (temp!=0x0f)
  {
  for(i=50;i>0;i--)
  for(j=200;j>0;j--);
  temp=P3;
  temp=temp & 0x0f;
  if (temp!=0x0f)
  {
  temp=P3;
  temp=temp & 0x0f;
  switch(temp)
  {
  case 0x0e:
  key=7;
  break;
  case 0x0d:
  key=8;
  break;
  case 0x0b:
  key=9;
  break;
  case 0x07:
  key=10;
  break;
  }
  if ((key>=0) && (key<10))
  {
  keypos++;
  if(keypos<8)
  {
  change(dispbuf,keypos);
  dispbuf[0]=key;
  }
  else
  {
  keypos=8;
  alarmflag=1;
  }
  }
  temp=P3;
  P1_0=~P1_0;
  temp=temp & 0x0f;
  while(temp!=0x0f)
  {
  temp=P3;
  temp=temp & 0x0f;
  }
  alarmflag=0;
  }
  }
  P3=0xff;
  P3_5=0;
  temp=P3;
  temp=temp & 0x0f;
  if (temp!=0x0f)
  {
  for(i=50;i>0;i--)
  for(j=200;j>0;j--);
  temp=P3;
  temp=temp & 0x0f;
  if (temp!=0x0f)
  {
  temp=P3;
  temp=temp & 0x0f;
  switch(temp)
  {
  case 0x0e:
  key=4;
  break;
  case 0x0d:
  key=5;
  break;
  case 0x0b:
  key=6;
  break;
  case 0x07:
  key=11;
  break;
  }
  if ((key>=0) && (key<10))
  {
  keypos++;
  if(keypos<8)
  {
  change(dispbuf,keypos);
  dispbuf[0]=key;
  }
  else
  {
  keypos=8;
  alarmflag=1;
  }
  }
  temp=P3;
  P1_0=~P1_0;
  temp=temp & 0x0f;
  while(temp!=0x0f)
  {
  temp=P3;
  temp=temp & 0x0f;
  }
  alarmflag=0;
  }
  }
  P3=0xff;
  P3_6=0;
  temp=P3;
  temp=temp & 0x0f;
  if (temp!=0x0f)
  {
  for(i=50;i>0;i--)
  for(j=200;j>0;j--);
  temp=P3;
  temp=temp & 0x0f;
  if (temp!=0x0f)
  {
  temp=P3;
  temp=temp & 0x0f;
  switch(temp)
  {
  case 0x0e:
  key=1;
  break;

举报

回复
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表