標(biāo)題: 51單片機(jī)的8279實(shí)驗(yàn)程序+Proteus仿真 [打印本頁(yè)]

作者: xyls    時(shí)間: 2020-5-10 16:34
標(biāo)題: 51單片機(jī)的8279實(shí)驗(yàn)程序+Proteus仿真
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機(jī)源程序如下:
  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. }
復(fù)制代碼

所有資料51hei提供下載:
仿真代碼.7z (48.11 KB, 下載次數(shù): 54)


作者: 0011ppqq    時(shí)間: 2020-5-31 11:53
好資料,51黑有你更精彩!!!
作者: stc的浪漫    時(shí)間: 2021-12-13 19:21
void KeyTest(uchar keyh)這個(gè)函數(shù)在哪里調(diào)用了?我沒看到
作者: heicad    時(shí)間: 2021-12-13 22:21
stc的浪漫 發(fā)表于 2021-12-13 19:21
void KeyTest(uchar keyh)這個(gè)函數(shù)在哪里調(diào)用了?我沒看到

看名字 這是個(gè)臨時(shí)用的key測(cè)試函數(shù),刪掉即可




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1