專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

基于STC12C5A60S2單片機(jī)的點(diǎn)陣屏完工

作者:huqin   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月16日   【字體:








通過(guò)幾天的工作點(diǎn)陣屏終于完工,不過(guò)因?yàn)槿鄙僭荒芩阃瓿闪艘话。。。。!?br /> 不想多說(shuō)直接上C51程序代碼
//行掃1#74hc154芯片對(duì)應(yīng)數(shù)據(jù)輸入口:P0^0->P0^3數(shù)據(jù)輸入控制口:P0^4低電平有效;行掃輸出為互斥低電平輸出;
//列掃1#74hc595芯片對(duì)應(yīng)數(shù)據(jù)輸入口:P0^5移位寄存器時(shí)鐘信號(hào);P0^6存儲(chǔ)寄存器數(shù)據(jù)更新時(shí)鐘;P0^7數(shù)據(jù)輸出使能,低電平時(shí)輸出有效;
//P2^0串行數(shù)據(jù)輸入
#include<reg52.h>//包函頭文件
#include<intrins.h>//包函_nop_延時(shí)函數(shù)的頭文件
#define uchar unsigned char//宏定義
#define uint unsigned int//宏定義
////////////////////////////////////////////////////////////////////////////////
uchar code ZM000[]=
{
  //源文件 / 文字: 祝
  0x00,0x00,0x20,0x00,0x11,0xF8,0x01,0x08,
  0x79,0x08,0x09,0x08,0x11,0x08,0x11,0xF8,
  0x38,0x90,0x54,0x90,0x10,0x90,0x10,0x90,
  0x11,0x14,0x11,0x14,0x12,0x0C,0x00,0x00,
};
uchar code ZM001[]=
{
  //源文件 / 文字: 榮
  0x00,0x00,0x08,0x20,0x7F,0xFC,0x08,0x20,
  0x00,0x00,0x7F,0xFC,0x40,0x04,0x01,0x00,
  0x01,0x00,0x7F,0xFC,0x03,0x80,0x05,0x40,
  0x19,0x30,0x61,0x0C,0x01,0x00,0x00,0x00,
};
////////////////////////////////////////////////////////////////////////////////
sbit HC154_A=P0^0;//HC154數(shù)據(jù)輸入口
sbit HC154_B=P0^1;//HC154數(shù)據(jù)輸入口
sbit HC154_C=P0^2;//HC154數(shù)據(jù)輸入口
sbit HC154_D=P0^3;//HC154數(shù)據(jù)輸入口
sbit G1=P0^4;//HC154使能端控制
sbit SH=P0^5;//HC595移位控制
sbit ST=P0^6;//HC595鎖存更新顯示
sbit OE=P0^7;//HC595使能端控制
sbit DS=P2^0;//HC595串行數(shù)據(jù)輸入
////////////////////////////////////////////////////////////////////////////////
void chushihua()       //硬件初始化
{
     OE=1;   //關(guān)閉HC595輸出
     G1=1;   //關(guān)閉HC154輸出
 }
////////////////////////////////////////////////////////////////////////////////
void delay(uint ms)//延時(shí)子程序
{
 uint x,y;
 for(x=ms;x>0;x--)
  for(y=0;y<240;y++);
}
////////////////////////////////////////////////////////////////////////////////
//低位先入
void sendbyte(uchar Rdate)//HC595串口輸入一個(gè)字節(jié)
{
 uchar a;
    uchar date=Rdate;
 for(a=0;a<8;a++)
 {
  SH=0;
  if(date&0x01)//先將最低位移入
  {
  DS=1;
        SH=1;
  }
  else
  {
  DS=0;
  SH=1;
  }
  date=date>>1;//輸入的字節(jié)位右移
 }
}
////////////////////////////////////////////////////////////////////////////////
void HC595_GX()     //HC595鎖存數(shù)據(jù)更新并輸出
{
    ST=0;
 _nop_();
 _nop_();
 ST=1;    //HC595鎖存數(shù)據(jù)更新
 _nop_();
 _nop_();
 OE=0;    //HC595輸出  
 }
////////////////////////////////////////////////////////////////////////////////
void HC154_HS(uint x)//X行低電平輸出
{
    G1=0;
    switch(x)
   {
    case 1:
      HC154_A=0;
      HC154_B=0;
      HC154_C=0;
      HC154_D=0;
      break;
     case 2:
      HC154_A=1;
      HC154_B=0;
      HC154_C=0;
      HC154_D=0;
      break;
     case 3:
      HC154_A=0;
      HC154_B=1;
      HC154_C=0;
      HC154_D=0;
      break;
     case 4:
      HC154_A=1;
      HC154_B=1;
      HC154_C=0;
      HC154_D=0;
      break;
     case 5:
      HC154_A=0;
      HC154_B=0;
      HC154_C=1;
      HC154_D=0;
      break;
     case 6:
      HC154_A=1;
      HC154_B=0;
      HC154_C=1;
      HC154_D=0;
      break;
     case 7:
      HC154_A=0;
      HC154_B=1;
      HC154_C=1;
      HC154_D=0;
      break;
     case 8:
      HC154_A=1;
      HC154_B=1;
      HC154_C=1;
      HC154_D=0;
      break;
     case 9:
      HC154_A=0;
      HC154_B=0;
      HC154_C=0;
      HC154_D=1;
      break;
     case 10:
      HC154_A=1;
      HC154_B=0;
      HC154_C=0;
      HC154_D=1;
      break;
     case 11:
      HC154_A=0;
      HC154_B=1;
      HC154_C=0;
      HC154_D=1;
      break;
     case 12:
      HC154_A=1;
      HC154_B=1;
      HC154_C=0;
      HC154_D=1;
      break;
     case 13:
      HC154_A=0;
      HC154_B=0;
      HC154_C=1;
      HC154_D=1;
      break;
     case 14:
      HC154_A=1;
      HC154_B=0;
      HC154_C=1;
      HC154_D=1;
      break;
     case 15:
      HC154_A=0;
      HC154_B=1;
      HC154_C=1;
      HC154_D=1;
      break;
     case 16:
      HC154_A=1;
      HC154_B=1;
      HC154_C=1;
      HC154_D=1;
      break;
    default:
      break;
  }
 }
////////////////////////////////////////////////////////////////////////////////
void OUT16x16(uchar code ZM[31])//輸出一個(gè)16x16點(diǎn)陣字模子程序
{
     uint y;//行掃數(shù)據(jù)控制
     uint x_H;//列高位數(shù)據(jù)控制
     uint x_L;//列低位數(shù)據(jù)控制
     for(y=1,x_H=0,x_L=1;y<=16;y++)
     {
       sendbyte(ZM[x_L]);
       sendbyte(ZM[x_H]);
       HC595_GX();
       HC154_HS(y);
       x_H+=2;
       x_L+=2;
       delay(1); 
     }
}
////////////////////////////////////////////////////////////////////////////////
void main()       //主函數(shù)
{
   uint x;
   while(1)
 {
       //輸出祝字
       for(x=0;x<5000;x++)
       {
       OUT16x16(ZM000);
       }
       //輸出榮字
        for(x=0;x<5000;x++)
       {
       OUT16x16(ZM001);
       }    
    }
   
 }
 

關(guān)閉窗口

相關(guān)文章