找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[基础电路] 模拟计算器数字输入及显示

[复制链接]
admin 发表于 2013-2-23 14:08:20 | 显示全部楼层 |阅读模式

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

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

×
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;
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-23 10:33 , Processed in 0.058596 second(s), 11 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表