📄 max191_mcu.c
字号:
#include<reg51.h>
#include<absacc.h>
#include <intrins.h>
#define unchar unsigned char
#define unint unsigned int
#define LCDDATA P0
//MAX191工作在ROM Mode 方式
//对外中断1采用了查询方式,中断方式还得再试验
//12位AD精度有了,可是速度是一个问题,
//按现在的用法,转换时间为12uS,再算上数据处理时间(包括数据存储、显示等),对模拟信号的采样频率估计最快也就是
//几十KHz(只考虑转换时间和存储在RAM中所需时间)
sbit RS=P1^5;
sbit RW=P2^1;
sbit EN=P1^7;
sbit P3_3=P3^3;
unchar xdata *AD;
unint dataa;
void delay20us(void)
{
unchar n;
for(n=0;n<15;n++);
}
void delay15ms(void)
{
unint n;
for(n=0;n<4800;n++);
}
void delay100us(void)
{
unchar n;
for(n=0;n<100;n++);
}
void delay10ms(void)
{
unint n;
for(n=0;n<30000;n++);
}
void lcd_write_command(unchar c) //向LCD模块的命令寄存器写一个字节c。
{
RS=0;
RW=0;
EN=0;
delay20us();
EN=1;
delay20us();
LCDDATA=c;
delay20us();
EN=0;
delay20us();
}
void lcd_write_data(unchar ddata) //向LCD模块的字符发生器或显存写一个字节data。
{
RS=1;
RW=0;
EN=0;
delay20us();
EN=1;
delay20us();
LCDDATA=ddata;
delay20us();
EN=0;
delay20us();
RS=0;
}
void lcd_init() //初始化LCD模块。
{
lcd_write_command(0x30);
delay100us();
lcd_write_command(0x0c);
delay100us();
lcd_write_command(0x01);
delay15ms();
lcd_write_command(0x06);
delay100us();
}
void main()
{
unchar a,d_h,d_l;
lcd_init();//初始化
AD=0x4000;
while(1)
{
a=*AD;//WR下跳沿启动
_nop_();
while(P3_3==1);
AD=0x4100;
d_h=*AD;
AD=0x4000;
d_l=*AD;
dataa=d_h*0x0100+d_l;
lcd_write_command(0x90); //设置光标在第二行第2个字符位置
delay100us();
lcd_write_data(0xb5);
delay100us();
lcd_write_data(0xe7);
delay100us();
lcd_write_data(0xd1);
delay100us();
lcd_write_data(0xb9);
delay100us();
lcd_write_data(0x3a);
delay100us();
lcd_write_data(0x30+dataa/1000);
delay100us();
dataa=dataa%1000;
lcd_write_data(0x30+dataa/100);
delay100us();
dataa=dataa%100;
lcd_write_data(0x30+dataa/10);
delay100us();
dataa=dataa%10;
lcd_write_data(0x30+dataa);
delay100us();
lcd_write_data(0x6d);
delay100us();
lcd_write_data(0x76);
delay100us();
delay10ms();
AD=0x4000;//对液晶的操作可能会改变p2的值,所以AD的地址需要重新赋值
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -