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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

AD tlc2543+12864電壓表單片機程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:467275 發表于 2019-5-4 19:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
tlc2543  12位AD 12864制作電壓表

單片機源程序如下:
  1. #include "reg51.h"
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. /********IO引腳定義****************************************/
  6. sbit LCD_RS=P2^3;
  7. sbit LCD_RW=P2^4;
  8. sbit LCD_E=P2^5;
  9. sbit PSB =P2^6;                //PSB腳為12864-12系列的串、并通訊功能切換,我們使用8位并行接口,PSB=1

  10. sbit CLOCK=P1^0; /*2543時鐘*/
  11. sbit D_IN=P1^1; /*2543輸入*/
  12. sbit D_OUT=P1^2; /*2543輸出*/
  13. sbit _CS=P1^3; /*2543片選*/
  14. /********宏定義***********************************************************/
  15. #define LCD_Data P0
  16. #define Busy    0x80 //用于檢測LCD狀態字中的Busy標識
  17. unsigned char code a[]={"0123456789 :.-"};
  18. /********函數聲明*************************************************************/
  19. void WriteDataLCD(unsigned char WDLCD);
  20. void WriteCommandLCD(unsigned char WCLCD,BuysC);
  21. unsigned char ReadDataLCD(void);
  22. unsigned char ReadStatusLCD(void);
  23. void LCDInit(void);
  24. void LCDClear(void);
  25. void LCDFlash(void);
  26. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  27. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  28. void DisplayImage (unsigned char code *DData);
  29. void Delay5Ms(void);
  30. void Delay400Ms(void);
  31. void delay(uchar n);

  32. /********數據定義*************************************************************/
  33. code unsigned char  uctech[] = {"創新實驗室   "};
  34. code unsigned char  net[] = {"AD測試程序  "};
  35. code unsigned char  mcu[] = {"選擇通道:1 "};
  36. code unsigned char  qq[] = {"電壓:  "};

  37. uint read2543(uchar port)
  38. {
  39. uint ad=0,i;
  40. CLOCK=0;
  41. _CS=0;
  42. port<<=4;//通道號左移4位
  43. for(i=0;i<12;i++)//沒有設置控制字,默認輸出數據為12位,高位先送出,輸出數據的格式為2進制
  44. {
  45.   if(D_OUT) ad|=0x01;//轉換后的值高位先送出
  46.   D_IN=(bit)(port&0x80);//通道值高位先送出
  47.   CLOCK=1;
  48.   delay(1);
  49.   CLOCK=0;
  50.   delay(1);
  51.   port<<=1;
  52.   ad<<=1;
  53. }
  54. _CS=1;
  55. ad>>=1;//循環中多左移了一位
  56. return ad;
  57. }

  58. /***********主函數開始********************************************************/
  59. void main(void)
  60. {        uint ad=0;
  61. //        Delay400Ms();         //啟動等待,等LCD講入工作狀態
  62.         LCDInit();                 //LCD初始化
  63.         Delay5Ms();         //延時片刻(可不要)
  64.         while(1){
  65.             ad=read2543(1);
  66.                 ad=ad*1.0/8;
  67.                 DisplayListChar(0,1,uctech);        //顯示字庫中的中文數字
  68.                 DisplayListChar(0,2,net);                //顯示字庫中的中文數字
  69.                 DisplayListChar(0,3,mcu);                //顯示字庫中的中文
  70.                 DisplayListChar(0,4,qq);                //顯示字庫中的中文數字

  71.         DisplayOneChar(7,4,a[ad%10]);                //顯示字庫中的中文數字
  72.                 DisplayOneChar(6,4,a[ad%100/10]);                //顯示字庫中的中文數字
  73.         DisplayOneChar(5,4,a[12]);                //顯示字庫中的中文數字
  74.         DisplayOneChar(4,4,a[ad/100%10]);                //顯示字庫中的中文數字
  75.                 DisplayOneChar(3,4,a[ad/1000]);                //顯示字庫中的中文數字

  76.         }


  77. }

  78. /***********寫數據********************************************************/
  79. void WriteDataLCD(unsigned char WDLCD)
  80. {
  81.         ReadStatusLCD(); //檢測忙
  82.         LCD_RS = 1;
  83.         LCD_RW = 0;
  84.         LCD_Data = WDLCD;
  85.         LCD_E = 1;
  86.         LCD_E = 1;
  87.         LCD_E = 1;
  88.         LCD_E = 0;
  89. }

  90. /***********寫指令********************************************************/
  91. void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC為0時忽略忙檢測
  92. {
  93.         if (BuysC) ReadStatusLCD(); //根據需要檢測忙
  94.         LCD_RS = 0;
  95.         LCD_RW = 0;
  96.         LCD_Data = WCLCD;
  97.         LCD_E = 1;
  98.         LCD_E = 1;
  99.         LCD_E = 1;
  100.         LCD_E = 0;  
  101. }

  102. /***********讀數據********************************************************/
  103. unsigned char ReadDataLCD(void)
  104. {
  105.         unsigned char LCDDA;
  106.         LCD_RS = 1;
  107.         LCD_RW = 1;
  108.         LCD_E = 1;
  109.         LCD_E = 1;
  110.         LCDDA=LCD_Data;
  111.         LCD_E = 0;
  112.         return(LCDDA);
  113. }

  114. /***********讀狀態*******************************************************/
  115. unsigned char ReadStatusLCD(void)
  116. {
  117.         LCD_Data = 0xFF;
  118.         LCD_RS = 0;
  119.         LCD_RW = 1;
  120.         LCD_E = 1;
  121.         LCD_E = 1;
  122.         while (LCD_Data & Busy); //檢測忙信號       
  123.         LCD_E = 0;
  124.         return(1);
  125. }

  126. /***********初始化********************************************************/
  127. void LCDInit(void)
  128. {
  129.         WriteCommandLCD(0x30,1); //顯示模式設置,開始要求每次檢測忙信號
  130.         WriteCommandLCD(0x01,1); //顯示清屏
  131.         WriteCommandLCD(0x06,1); // 顯示光標移動設置
  132.         WriteCommandLCD(0x0C,1); // 顯示開及光標設置
  133. }

  134. /***********清屏********************************************************/       
  135. void LCDClear(void)
  136. {
  137.         WriteCommandLCD(0x01,1); //顯示清屏
  138.         WriteCommandLCD(0x34,1); // 顯示光標移動設置
  139.         WriteCommandLCD(0x30,1); // 顯示開及光標設置
  140. }

  141. /***********閃爍效果********************************************************/
  142. void LCDFlash(void)
  143. {
  144.         WriteCommandLCD(0x08,1); //顯示清屏
  145.         Delay400Ms();
  146.         WriteCommandLCD(0x0c,1); // 顯示開及光標設置
  147.         Delay400Ms();
  148.         WriteCommandLCD(0x08,1); //顯示清屏
  149.         Delay400Ms();
  150.         WriteCommandLCD(0x0c,1); // 顯示開及光標設置
  151.         Delay400Ms();
  152.         WriteCommandLCD(0x08,1); //顯示清屏
  153.         Delay400Ms();
  154. }

  155. /***********按指定位置顯示一個字符*******************************************/       
  156. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  157. {
  158.         if(Y<1)
  159.                 Y=1;
  160.         if(Y>4)
  161.                 Y=4;
  162.         X &= 0x0F;                         //限制X不能大于16,Y不能大于1
  163.         switch(Y){
  164.         case 1:X|=0X80;break;
  165.         case 2:X|=0X90;break;
  166.         case 3:X|=0X88;break;
  167.         case 4:X|=0X98;break;
  168.         }
  169.         WriteCommandLCD(X, 0); //這里不檢測忙信號,發送地址碼
  170.         WriteDataLCD(DData);
  171. }

  172. /***********按指定位置顯示一串字符*****************************************/
  173. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
  174. {
  175.         unsigned char ListLength,X2;
  176.         ListLength = 0;
  177.         X2=X;
  178.         if(Y<1)
  179.                 Y=1;
  180.         if(Y>4)
  181.                 Y=4;
  182.         X &= 0x0F;                                 //限制X不能大于16,Y在1-4之內
  183.         switch(Y){
  184.         case 1:X2|=0X80;break;        //根據行數來選擇相應地址
  185.         case 2:X2|=0X90;break;
  186.         case 3:X2|=0X88;break;
  187.         case 4:X2|=0X98;break;
  188.         }
  189.         WriteCommandLCD(X2, 1);         //發送地址碼
  190.           while (DData[ListLength]>=0x20){ //若到達字串尾則退出
  191.                    if (X <= 0x0F){                         //X坐標應小于0xF
  192.                      WriteDataLCD(DData[ListLength]);
  193.                      ListLength++;
  194.                          X++;
  195.                          delay(10);
  196.             }
  197.           }
  198. }


  199. /***********短延時********************************************************/
  200. void Delay5Ms(void)
  201. {
  202.         unsigned int TempCyc = 5552;
  203.         while(TempCyc--);
  204. }

  205. /***********長延時********************************************************/
  206. void Delay400Ms(void)
  207. {
  208.         unsigned char TempCycA = 5;
  209.         unsigned int TempCycB;
  210.         while(TempCycA--){
  211.                   TempCycB=7269;
  212.                   while(TempCycB--);
  213.         }
  214. }
  215. void delay(uchar n)
  216. {
  217. uchar i;
  218. for(i=0;i<n;i++)
  219. {
  220.    _nop_();
  221. }
  222. }
復制代碼

所有資料51hei提供下載:
119128631ADtlc2543P12864.zip (33.83 KB, 下載次數: 61)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:464705 發表于 2019-5-8 01:54 來自手機 | 只看該作者
數據穩定嗎
回復

使用道具 舉報

板凳
ID:82419 發表于 2019-6-5 12:32 來自手機 | 只看該作者
這個有驗證過哦?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩中文字幕 | 九九伦理片 | 国产区高清 | 亚洲 自拍 另类 欧美 丝袜 | 伊人久久免费视频 | 国产一区二区三区在线看 | 国产精品一区二区av | 久久亚洲天堂 | 天天久久 | 国产精品视频久久久久 | 午夜日韩视频 | 欧美激情精品久久久久久 | 人人看人人草 | 国产精品久久久久久久久久了 | 国产清纯白嫩初高生在线播放视频 | 一区二区日韩 | 日韩a | 一区二区手机在线 | 久久九精品 | 欧美成视频 | 国产精品久久av | 91国内外精品自在线播放 | 老司机成人在线 | 美国av毛片| 国产免费一区 | 亚洲精品在线看 | 日韩在线观看一区 | 中文字幕国产日韩 | 毛片大全 | 精品一区二区在线观看 | 成人精品一区二区 | 免费一看一级毛片 | www.伊人.com| 久久99一区二区 | 久久一区二区精品 | 免费国产视频 | 综合国产 | 人人做人人澡人人爽欧美 | 免费观看黄网站 | se婷婷 | 99在线视频观看 |