欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3148|回復: 1
打印 上一主題 下一主題
收起左側

51單片機16*16點陣綜合程序(C語言)

[復制鏈接]
跳轉到指定樓層
樓主
ID:370644 發表于 2019-8-24 11:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
此程序可以實現如下功能:間斷.上移.下移.上拉.下拉等!
硬件說明:行部分采用驛碼器74LS154+PNP三極管驅動,74LS154L輸入部分接P0口的低四位,即P0.0——3  4個端口,列部分采用74HC595移位鎖存器驅動+30R限流電阻,列輸出口接P1.4腳,移位時鐘接P1.5腳,鎖存時鐘接P1.5腳!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar hang,lei,cen,num,shu1,shu2,shu3,shu4,shu5,shu6,shu7,shu8;
sbit sdata=P1^4; //輸出定義
sbit clk=P1^5;//移位時鐘定義
sbit sclk=P1^6;//鎖存定義
uchar code table[]={
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,
0x00,0x08,0x01,0xFC,0x7D,0x08,0x05,0x08,0x45,0xF8,0x29,0x08,0x29,0x08,0x11,0xF8,
0x11,0x44,0x29,0x4C,0x29,0x30,0x45,0x20,0x85,0x10,0x01,0x4E,0x01,0x84,0x01,0x00,
0x08,0x20,0x08,0x28,0x7F,0xFC,0x08,0x20,0x09,0x20,0x01,0x04,0xFF,0xFE,0x01,0x00,
0x01,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,
0x04,0x00,0x25,0xF8,0x25,0x08,0x24,0x90,0x24,0x90,0x24,0x60,0x24,0x20,0x24,0xD0,
0x27,0x0E,0x05,0x04,0x01,0x10,0x3F,0xF8,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,
0x08,0x04,0xFD,0xFE,0x09,0x04,0x09,0x04,0x09,0xFC,0x79,0x24,0x48,0x20,0x43,0xFE,
0x42,0x22,0x7A,0x22,0x0B,0xFE,0x0A,0x22,0x08,0x20,0x88,0x24,0x53,0xFE,0x20,0x02,
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
}; //數組一
uchar code table1[]={
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,
0x08,0x04,0xFD,0xFE,0x09,0x04,0x09,0x04,0x09,0xFC,0x79,0x24,0x48,0x20,0x43,0xFE,
0x42,0x22,0x7A,0x22,0x0B,0xFE,0x0A,0x22,0x08,0x20,0x88,0x24,0x53,0xFE,0x20,0x02,
0x04,0x00,0x25,0xF8,0x25,0x08,0x24,0x90,0x24,0x90,0x24,0x60,0x24,0x20,0x24,0xD0,
0x27,0x0E,0x05,0x04,0x01,0x10,0x3F,0xF8,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,
0x08,0x20,0x08,0x28,0x7F,0xFC,0x08,0x20,0x09,0x20,0x01,0x04,0xFF,0xFE,0x01,0x00,
0x01,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,
0x00,0x08,0x01,0xFC,0x7D,0x08,0x05,0x08,0x45,0xF8,0x29,0x08,0x29,0x08,0x11,0xF8,
0x11,0x44,0x29,0x4C,0x29,0x30,0x45,0x20,0x85,0x10,0x01,0x4E,0x01,0x84,0x01,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,0x00
};//數組二
/**********延時子函數*********/
void delay(uchar z)
{
uchar x,y;//變量定義
for(x=8;x>0;x--)//內循環
for(y=z;y>0;y--);//外循環
}
/**********移位送數子函數*********/
void yi()
{
uchar shu;//局部變量定義
for(shu=8;shu>0;shu--)//循環8次,將數移出
{
  if(hang&0x01==1)//與01與一下,以判斷移出的結果
  sdata=1; //輸出為1
  else//如果hang與完后不為1,就執行下一句
  sdata=0;//輸出為0
  clk=1;//上升沿
  clk=0; //下降
  clk=1;//上升
  hang>>=1;//將hang這個右移一位
  
}
}
/**********顯示子函數*********/
void xian()
{
lei=0; //將列清0
num=cen;//將暫存數給num
for(shu2=16;shu2>0;shu2--) //循環16次,以得到一個整體的字
{
  hang=~table[num];//掃左半屏
  yi();//送數   
  num++; //計數器加1
  hang=~table[num];//掃右半屏
  yi(); //送數
  num++;//計數器加1
  sclk=1; //鎖存起來
  sclk=0;//下降沿
  sclk=1;  //上升沿
  P0=lei; //將列數給P0口
  lei++; //加1后可以緊接著掃下一行
  delay(15);//延時一下
}
}
/**********顯示子函數1*********/
//以下子程序和上面完全一樣,不同的是表不同而已
void xian1()
{
lei=0;
num=cen;
for(shu2=16;shu2>0;shu2--)
{
  hang=~table1[num];
  yi();
  num++;
  hang=~table1[num];//使用得是TABLE1表
  yi();
  num++;
  sclk=1;
  sclk=0;
  sclk=1;
  P0=lei;
  lei++;
  delay(15);
}
}
/**********間斷顯示子函數*********/
void jian()
{
num=0;//計數器清0
cen=0;//暫存器清0
for(shu3=6;shu3>0;shu3--)//循環6次,即要顯示6個字
{
  for(shu1=40;shu1>0;shu1--)//一個字間隔的時間
   xian(); //調用顯示子程序
  cen=num;//將數給暫存器存起來,以便記住num的數是多少
}
num=0;//計數器清0
cen=0;//暫存器清0
}
/**********上移子函數*********/
void shangyi()
{
num=0;//計數器清0
cen=0;//暫存器清0
for(shu3=60;shu3>0;shu3--)// //循環60次
{
  for(shu1=5;shu1>0;shu1--)// 一個字間隔的時間
   xian();//調用顯示子程序
  cen=cen+2;//將暫存器數加2,形成上移
}
num=0;
cen=0;
}
/**********下移子函數*********/
void xiayi()
{
num=0;
cen=160;//先給數暫存
for(shu3=80;shu3>0;shu3--) //循環次數
{
  for(shu1=5;shu1>0;shu1--)// 一個字間隔的時間
   xian1(); //調用顯示子程序
  cen=cen-2;//將暫存器數減2,形成下移
}
num=0;//清0
cen=160;  //重新賦值
}
/**********上拉幕子函數*********/
void shangla()
{
num=0;//清0
cen=0;//清0
for(shu3=6;shu3>0;shu3--)//6個字循環6次
{
  for(shu7=16;shu7>0;shu7--)//一個字掃描需要16次
  {
   for(shu1=1;shu1>0;shu1--)//一個字間隔時間
    xian(); //調用顯示
   cen=cen+2;//加2,形成上移
  }
  for(shu7=80;shu7>0;shu7--)  //一個字顯示完了,停下來,即形成拉幕,此句是重點
  xian();//調用顯示子程序
}
num=0;//清0
cen=0;//清0
}
/**********下拉幕子函數*********/
void xiala()
{
num=0;
cen=160;
for(shu3=5;shu3>0;shu3--)
{
  for(shu6=16;shu6>0;shu6--)
  {
   for(shu1=1;shu1>0;shu1--)
    xian1();
   cen=cen-2;
  }
  for(shu7=80;shu7>0;shu7--)
  xian1();
}
num=0;
cen=160;
}
/**********主函數*********/
void main()
{
while(1)
{
  for(shu8=2;shu8>0;shu8--)//兩次
  jian(); //調用間斷顯示子程序
  for(shu8=2;shu8>0;shu8--)
  shangyi(); //調用上移顯示子程序
  for(shu8=2;shu8>0;shu8--)
  xiayi(); //調用下移顯示子程序
  for(shu8=2;shu8>0;shu8--)
  shangla(); //調用上拉顯示子程序
  for(shu8=2;shu8>0;shu8--)
  xiala(); //調用下拉顯示子程序
}
}


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

使用道具 舉報

沙發
ID:582452 發表于 2019-10-15 17:14 | 只看該作者
大大的給樓主點贊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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