久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

74HC595+51單片機16*16點陣滾動顯示(任意數字和字母)的仿真和源碼

[復制鏈接]
跳轉到指定樓層
樓主
使用51單片機編寫的簡單的16*16點陣顯示器,能顯示任意數字和字母。希望對感興趣的同學們有一定的幫助!


單片機源程序如下:
  1. /*****************************
  2. 16*16點陣顯示任意數字和字母
  3. 移動顯示和閃屏顯示
  4. 用5個74HC595控制
  5. 制作人:秦龍標
  6. DATE:2014.3.9
  7. 如果您引用了該代碼請注明作者和出處,作者保留所有權
  8. ******************************/
  9. #include <stc/stc12c5a60s2.h>
  10. #define uchar unsigned char
  11. #define uint unsigned int
  12. #define xian_gs  25                         //要顯示數字的個數(實際數為xian_gs-1;因為加了一個空白數在前面)
  13. #define huancun  33                         //顯存區大小
  14. sbit clk=P1^0;
  15. sbit di=P1^1;
  16. sbit cr=P1^2;
  17. uchar code SZ_ZM[]={0x0,0xFF,0xFF,0xF8,0x0F,0xF7,0xF7,0xEF,0xFB,0xEF,0xFB,0xF7,0xF7,0xF8,0x0F,0xFF,0xFF,/*"0",0*/
  18.                                      …………
  19. …………限于本文篇幅 余下代碼請從51黑下載附件…………
  20.                                          0xF7,0xFB,0xEF,0xE3,0xEF,0x9B,0xEF,0x7B,0xEC,0xFB,0xE3,0xFB,0xEF,0xE7,0xFF,0xFF};/*"Z",61*/
  21.                                          
  22. uchar code duanx[]={0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};  //掃描
  23. uchar code xian_shu[]={"1aB2c3DABCDEFGHIJKLMNOPQRSTUVWXYZ"};                        //要顯示的數字和大小寫字母
  24. //uchar code yima[]={"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"};
  25. uchar weis=1;                                                //數字移動位置
  26. bit fa=0;                                                        //兩種顯示方式的轉換標志
  27. uchar xiancun[huancun];                         //顯示緩存區
  28. uchar SN;                                            //顯示時的第幾個數字數

  29. void delay(uchar x)
  30. {uchar a,b;
  31.   for(a=x;a<0;a--)
  32.    for(b=1000;b<0;b--);
  33. }
  34. void send_byte(uchar num)                //595發送數據函數
  35. {uchar a;
  36. for(a=0;a<8;a++)
  37.   {
  38.    clk=0;
  39.    di=num&0x80;
  40.    num<<=1;
  41.    clk=1;
  42.   }
  43. }
  44. /*uint yimas(uchar ma)
  45. {uchar a;
  46. uint temp;
  47.   for(a=0;a<62;a++)
  48.   {
  49.    if(xian_shu[ma]==yima[a])
  50.    {
  51.            temp=a*16;
  52.    }
  53.   }
  54.   return temp;
  55. }*/
  56. uint yimas(uchar shu)                                         //用于判斷數字和大小字母重新譯碼并算出在SZ_ZM[]里的地址位置
  57. {uint sm;

  58. if((xian_shu[shu]>=0x30)&(xian_shu[shu]<=0x39))                        //數字判斷 重新譯碼號:0-9 ; 數字的編碼是(0x30-0x39)
  59.   {
  60.   sm=(xian_shu[shu]-0x30)*16;                                                   //乘以16就是數字在SZ_ZM[]里的地址位置
  61.   }
  62. if((xian_shu[shu]>=0x41)&(xian_shu[shu]<=0x5a))                   //大寫字母判斷 重新譯碼號:36-61        ; 大寫字母的編碼是(0x41-0x5a)
  63.   {
  64.   sm=(xian_shu[shu]-0x41+36)*16;
  65.   }
  66. if((xian_shu[shu]>=0x61)&(xian_shu[shu]<=0x7a))                  //小寫字母判斷  重新譯碼號:10-35         ;小寫字母的編碼是(0x61-0x7a)
  67.   {
  68.   sm=(xian_shu[shu]-0x61+10)*16;
  69.   }
  70. return sm;
  71. }
  72. void zhuan_byte(uint shu,uint shu1)                //2個數字數據放進顯存
  73. {uchar a;
  74.   for(a=1;a<17;a++)
  75.   {
  76.    xiancun[a]=SZ_ZM[shu+a];
  77.    xiancun[16+a]=SZ_ZM[shu1+a];
  78.   }
  79. }
  80. void display()                                   //顯示函數顯示顯存里面的數據(16byte)
  81. {uchar a;
  82.   for(a=1;a<9;a++)
  83.    {
  84.    cr=0;
  85.    send_byte(xiancun[a*2-1]);
  86.    send_byte(xiancun[a*2]);
  87.    send_byte(xiancun[16+a*2-1]);
  88.    send_byte(xiancun[16+a*2]);
  89.    send_byte(duanx[a]);
  90.    cr=1;
  91.    delay(1);
  92.    }
  93. }

  94. void yidond_diplay()                                //用向左流動顯示
  95. {uchar a,b;
  96. uchar a1=1;
  97.    for(a=weis;a<17;a++)                                //要顯示第一個數字的存入顯存
  98.            {
  99.            xiancun[a1]=SZ_ZM[yimas(SN)+a1+weis-1];          //要顯示的數字乘以16就是該數的的數據地址
  100.            xiancun[16+a1]=SZ_ZM[yimas(SN+1)+a1+weis-1];
  101.            a1++;
  102.            }
  103.                                                               
  104.    for(b=1;b<weis;b++)                                //第一個數字顯示移動后要追加第二個要顯示的數字數據存入顯存
  105.            {
  106.            xiancun[a1]=SZ_ZM[yimas(SN+1)+b];
  107.            xiancun[16+a1]=SZ_ZM[yimas(SN+2)+b];
  108.            a1++;
  109.            }

  110.    if(SN==xian_gs-1)                                  //消除最后一個數時顯示的亂碼
  111.    {
  112.            for(a=0;a<huancun;a++)
  113.         xiancun[a]=0xff;                                  //清空緩存區
  114.    }

  115.    weis+=2;
  116.    if(weis>=17)
  117.            {
  118.            weis=1;
  119.            SN++;
  120.            if(SN==xian_gs)
  121.                    {
  122.                    SN=0;fa=!fa;
  123.                    }
  124.            }
  125. }
  126. void shan_display()                                 //閃屏顯示
  127. {uchar a;
  128. for(a=0;a<150;a++)
  129. zhuan_byte(yimas(SN),yimas(SN+1));
  130. SN+=2;if(SN>=xian_gs){SN=0;fa=!fa;}
  131. }
  132. void main()
  133. {
  134. while(1)
  135. {uchar a;
  136.   if(fa==0)
  137.   shan_display();
  138.   if(fa)
  139.   yidond_diplay();
  140.   for(a=0;a<30;a++)
  141.   {
  142.   display();
  143.   }
  144. }
  145. }

復制代碼

所有資料51hei提供下載:
16 16點陣顯示(任意數字和字母).rar (80.29 KB, 下載次數: 101)




評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:83626 發表于 2019-1-30 06:36 | 只看該作者
16行點陣能分屏顯示2行數字嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 四虎影院在线免费观看 | 国内精品久久久久久久影视简单 | 欧美在线一区二区三区 | 久久久久久成人 | 日韩一区二区三区四区五区六区 | 国产精品久久久久久久久久久久久 | 欧美视频一区二区三区 | 亚洲男人网 | 免费黄色大片 | 四虎最新视频 | 在线观看www | 精品国产高清一区二区三区 | 天天干天天爽 | 国产精品久久久久久久午夜片 | 国产成人精品免费视频大全最热 | 精品综合在线 | 奇米久久久| 成人在线观看免费视频 | 精品一区二区三区在线视频 | 亚洲综合在线一区 | 成人免费在线观看 | 精品国产乱码久久久久久丨区2区 | 欧美在线a| 国产成人精品免费 | 亚洲精品自拍 | 在线超碰| 欧美一区二区三区在线观看视频 | 夜夜草导航 | 毛片免费在线 | 在线免费观看视频黄 | 中文字幕一区二区三区在线观看 | 国产男人的天堂 | 一级毛片免费视频 | 色狠狠一区| 国产精品一区二区av | 中文字幕在线中文 | 在线观看av网站 | 成人h视频在线 | 日韩在线一区二区 | 国产一区二区三区高清 | 国产精品黄色 |