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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6872|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

用于Arduino UNO的完全使用3個IO口驅(qū)動1602(74HC595)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:218023 發(fā)表于 2018-4-30 11:55 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
第一次學(xué)Arduino......
還沒有購買開發(fā)板
一般都在Proteus上進(jìn)行
51單片機(jī):http://www.zg4o1577.cn/bbs/dpj-114268-1.html







單片機(jī)代碼如下:
  1. //引腳定義
  2. #define LCD1602_SHCP 0
  3. #define LCD1602_DS 1
  4. #define LCD1602_STCP 2

  5. //兩種數(shù)據(jù)類型
  6. typedef unsigned char uchar;
  7. typedef unsigned int uint;

  8. //定義數(shù)據(jù)槽
  9. uchar RS,RW,E,D4,D5,D6,D7;

  10. //二進(jìn)制的形象表示方法,從左到右分別位第7 6 5 4 3 2 1 0位
  11. #define bin(_a,_b,_c,_d,_e,_f,_g,_h) ((_a)<<7|(_b)<<6|(_c)<<5|(_d)<<4|(_e)<<3|(_f)<<2|(_g)<<1|(_h))  //二進(jìn)制的表示

  12. void LCD1602_DATAPINS(uchar value); //更改74HC595連接LCD1602的數(shù)據(jù)
  13. void LcdCalc(uchar i); //確定4位總線
  14. void LcdWriteCom(uchar com); //向LCD寫入一個字節(jié)的命令
  15. void LcdWriteData(uchar dat); //向LCD寫入一個字節(jié)的數(shù)據(jù)
  16. void LcdInit(); //初始化LCD屏
  17. void LcdPrintf(uchar *s); //向屏幕輸出字符
  18. void LcdWriteCGRAM(uchar index,uchar *p); //建立一個自定義字符
  19. void LCDPrintNum(uint num,uchar wei); //顯示數(shù)字

  20. /*******************************************************************************
  21. * 函 數(shù) 名         : setup
  22. * 函數(shù)功能       : 準(zhǔn)備
  23. * 輸    入         : 無
  24. * 輸    出         : 無
  25. *******************************************************************************/
  26. void setup()
  27. {
  28.   pinMode(LCD1602_SHCP,OUTPUT);
  29.   pinMode(LCD1602_DS,OUTPUT);
  30.   pinMode(LCD1602_STCP,OUTPUT);
  31. }
  32. /*******************************************************************************
  33. * 函 數(shù) 名         : LCD1602_DATAPINS
  34. * 函數(shù)功能       : 更改74HC595連接LCD1602的數(shù)據(jù)
  35. * 輸    入         : value
  36. * 輸    出         : 無
  37. *******************************************************************************/   
  38. void LCD1602_DATAPINS(uchar value)
  39. {
  40.     uchar i,j;
  41.     for(i=0;i<8;i++)
  42.     {
  43.         j=value&0x80;//取數(shù)據(jù)高位
  44.         if(j==0x80){ //判斷數(shù)據(jù)高位是否為1
  45.             digitalWrite(LCD1602_DS,HIGH);//如果高位為1,DS置1
  46.         }
  47.         else{
  48.             digitalWrite(LCD1602_DS,LOW);//否則DS置0
  49.         }
  50.         digitalWrite(LCD1602_SHCP,LOW);
  51.         digitalWrite(LCD1602_SHCP,HIGH);//上升沿使這一位寫入移位寄存器
  52.         value<<=1;//數(shù)據(jù)左移1位,數(shù)據(jù)的第7位變?yōu)樽罡呶唬h(huán)第8次時數(shù)據(jù)的最低位也變成最高位
  53.     }
  54.     digitalWrite(LCD1602_STCP,LOW);
  55.     digitalWrite(LCD1602_STCP,HIGH);//給STCP一個上升沿,將for循環(huán)中輸入的數(shù)據(jù)移入輸出鎖存寄存器,刷新輸出數(shù)據(jù)
  56. }
  57. /*******************************************************************************
  58. * 函 數(shù) 名         : LcdCalc
  59. * 函數(shù)功能       : 確定4位總線
  60. * 輸    入         : i
  61. * 輸    出         : 無
  62. *******************************************************************************/   
  63. void LcdCalc(uchar i)
  64. {
  65.   if(i==0x00){
  66.     D4=0;
  67.     D5=0;
  68.     D6=0;
  69.     D7=0;
  70.   }
  71.   if(i==0x01){
  72.     D4=1;
  73.     D5=0;
  74.     D6=0;
  75.     D7=0;
  76.   }
  77.   if(i==0x02){
  78.     D4=0;
  79.     D5=1;
  80.     D6=0;
  81.     D7=0;
  82.   }
  83.   if(i==0x03){
  84.     D4=1;
  85.     D5=1;
  86.     D6=0;
  87.     D7=0;
  88.   }
  89.   if(i==0x04){
  90.     D4=0;
  91.     D5=0;
  92.     D6=1;
  93.     D7=0;
  94.   }
  95.   if(i==0x05){
  96.     D4=1;
  97.     D5=0;
  98.     D6=1;
  99.     D7=0;
  100.   }
  101.   if(i==0x06){
  102.     D4=0;
  103.     D5=1;
  104.     D6=1;
  105.     D7=0;
  106.   }
  107.   if(i==0x07){
  108.     D4=1;
  109.     D5=1;
  110.     D6=1;
  111.     D7=0;
  112.   }
  113.   if(i==0x08){
  114.     D4=0;
  115.     D5=0;
  116.     D6=0;
  117.     D7=1;
  118.   }
  119.   if(i==0x09){
  120.     D4=1;
  121.     D5=0;
  122.     D6=0;
  123.     D7=1;
  124.   }
  125.   if(i==0x0a){
  126.     D4=0;
  127.     D5=1;
  128.     D6=0;
  129.     D7=1;
  130.   }
  131.   if(i==0x0b){
  132.     D4=1;
  133.     D5=1;
  134.     D6=0;
  135.     D7=1;
  136.   }
  137.   if(i==0x0c){
  138.     D4=0;
  139.     D5=0;
  140.     D6=1;
  141.     D7=1;
  142.   }
  143.   if(i==0x0d){
  144.     D4=1;
  145.     D5=0;
  146.     D6=1;
  147.     D7=1;
  148.   }
  149.   if(i==0x0e){
  150.     D4=0;
  151.     D5=1;
  152.     D6=1;
  153.     D7=1;
  154.   }
  155.   if(i==0x0f){
  156.     D4=1;
  157.     D5=1;
  158.     D6=1;
  159.     D7=1;
  160.   }
  161.   if(i==0x10){
  162.     D4=1;
  163.     D5=0;
  164.     D6=0;
  165.     D7=0;
  166.   }
  167.   if(i==0x20){
  168.     D4=0;
  169.     D5=1;
  170.     D6=0;
  171.     D7=0;
  172.   }
  173.   if(i==0x30){
  174.     D4=1;
  175.     D5=1;
  176.     D6=0;
  177.     D7=0;
  178.   }
  179.   if(i==0x40){
  180.     D4=0;
  181.     D5=0;
  182.     D6=1;
  183.     D7=0;
  184.   }
  185.   if(i==0x50){
  186.     D4=1;
  187.     D5=0;
  188.     D6=1;
  189.     D7=0;
  190.   }
  191.   if(i==0x60){
  192.     D4=0;
  193.     D5=1;
  194.     D6=1;
  195.     D7=0;
  196.   }
  197.   if(i==0x70){
  198.     D4=1;
  199.     D5=1;
  200.     D6=1;
  201.     D7=0;
  202.   }
  203.   if(i==0x80){
  204.     D4=0;
  205.     D5=0;
  206.     D6=0;
  207.     D7=1;
  208.   }
  209.   if(i==0x90){
  210.     D4=1;
  211.     D5=0;
  212.     D6=0;
  213.     D7=1;
  214.   }
  215.   if(i==0xa0){
  216.     D4=0;
  217.     D5=1;
  218.     D6=0;
  219.     D7=1;
  220.   }
  221.   if(i==0xb0){
  222.     D4=1;
  223.     D5=1;
  224.     D6=0;
  225.     D7=1;
  226.   }
  227.   if(i==0xc0){
  228.     D4=0;
  229.     D5=0;
  230.     D6=1;
  231.     D7=1;
  232.   }
  233.   if(i==0xd0){
  234.     D4=1;
  235.     D5=0;
  236.     D6=1;
  237.     D7=1;
  238.   }
  239.   if(i==0xe0){
  240.     D4=0;
  241.     D5=1;
  242.     D6=1;
  243.     D7=1;
  244.   }
  245.   if(i==0xf0){
  246.     D4=1;
  247.     D5=1;
  248.     D6=1;
  249.     D7=1;
  250.   }
  251. }
  252. /*******************************************************************************
  253. * 函 數(shù) 名         : LcdWriteCom
  254. * 函數(shù)功能       : 向LCD寫入一個字節(jié)的命令
  255. * 輸    入         : com
  256. * 輸    出         : 無
  257. *******************************************************************************/
  258. void LcdWriteCom(uchar com)   //寫入命令
  259. {
  260.   E = 0;   //使能清零
  261.   RS = 0;  //選擇寫入命令
  262.   RW = 0;  //選擇寫入

  263.   LcdCalc(com>>4);  //發(fā)送高四位

  264.   E = 1;   //寫入時序
  265.   LCD1602_DATAPINS(bin(0,D7,D6,D5,D4,E,RW,RS));
  266.   E = 0;
  267.   LCD1602_DATAPINS(bin(0,D7,D6,D5,D4,E,RW,RS));

  268.   LcdCalc(com<<4); //發(fā)送低四位

  269.   E = 1;   //寫入時序
  270.   LCD1602_DATAPINS(bin(0,D7,D6,D5,D4,E,RW,RS));
  271.   E = 0;
  272.   LCD1602_DATAPINS(bin(0,D7,D6,D5,D4,E,RW,RS));
  273. }
  274. /****************************************************************************
  275. * 函 數(shù) 名         : LcdWriteData
  276. * 函數(shù)功能       : 向LCD寫入一個字節(jié)的數(shù)據(jù)
  277. * 輸    入         : dat
  278. * 輸    出         : 無
  279. *******************************************************************************/           
  280. void LcdWriteData(uchar dat)      //寫入數(shù)據(jù)
  281. {
  282.   E = 0;   //使能清零
  283.   RS = 1;  //選擇寫入數(shù)據(jù)
  284.   RW = 0;  //選擇寫入

  285.   LcdCalc(dat>>4);  //發(fā)送高四位

  286.   E = 1;   //寫入時序
  287.   LCD1602_DATAPINS(bin(0,D7,D6,D5,D4,E,RW,RS));
  288.   E = 0;
  289.   LCD1602_DATAPINS(bin(0,D7,D6,D5,D4,E,RW,RS));

  290.   LcdCalc(dat<<4); //發(fā)送低四位

  291.   E = 1;   //寫入時序
  292.   LCD1602_DATAPINS(bin(0,D7,D6,D5,D4,E,RW,RS));
  293.   E = 0;
  294.   LCD1602_DATAPINS(bin(0,D7,D6,D5,D4,E,RW,RS));
  295. }
  296. /*******************************************************************************
  297. * 函 數(shù) 名       : LcdInit
  298. * 函數(shù)功能     : 初始化LCD屏
  299. * 輸    入       : 無
  300. * 輸    出       : 無
  301. *******************************************************************************/      
  302. void LcdInit()              //LCD初始化子程序
  303. {
  304.   LcdWriteCom(0x32);   //將8位總線轉(zhuǎn)為4位總線
  305.   LcdWriteCom(0x28);   //在四位線下的初始化
  306.   LcdWriteCom(0x0c);  //開顯示不顯示光標(biāo)
  307.   LcdWriteCom(0x06);  //寫一個指針加1
  308.   LcdWriteCom(0x01);  //清屏
  309.   LcdWriteCom(0x80);  //設(shè)置數(shù)據(jù)指針起點(diǎn)
  310. }
  311. /*******************************************************************************
  312. * 函 數(shù) 名       : LcdPrintf
  313. * 函數(shù)功能     : 向屏幕輸出字符
  314. * 輸    入       : *s
  315. * 輸    出       : 無
  316. *******************************************************************************/
  317. void LcdPrintf(uchar *s)
  318. {
  319.   while(*s>0)LcdWriteData(*s++);
  320. }
  321. /*******************************************************************************
  322. * 函 數(shù) 名       : LcdWriteCGRAM
  323. * 函數(shù)功能     : 建立一個自定義字符
  324. * 輸    入       : index、*p
  325. * 輸    出       : 無
  326. *******************************************************************************/
  327. void LcdWriteCGRAM(uchar index,uchar *p)
  328. {
  329.   uchar i;
  330.   index <<=3; //index *= 8
  331.   for(i=0;i<8;++i){
  332.     LcdWriteCom(0x40 | index+i);//寫CGRAM地址
  333.     LcdWriteData(*p++);
  334.   }
  335.   LcdWriteCom(0x80);
  336. }
  337. /*******************************************************************************
  338. * 函 數(shù) 名       : LcdPrintNum
  339. * 函數(shù)功能     : 顯示數(shù)字
  340. * 輸    入       : num、wei
  341. * 輸    出       : 無
  342. *******************************************************************************/
  343. void LCDPrintNum(uint num,uchar wei)//wei 數(shù)字占的位數(shù)
  344. {
  345.   uchar tempstring[6];
  346.   uchar n[5];
  347.   uchar i,j=0;
  348.   n[0]=num/10000;
  349.   n[1]=num%10000/1000;
  350.   n[2]=num%1000/100;
  351.   n[3]=num%100/10;
  352.   n[4]=num%10;
  353.   i=5-wei;
  354.   for(i;i<5;i++){
  355.     tempstring[j++]=n[i]+'0';
  356.   }
  357.   tempstring[j]='\0';
  358.   LcdPrintf(tempstring);
  359. }

  360. const uchar type_t[]={
  361.   0x1f,0x02,0x02,0x02,
  362.   0x02,0x02,0x02,0x00
  363. };

  364. const uchar line1[]="Have a nice day!";
  365. const uchar line2[]="HE Wcommands";

  366. void loop()
  367. {
  368.   uchar i;
  369.   LcdInit();
  370.   LcdWriteCGRAM(0x00,type_t);
  371.   LcdWriteData(0x00);
  372.   LcdWriteCom(0x81);
  373.   LcdPrintf("HE With");
  374.   LcdWriteCom(0xc0);
  375.   LcdPrintf("Commands");
  376.   delay(100);
  377.   LcdWriteCom(0x01);
  378.   while(1){
  379.     for(i=0;i<16;i++){
  380.       LcdWriteCom(0x80+i);
  381.       LcdWriteData(line1[i]);
  382.       delay(5);
  383.     }
  384.     delay(10);
  385.     LcdWriteCom(0xc1);
  386.     LcdWriteData(0x00);
  387.     delay(5);
  388.     for(i=0;i<12;i++){
  389.       LcdWriteCom(0xc2+i);
  390.       LcdWriteData(line2[i]);
  391.       delay(5);
  392.     }
  393.     LcdWriteCom(0x01);
  394.     delay(5);
  395.   }
  396. }
復(fù)制代碼


全部資料51hei下載地址:
lcd595.zip (27.79 KB, 下載次數(shù): 31)


評分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:218023 發(fā)表于 2018-4-30 12:08 | 只看該作者
那時一直用51單片機(jī)為核心的我,這個假期徹底翻了身!
第一次使用Arduino

回復(fù)

使用道具 舉報

板凳
ID:44037 發(fā)表于 2018-8-20 11:06 | 只看該作者
謝謝分享  學(xué)習(xí)Arduino  
  編譯程序  出現(xiàn)錯誤   LcdWriteCGRAM(0x00,type_t);  
error: invalid conversion from 'const uchar* {aka const unsigned char*}' to 'uchar* {aka unsigned char*}' [-fpermissive]     轉(zhuǎn)換無效
請求幫助   怎樣修改程序
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 美女视频三区 | 国产一区二区三区久久久久久久久 | 一级片免费在线观看 | 国产精品激情小视频 | 国产精品美女久久久久久免费 | 成人在线免费观看视频 | 91九色在线观看 | 最新国产视频 | 一区二区三区精品视频 | 丝袜 亚洲 另类 欧美 综合 | 日日爱视频 | 日韩久久久久久 | 欧美不卡网站 | 美国黄色一级片 | 国产精品一区在线观看 | 天天操人人干 | av网站免费| 日韩欧美高清 | 一级片网址| 91视在线国内在线播放酒店 | 四虎影音 | 99久久精品国产一区二区三区 | 91成人精品 | 亚洲伊人a | 一级片av | 在线看黄免费 | 草久久免费视频 | 日韩欧美在线观看视频网站 | 亚洲国产偷 | 在线欧美 | 日韩亚洲一区二区 | 日韩精品一区二区三区老鸭窝 | 国产精品a级 | 精久久久久 | 成人午夜影院 | 亚洲精品www久久久久久广东 | 在线观看国产91 | 天天干,夜夜操 | 在线欧美一区 | 久久久成人一区二区免费影院 | 一区二区三区中文字幕 |