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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC15F2K60S2單片機數字電壓表制作(不用外圍A/D換換)附源程序

[復制鏈接]
跳轉到指定樓層
樓主
最近做了一個用STC15系列單片機內部A/D轉換做的數字電壓表,1602顯示。就想著實現硬件很少,就做著玩玩。

制作出來的實物圖如下:



把硬件原理圖及源程序資料分享一下
  1. #include <STC15F2K60S2.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. unsigned char data adc_datah; //定義保存AD轉換結果的絕對地址
  6. unsigned char data adc_datal;

  7. #define LCD1602_DB P2
  8. sbit LCD1602_RS = P4^1;
  9. sbit LCD1602_RW = P4^2;
  10. sbit LCD1602_E = P4^4;

  11. unsigned long int mn0,mn1,mn3,mn4,mn5,mn6,mn7;

  12. void InitLcd1602();
  13. void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
  14. uchar *tab0[10]={"0","1","2","3","4","5","6","7","8","9"};

  15.   /*** 等待液晶準備好***/
  16. void LcdWaitReady()
  17.         {
  18.             unsigned char sta;
  19.             LCD1602_DB = 0xFF;
  20.             LCD1602_RS = 0;
  21.             LCD1602_RW = 1;
  22.             do         {
  23.                 LCD1602_E = 1;
  24.                 sta = LCD1602_DB;                 //讀取狀態字
  25.                 LCD1602_E = 0;
  26.                     }while (sta & 0x80);         //bit7 等于 1 表示液晶正忙,重復檢測直到其等于 0 為止
  27.         }
  28. /* 向 LCD1602 液晶寫入一字節命令,cmd-待寫入命令值 */
  29. void LcdWriteCmd(unsigned char cmd)
  30.         {
  31.             LcdWaitReady();
  32.             LCD1602_RS = 0;
  33.             LCD1602_RW = 0;
  34.             LCD1602_DB = cmd;
  35.             LCD1602_E = 1;
  36.             LCD1602_E = 0;
  37.         }
  38. /* 向 LCD1602 液晶寫入一字節數據,dat-待寫入數據值 */
  39. void LcdWriteDat(unsigned char dat)
  40.         {
  41.             LcdWaitReady();
  42.             LCD1602_RS = 1;
  43.             LCD1602_RW = 0;
  44.             LCD1602_DB = dat;
  45.             LCD1602_E = 1;
  46.             LCD1602_E = 0;
  47.         }
  48. /* 設置顯示 RAM 起始地址,亦即光標位置,(x,y)-對應屏幕上的字符坐標 */
  49. void LcdSetCursor(unsigned char x, unsigned char y)
  50.         {
  51.             unsigned char addr;
  52.             if (y == 0){ //由輸入的屏幕坐標計算顯示 RAM 的地址
  53.                 addr = 0x00 + x; //第一行字符地址從 0x00 起始
  54.             }else{
  55.                 addr = 0x40 + x; //第二行字符地址從 0x40 起始
  56.             }
  57.             LcdWriteCmd(addr | 0x80); //設置 RAM 地址
  58.         }
  59. /* 在液晶上顯示字符串,(x,y)-對應屏幕上的起始坐標,str-字符串指針 */
  60. void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
  61.         {
  62.             LcdSetCursor(x, y); //設置起始地址
  63.             while (*str !=0)
  64.                 { //連續寫入字符串數據,直到檢測到結束符
  65.                 LcdWriteDat(*str++); //先取 str 指向的數據,然后 str 自加 1
  66.             }
  67.         }
  68. /* 初始化 1602 液晶 */
  69. void InitLcd1602()
  70.         {
  71.             LcdWriteCmd(0x38); //16*2 顯示,5*7 點陣,8 位數據接口
  72.             LcdWriteCmd(0x0C); //顯示器開,光標關閉
  73.             LcdWriteCmd(0x06); //文字不動,地址自動+1
  74.             LcdWriteCmd(0x01); //清屏
  75.         }
  76. void UartInit()                //9600bps@11.0592MHz
  77. {
  78.         SCON = 0x50;                //8位數據,可變波特率
  79.         AUXR |= 0x40;                //定時器1時鐘為Fosc,即1T
  80.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
  81.         TMOD &= 0x0F;                //設定定時器1為16位自動重裝方式
  82.         TL1 = 0xE0;                //設定定時初值
  83.         TH1 = 0xFE;                //設定定時初值
  84.         ET1 = 0;                //禁止定時器1中斷

  85.         ES=1;
  86.         EA=1;
  87.          TR1 = 1;                //啟動定時器1
  88. }                 

  89. void Usart_init() interrupt 4
  90. {
  91. uint dataa;
  92. dataa=SBUF;
  93. mn3=dataa;
  94. RI=0;
  95. //SBUF=dataa;
  96. while(!TI);
  97. TI=0;

  98. }
  99. void main()
  100.         {
  101.         uint dataa;
  102.         UartInit();
  103.         InitLcd1602();
  104.     LcdShowStr(0, 0,"home:");
  105.         while(1)
  106.         {
  107.         
  108. //        mn3=123;
  109.     LcdShowStr(6, 0,tab0[mn3/100]);
  110.         LcdShowStr(7, 0,tab0[(mn3%100)/10]);
  111.         LcdShowStr(8, 0,tab0[mn3%10]);        

  112.         }
  113.         }
復制代碼
設計文檔51hei下載:
基于STC15數字電壓表設計.doc (3.37 MB, 下載次數: 92)

評分

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

查看全部評分

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

使用道具 舉報

5#
ID:852236 發表于 2020-12-2 22:10 | 只看該作者
不知道AD部分怎么寫
回復

使用道具 舉報

地板
ID:848043 發表于 2020-11-23 22:49 | 只看該作者
這能用C++來寫嗎?
回復

使用道具 舉報

板凳
ID:97023 發表于 2020-11-20 15:04 | 只看該作者
在軟件中,沒有ADC模塊的部分。
回復

使用道具 舉報

沙發
ID:592145 發表于 2020-8-11 18:11 | 只看該作者
LCD1602可以正常顯示?STC15F2K60S2的運行速度不是比LCD1602快嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产高清在线精品 | 91麻豆精品国产91久久久更新资源速度超快 | 国产精品久久久久久久久久免费 | 国产欧美日韩一区 | 久久久久久久久久久久久久国产 | 不卡一区二区在线观看 | 久久9热| 亚洲欧美精品一区 | 日韩成人在线网站 | 中文一区 | 亚洲成人天堂 | 亚洲精品久久区二区三区蜜桃臀 | 久久久久久国产精品免费免费狐狸 | 中文字幕一区二区三区四区五区 | 亚洲网站在线观看 | 亚洲欧美一区二区三区在线 | 亚洲国产成人av好男人在线观看 | 97久久精品午夜一区二区 | 亚洲狠狠丁香婷婷综合久久久 | 在线亚洲精品 | 国产91丝袜在线播放 | 国产精品精品久久久 | 99久久99 | 国产有码 | 久久久久亚洲精品中文字幕 | 亚洲日本三级 | 国产成人99久久亚洲综合精品 | 日本国产一区二区 | 成人做爰9片免费看网站 | 成人免费小视频 | 国产精品视频不卡 | 国产日屁| 性生活毛片 | 国产在线精品一区二区三区 | 国产亚洲一区二区三区 | 国产日产精品一区二区三区四区 | 色秀网站| 91视频麻豆 | 精品一区二区电影 | a黄视频| 精品欧美一区二区三区精品久久 |