找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3741|回复: 3
收起左侧

51单片机的8279实验程序+Proteus仿真

  [复制链接]
ID:748427 发表于 2020-5-10 16:34 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif
51hei.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<absacc.h>
  3. #define COM8279 XBYTE[0x7fff]
  4. #define DAT8279 XBYTE[0x7eff]
  5. #define uchar unsigned char
  6. uchar code table[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  7. uchar idata keybuffer[3]={0,0,0};
  8. sbit clflag=ACC^7;
  9. uchar key;
  10. uchar Keyflag;
  11. uchar p=0;
  12. void delay(uchar x)
  13. {
  14.         uchar i;
  15.         for(i=0;i<x;i++);
  16. }

  17. void Display()
  18. {
  19.         uchar i;
  20.         COM8279=0X90;
  21.         for(i=0;i<3;i++)
  22.         {
  23.                 COM8279=i+0x80;
  24.                 DAT8279=table[keybuffer[i]];
  25.                 delay(10);
  26.                 }
  27. }
  28. void Disp(d)
  29.         {
  30.         COM8279=0X90;
  31.         COM8279=0x80;
  32.         DAT8279=table[key];
  33.         delay(10);
  34.         }

  35. void Key_0(void) interrupt 0 using 1
  36. {
  37.         uchar ch;
  38.         COM8279=0x40;
  39.         ch=DAT8279; ch&=0x3f;
  40.         key=ch;
  41.         if(p>2)p=0;
  42.         if(key<0x0a)
  43.         {
  44.                 keybuffer[p]=key;
  45.         }
  46.         Keyflag=1;
  47.         p++;
  48. }
  49. void KeyTest(uchar keyh)
  50. {
  51.         switch (keyh)
  52.         {
  53.                 case 0x00:{
  54.                 Disp(key);
  55.                 break;}
  56.                 case 0x01:{
  57.                 Disp(key);
  58.                 break;}
  59.                 case 0x02:{
  60.                 Disp(key);
  61.                 break;}
  62.                 case 0x03:{
  63.                 Disp(key);
  64.                 break;}
  65.                 case 0x04:{
  66.                 Disp(key);
  67.                 break;}
  68.                 case 0x05:{
  69.                 Disp(key);
  70.                 break;}
  71.                 case 0x06:{
  72.                 Disp(key);
  73.                 break;}
  74.                 case 0x07:{
  75.                 Disp(key);
  76.                 break;}
  77.                 case 0x08:{
  78.                 Disp(key);
  79.                 break;}
  80.                 case 0x09:{
  81.                 Disp(key);
  82.                 break;}
  83.                 default:break;}
  84.                 }

  85. void main(void)
  86. {
  87.         uchar j;
  88.         PCON=0x00;
  89.         SCON=0x50;
  90.         IE=0; EA=1;
  91.         EX0=1; ET0=1;
  92.         COM8279=0xd1;
  93.         do
  94.         {ACC=COM8279;}
  95.         while(clflag==1);
  96.         COM8279=0x00;
  97.         COM8279=0x2a;

  98.         while(1)
  99.         {
  100.         if((Keyflag==1)&&(key==0x0b))
  101.         {
  102.                 {for(j=0;j<3;j++)
  103.                 keybuffer[j]=0;
  104.                 }
  105.         Keyflag=0;
  106.         }
  107.         Display();
  108.         }
  109. }
复制代码

所有资料51hei提供下载:
仿真代码.7z (48.11 KB, 下载次数: 53)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:765620 发表于 2020-5-31 11:53 来自手机 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:988777 发表于 2021-12-13 19:21 | 显示全部楼层
void KeyTest(uchar keyh)这个函数在哪里调用了?我没看到
回复

使用道具 举报

ID:262 发表于 2021-12-13 22:21 | 显示全部楼层
stc的浪漫 发表于 2021-12-13 19:21
void KeyTest(uchar keyh)这个函数在哪里调用了?我没看到

看名字 这是个临时用的key测试函数,删掉即可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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