|
/* 名稱:按鍵控制8X8LED點陣屏顯示圖形
說明:每次按下K1時,會使8X8LED點陣屏循環(huán)顯示不同圖形。
本例同時使用外部中斷和定時中斷。
*/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//待顯示圖形編碼
uchar code M[][8]=
{
{0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00}, //圖1
{0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00}, //圖2
{0x00,0x20,0x30,0x38,0x3c,0x3e,0x00,0x00} //圖3
};
uchar i,j;
//主程序
void main()
{
P0=0xff;
P1=0xff;
TMOD=0x01; //T0方式1
TH0=(65536-2000)/256; //2ms定時
TL0=(65536-2000)%256;
IT0=1; //下降沿觸發(fā)
IE=0x83; //允許定時器0、外部0中
斷
i=0xff; //i的初值設(shè)為0xff,加1
后將從0開始
while(1);
}
//T0中斷控制點陣屏顯示
void Show_Dot_Matrix() interrupt 1
{
TH0=(65536-2000)/256; //恢復(fù)初值
TL0=(65536-2000)%256;
P0=0xff; //輸出位碼和段碼
P0=~M[ i][j];[ i]
P1=_crol_(P1,1);
j=(j+1)%8;
}
//INT0中斷(定時器由鍵盤中斷啟動)
void Key_Down() interrupt 0
{
P0=0xff;
P1=0x80;
j=0;
i=(i+1)%3; //i在0,1,2中取值,因
為只要3個圖形
問題如下
1.P0=0xff;P1=0xff-------這條語句是端口初始化不?
2.IE=0x83 ---- 1000 0011為什么是這個值?寄存器配置?
3.P0=0xff;
P0=~M[ i][j];
P1=_crol_(P1,1);
j=(j+1)%8;-----------------P0賦初值?P0給值?后面的就看不懂了
4.我用proteus仿真試了下,只有在按鍵按下的時候,才會顯示圖形,這樣就是外
部中斷。那定制器中斷有何意義呢?
5.i=(i+1)%3---------為什么要(i+1)%3這樣一個表達(dá)式再賦值給i呢?
|
|