標(biāo)題: 基于單片機(jī)的數(shù)字電壓表 [打印本頁(yè)]
作者: 你在嗎 時(shí)間: 2021-1-16 17:07
標(biāo)題: 基于單片機(jī)的數(shù)字電壓表
#include <reg52.h>
#include<intrins.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char
sbit adcs=P3^2; //端口定義
sbit adwr=P3^6;
sbit adrd=P3^7;
sbit RS = P3^5;
sbit RW = P3^6;
sbit E= P3^4;
uint Result_ADC0804; //轉(zhuǎn)換結(jié)果變量
uchar Display_Buffer[2][16] ={{"CurrentVoltage:"},{"(CH)=0.00V"}}; //函數(shù)聲明
uchar Get_Value_ADC0804(); //獲取指定通道A/D轉(zhuǎn)換結(jié)果
void Refesh_Disp_Buffer(); //刷新顯示緩沖
void LCD_Busy_Check(); //忙檢查
void LCD_Write_Command(uchar cmd); //向lcd寫入命令
void Write_LCD_Data(uchar dat); //向lcd寫入數(shù)據(jù)
void Initialize_LCD1602(); //液晶初始化函數(shù)
void LCD_Display(uchar str[]); //在lcd上顯示字符串
void DelayMS(uint X); //延時(shí)
uchar Read_State(); //讀取lcd的狀態(tài)
void main() //主程序
{uchar j;
Initialize_LCD1602(); //液晶初始化函數(shù)
while(1) //循環(huán)顯示
{
for(j=0;j<2;j++)
{
Get_Value_ADC0804(); //A/D轉(zhuǎn)換
Refesh_Disp_Buffer(); //刷新顯示緩沖
if (j==0)
{
LCD_Write_Command(0x80); //寫lcd命令,設(shè)置從第0行位置開始顯示
LCD_Display(Display_Buffer[j]); //在lcd上顯示字符串
}
else
{
LCD_Write_Command(0xC0); //寫命令,設(shè)置從第1行位置開始顯示
LCD_Display(Display_Buffer[j]); //在lcd上顯示字符串
}
}}}
uchar Get_Value_ADC0804() //獲取指定通道的A/D轉(zhuǎn)換結(jié)果
{adcs=0; //片選信號(hào)輸入端,低電平有效
adwr=0; //開始寫入信號(hào)
_nop_();_nop_(); //2個(gè)機(jī)器周期,將寫入的模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)
adwr=1; //關(guān)閉寫入
DelayMS(1); //延時(shí)
adrd=0; //輸出信號(hào)
_nop_();_nop_(); //2個(gè)機(jī)器周期,將轉(zhuǎn)換的信號(hào)輸出到P1端口
Result_ADC0804=P1; //將輸出的信號(hào)賦給Result_ADC0804
adrd=1; //關(guān)閉輸出
DelayMS(1); //延時(shí)
adcs=1;
}
void Refesh_Disp_Buffer() //刷新顯示脈沖
{
uint t=(Result_ADC0804*500.0)/255; //將A/D輸出的結(jié)果轉(zhuǎn)換為2進(jìn)制數(shù)
Display_Buffer[1][5] = t/100+'0'; //顯示個(gè)位
Display_Buffer[1][7] = t/10%10+'0'; //顯示十分位
Display_Buffer[1][8] = t%10+'0'; //顯示百分位
}
void DelayMS(uint X) //延時(shí)程序
{
uchar i;
while(X--)
for(i=0;i<120;i++); //延時(shí)10us
}
uchar Read_State() //讀取lcd的狀態(tài)
{uchar state;
RS=0;
RW=1;
E=1; //RS=0,RW=1,E=1 讀狀態(tài)
state=P0; //輸出D0~D7
DelayMS(1);
E=0;
DelayMS(1);
return state;
}
void LCD_Busy_Check() //忙等待
{while(Read_State()&&0x80!=0x80);
DelayMS(1);
}
void LCD_Write_Command(uchar cmd) //向lcd寫入命令
{
LCD_Busy_Check(); //忙等待
RS=0;
RW=0;
P0=cmd; //將命令賦給P0端口
E=1; //RS=0,RW=0,E=1 寫指令
E=0;
}
void Write_LCD_Data(uchar dat) //向lcd寫入數(shù)據(jù)
{
LCD_Busy_Check();
RS=1;
RW=0;
P0=dat;
E=1; //RS=1,RW=0,E=1 寫數(shù)據(jù)
DelayMS(1);
E=0;
}
void Initialize_LCD1602() //lcd初始化
{
LCD_Write_Command(0x38);DelayMS(1); //功能設(shè)置,數(shù)據(jù)長(zhǎng)度為8位,雙行顯示,5*7點(diǎn)陣
LCD_Write_Command(0x0C);DelayMS(1); //顯示開,關(guān)光標(biāo)
LCD_Write_Command(0x06);DelayMS(1); //字符進(jìn)入模式:屏幕不動(dòng),字符后移
LCD_Write_Command(0x01);DelayMS(1); //清屏
}
void LCD_Display(uchar str[]) //在lcd上顯示字符串
{
uchar k;
for(k=0;k<=strlen(str);k++)
{
Write_LCD_Data(str[k]); //依次在lcd上顯示字符串
DelayMS(1);
}
}
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
国产日产精品一区二区三区四区
|
亚洲成人中文字幕
|
久久久久国产精品
|
在线中文字幕av
|
欧美一区二
|
中文字幕亚洲一区二区三区
|
欧美精品一区在线
|
日韩精品成人一区二区三区视频
|
美女视频.
|
99reav|
成人免费观看男女羞羞视频
|
欧美国产日韩在线
|
在线观看视频亚洲
|
中文字幕在线观
|
av官网在线|
精品一区二区免费视频
|
国产精品69久久久久水密桃
|
免费人成在线观看网站
|
中文字幕加勒比
|
日日日干干干
|
国产在线视频在线观看
|
91精品国产91久久久久久吃药
|
日日夜夜精品视频
|
久久福利电影
|
久久成人精品一区二区三区
|
亚洲精品久久久9婷婷中文字幕
|
亚洲精品中文字幕在线
|
国产精品一区免费
|
中文字幕电影在线观看
|
国产美女自拍视频
|
97影院在线午夜
|
91热爆在线观看
|
国户精品久久久久久久久久久不卡
|
欧美一区二区三区在线看
|
中国大陆高清aⅴ毛片
|
91看国产
|
国产女人与拘做受视频
|
性欧美精品一区二区三区在线播放
|
久久久久久久一区
|
精品国产一二三区
|
久久久久久久久久爱
|