?? 16×16-ldianzhen.c
字號:
/******************************************************************
/* *
/* AOKE210E單片機開發系統演示程序 *
/* *
/* 版本: V2.0 (2007/11/20) *
/* 作者: 高山流水 (Email: aoke999@sohu.com) *
/* 網站: www.aokemcu.cn(奧科電子) *
/* *
/* *
/******************************************************************/
#include <reg51.h> //51芯片管腳定義頭文件
#include <intrins.h> //內部包含延時函數 _nop_();
#define uchar unsigned char
#define uint unsigned int
#define BLKN 2 //列鎖存器數
sbit SDATA_595=P2^5; //串行數據輸入
sbit SCLK_595 =P2^6; //移位時鐘脈沖
sbit RCK_595 =P2^7; //輸出鎖存器控制脈沖
sbit G_74138 =P2^4; //顯示允許控制信號端口
uchar data dispram[32]; //顯示緩存
uchar temp;
void delay(uint );
uchar code Bmp[][32]=
{
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x02,0x00,0x04,0x10,0x1F,0xF8,0x11,0x10,0x15,0x50,0x11,0x10,0x1F,0xF0,0x11,0x10,
0x15,0x50,0x11,0x10,0x01,0x04,0xFF,0xFE,0x02,0x80,0x04,0x60,0x18,0x1C,0x60,0x08},//奧
{0x04,0x10,0x0E,0x10,0xF8,0x90,0x08,0x50,0x08,0x10,0xFE,0x90,0x08,0x50,0x1C,0x14,
0x1A,0x1E,0x29,0xF0,0x28,0x10,0x48,0x10,0x88,0x10,0x08,0x10,0x08,0x10,0x08,0x10},//科
{0x02,0x00,0x02,0x00,0x02,0x10,0x7F,0xF8,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10,
0x42,0x10,0x7F,0xF0,0x42,0x10,0x02,0x00,0x02,0x04,0x02,0x04,0x01,0xFC,0x00,0x00},//電
{0x00,0x00,0x3F,0xF0,0x00,0x10,0x00,0x20,0x00,0x40,0x01,0x80,0x01,0x04,0xFF,0xFE,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00}//子
};
/*******************************************************
* *
* 主函數 *
* *
*******************************************************/
void main(void)
{
uchar i,k;
TMOD = 0x01; //定時器T0工作方式1
TH0 = 0xFC; //1ms定時常數
TL0 = 0x66;
G_74138 = 1; //關閉顯示
RCK_595=0;
P2 =0xF0; //行號端口清零
IE = 0x82; //允許定時器T0中斷
TR0 = 1; //啟動定時器T0
while(1)
{
for(k=0;k<5;k++) //顯示"奧科電子"
{
for(i=0;i<32;i++)
{
dispram[i]= ~Bmp[k][31-i];
}
delay(1500);
}
} //end of while(1)
} //end of main()
/*******************************************************
* *
* 延時函數 *
* *
*******************************************************/
void delay(uint dt)
{
uchar bt;
for(;dt;dt--)
for(bt=0;bt<255;bt++);
}
/*******************************************************
* *
*將顯示數據送入74HC595內部移位寄存器 *
* *
*******************************************************/
void WR_595(void)
{
uchar x;
for (x=0;x<8;x++)
{
temp=temp<<1;
SDATA_595=CY;
SCLK_595=1; //上升沿發生移位
_nop_();
_nop_();
SCLK_595=0;
}
}
/*******************************************************
* *
* 中斷服務函數 *
* *
*******************************************************/
void leddisplay(void) interrupt 1 using 1
{
uchar i,j=BLKN;
TH0 = 0xFC; //1ms定時常數
TL0 = 0x66;
i=P2; //讀取當前顯示的行號
i=++i & 0x0f; //行號加1,屏蔽高4位
do{
j--;
temp = dispram[i*BLKN+j];
WR_595();
}while(j);
G_74138=1; //關閉顯示
P2 &= 0xf0; //行號端口清零
RCK_595 = 1; //上升沿將數據送到輸出鎖存器
P2 |=i; //寫入行號
RCK_595 = 0; //鎖存顯示數據
G_74138=0; //打開顯示
}
/******************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -