首页
学习
活动
专区
工具
TVP
发布

长师电信专业2016级单片机实验11 C源码

我对单片机这个课程产生了怀疑,开这个到底有啥意思?进度实在是太快了,还有。啥都给出来了,还学什么?

仔细想了一下,快要结束了哈,我这个公众号,到底是在干什么啊~……,后面该回归正轨了

//源码来源:SoloShine丶,算法:Ms Mao

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define out P0//引用头文件和定义宏

sbit RS=P2^0;

sbit RW=P2^1;

sbit E=P2^2; //定义LCD的引脚

sbit adcs=P1^0; //定义ADC0832的引脚

sbit adclk=P1^1;

sbit adio=P1^2;

uchar adc0,adc1; //定义变量保存转换后的数字量

void delay(uint j) //延时,用于LCD控制

{

uchar i=250;

for(;j>0;j--)

{

while(--i);

i=249;

while(--i);

i=250;

}

}

void check_busy(void)//查忙

{

uchar dt;

do

{

dt=0xff;

E=0;

RS=0;

RW=1;

E=1;

dt=out;

}while(dt&0x80);

E=0;

}

void w_lcdcom(uchar com) //写LCD命令数据

{

check_busy();

E=0;

RS=0;

RW=0;

out=com;

E=1;

_nop_();

E=0;

delay(1);

}

void w_lcddat(uchar dat)//写LCD一个字符数据

{

check_busy();

E=0;

RS=1;

RW=0;

out=dat;

E=1;

_nop_();

E=0;

delay(1);

}

void initlcd()//初始化LCD

{

w_lcdcom(0x38);

w_lcdcom(0x0c);

w_lcdcom(0x06);

w_lcdcom(0x01);

delay(1);

}

void w_lcdstr(uchar *s)//写LCD字符串

{

while(*s>0)

w_lcddat(*s++);

}

uchar r_adc0832(uchar adch)//选择通道,读ADC0832一个字节数据

{

uchar i;

uchar dat=0;

adio=1; //ADC0832初始化

_nop_();

adcs=0; //片选有效

_nop_();

for(i=0;i

{

adclk=1;

_nop_();

adclk=0;

_nop_();

adio=adch&0x01;

_nop_();

} //通道选择结束

adclk=1; //读数据前的初始化

_nop_();

adclk=0;

_nop_();

adio=1;

_nop_();

for(i=0;i

{

if(adio)dat|=0x01;

adclk=1;

_nop_();

adclk=0;

_nop_();

} //读数据结束

adcs=1; //片选无效

adclk=0;

adio=1;

return (dat);

}

void main()//主程序

{

initlcd();//初始化LCD

w_lcdcom(0x84);//置光标到第1行第4列

w_lcdstr("U1=");//显示字符串“U1=”

w_lcdcom(0xc4);//置光标到第2行第4列

w_lcdstr("U2=");//显示字符串“U2=”

while(1)

{

adc0=r_adc0832(1); //读ADC0832通道CH0的数据

adc1=r_adc0832(3); //读ADC0832通道CH1的数据

w_lcdcom(0x87); //置光标到第1行第7列

w_lcddat(adc0/51|0x30); //显示通道CH0的十位

w_lcddat('.');

w_lcddat((adc0%51)*10/51|0x30); //显示通海CH0的十分位

w_lcddat((((adc0%51)*10%51)*10)/51|0x30); //显示通道CH0的百分位

w_lcddat('V');

w_lcdcom(0xc7); //置光标到第2行第7列

w_lcddat(adc1/51|0x30); //显示通道CH1的十位

w_lcddat('.');

w_lcddat((adc1%51)*10/51|0x30); //显示通海CH1的十分位

w_lcddat((((adc1%51)*10%51)*10)/51|0x30); //显示通道CH1的百分位

w_lcddat('V');

}

}

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180606G1Y6UR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券