找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 4305|回復: 1
打印 上一主題 下一主題
收起左側

自制單片機LED顯示屏

[復制鏈接]
跳轉到指定樓層
樓主
ID:59583 發(fā)表于 2014-3-31 23:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

運行程序
#include <AT89X52.h>
#include "test_ziku.h"   
#define uchar unsigned char
#define uint unsigned int   
#define ulong unsigned long    //宏定義
#define hang1   P0        //上行線
#define hang2   P2        //下行線
#define lie   P1        //列線
#define CS1   P3_0       //接左屏154譯碼器使能端
#define CS2   P3_1       //接右屏154譯碼器使能端
#define sum   sizeof(hanzi)/32 //自動計算漢字字數(shù)

/*****參數(shù)設置*****/
#define ziti     16     //字體大�。▽挾龋�
#define light  8        //顯示亮度
#define move_speed 25        //移動速度

uint k=0,j;          //移位變量,k:移位個數(shù)
uint a=0;           //用于軟件延時  
ulong s=(sum+1)*ziti;     //s為全部列數(shù)
uchar  disbuf[32][2];     //定義顯示緩沖區(qū)(32行兩列的二維數(shù)組以開辟2個16*16漢字的空間)
bit  move_st;      //移動標志

/*****可變延時*****/
void delay(void)          //用來改變掃描延時以調節(jié)亮度
{
uchar i;
for(i=0;i<light;i++);
}

/*****初始化子程序*****/
void init(void)                   //定時器初始化,設置定時器0工作方式1,定時時間1ms
{   
  TMOD=0x1;
  TH0=0xfc;
  TL0=0x18;
}

/*****計數(shù)器中斷程序*****/
void timer0(void) interrupt 1      //中斷處理
{
  TH0=0xfc;
  TL0=0x18;
  a++;           
}

/*****漢字循環(huán)顯示*****/
void run_move(void)
{
uchar  k1,k2;
if(a>=move_speed)          //move_speed控制移動速度
{   
      
  if(k>s-ziti-1)k=0;      //整屏移動列數(shù)  
  k1=k/ziti;
  k2=k%ziti;
  j=ziti*2*k1+k2;     //顯示指針
  k++;
  move_st=1;
  a=0;
}
}

/*****裝載顯示數(shù)據(jù)至緩沖區(qū)*****/
void load_hanzi(void)
{  
uchar i;
run_move();
if(move_st)
{
  for(i=0;i<31;i++)
  {
   disbuf[0]=disbuf[i+1][0];//移位處理
   disbuf[1]=disbuf[i+1][1];//移位處理
  }
  disbuf[31][0]=hanzi[j];
  disbuf[31][1]=(hanzi[ziti+j]);   
  move_st=0;         
}  
}

/*****掃描顯示數(shù)據(jù)緩沖區(qū)的內(nèi)容*****/
void display(void)
{  
uchar i;
CS2=1;            //關右屏
CS1=0;            //開左屏
for (i=0;i<16;i++)
{
  lie=i;      
  hang1=disbuf[0];
  hang2=disbuf[1];
  delay();
  hang1=0;
  hang2=0;      
}
CS1=1;        //關左屏
CS2=0;                  //開右屏
for (i=0;i<16;i++)
{
  lie=i<<4;
  hang1=disbuf[i+16][0];
  hang2=disbuf[i+16][1];
  delay();
  hang1=0;
  hang2=0;
}

}
/*****主程序*****/
void main (void)
{
init();
EA=1;        //開中斷
TR0=1;         
ET0=1;      
while(1)
{
  load_hanzi();
  display();
}
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:738449 發(fā)表于 2020-4-26 13:40 來自觸屏版 | 只看該作者
有沒郵箱,求解proteus仿真
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表