?? ymain.c
字號:
/*8279鍵盤和 LED顯 示程序* /
/*此程序響應8279的鍵盤中斷,并根據按鍵來更新LED 顯示 */
#include<reg51.h>
#include<absacc.h>
#include<yh.h>
bit int_flag=0; /*中斷標志位*/
uchar key_value;/*中斷返回鍵值 */
uchar js;
/*共陰的七段數碼管譯碼0 1 2 3 4 5 6 7 8 9 a b c d e f*/
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code sinbo[]={0x80,0x83,0x86,0x8D,0x90,0x96,0x99,0x9C,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,
0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,
0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,
0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,
0xf1,0xef,0xee,0xec,0xeb,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xdf,0xdd,0xda,0xd8,0xd6,
0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,
0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x7c,
0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,
0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,
0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,
0x07,0x06,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,
0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,
0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,
0x5b,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};
///////////////////////////////////////////////////////////////////////////////
//讀取鍵盤數據,返回當前被按下的鍵號
uchar keyin(void)
{
uchar i;
COM8279=0x40;
i=DAT8279;
i=i&0x3f; //取鍵盤數據低7位
return(i);
}
void main(void)
{
//////////////////////////////////////////////////////////////////////////////
//初始化單片機
AUXR = 0x02;/*STC單片機關內部RAM和開ALE*/
delay(1000);
//////////////////////////////////////////////////////////////////////////////
//初始化8279
COM8279=0xd1;//1101 0001b 清除所有顯示
do{ACC=COM8279;}
while(clflag==1); //清除起來比較慢,所以一條指令執行的時間不足以完成所有清除,故需等待
COM8279=0x00;
DA0832=0;
COM8255=0x80; //pa,pb以方式0工作,三個口都是輸出
COM8255=0x80;
COM8255=0x80;
IE=0x83; //開中斷
// IE=0x81;
TCON=0x01;
TMOD=0x00; //用定時器0,方式0
TH0=0x0F4;
TL0=0x010;
TR0=1;
//////////////////////////////////////////////////////////////////////////////
//大循環
while(1)
{
while(int_flag==0) /*等待中斷 */
{
//此處可填入后臺程序
}
int_flag=0;
//根據鍵值調用鍵盤響應函數
switch(key_value)
{
case 0x00:key0();break;
case 0x01:key1();break;
case 0x02:key2();break;
case 0x03:key3();break;
case 0x08:key4();break;
case 0x09:key5();break;
default:break;
}
}
}
//INT0的中斷服務函數
//INT0由8279在鍵盤按下時發出
//注意關鍵字interrupt
void int_int0() interrupt 0 using 0
{
//設置標志,告訴主循環中斷發生了
int_flag=1;
//讀取鍵值
key_value=keyin();
}
void DA_time0() interrupt 1 using 1
{
TR0=0;
TH0=0x0F4;
TL0=0x010;
//DA0832 5Hz 正弦波輸出
DA0832=sinbo[js];
js++;
if(js==251)
js=0;
TR0=1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -