/*
(1)编写SPI总线通信程序和数码管显示程序
(2)编写xpt2046控制程序,实现AD转换。
(3)编写PWM控制,实现LED灯亮度联动。
*/
#include "reg52.h"
#include "XPT2046.h"
uchar DisplayData[8];
sbit LSA=P2^2; //LSA、LSB、LSC共同控制显示数码管
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit PWM=P2^0;//定义使用的IO口
uchar step=50; //总共级别数
int result=0; //获取的电阻的值
int timer=0; //中断次数计数器变量
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9
void delay(int i) //延时
{
while(i--);
}
/****************************************************************************
*函数名:initTimer()
*输 入:无
*输 出:
*功 能:初始化定时器
****************************************************************************/
void initTimer()
{
TMOD=0X01;//晶振11.0592,定时器定时方式1
TH0=0XFF; //250ms
TL0=0X06;
EA=1;//开总中断
ET0=1;//开定时器中断
TR0=1;//开定时器
}
/****************************************************************************
*函数名:timer0() interrupt 1 using 3
*输 入:无
*输 出:
*功 能:定时器中断函数
****************************************************************************/
void timer0() interrupt 1 using 3
{
int grade=result/80; //共分为4000/80=50个级别,用grade表示当前级别
TH0=0xFF; //恢复定时器初始值
TL0=0x06;
timer++; //定时器自加
if(timer>grade)
{
PWM=1; //灯灭(查看指导手册,高电平灭)
}
else
PWM=0;
if(timer==step) //当timer达到级别数后,timer重置为0
{
timer=0;
}
}
/****************************************************************************
*函数名:datapros(int result)
*输 入:无
*输 出:
*功 能:将滑动变阻器的结果转换到数码管上
****************************************************************************/
void datapros(int result)
{
DisplayData[0] = smgduan[result / 1000 % 10];
DisplayData[1] = smgduan[result / 100 % 10];
DisplayData[2] = smgduan[result / 10 % 10];
DisplayData[3] = smgduan[result % 10];
}
/****************************************************************************
*函数名:DigDisplay()
*输 入:无
*输 出:
*功 能:显示数码管上内容
****************************************************************************/
void DigDisplay()
{
uchar i;
for(i=0;i<4;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
}
P0=DisplayData[3-i];//发送数据
delay(100); //间隔一段时间扫描
P0=0x00;//消隐
}
}
/****************************************************************************
*函数名:main()
*输 入:无
*输 出:
*功 能:初始化定时器,等待中断,获取模拟信号,转换为数字信号并显示
****************************************************************************/
int main()
{
initTimer(); //调用初始化定时器,等待中断
while(1)
{
result= Read_AD_Data(0x94); //AIN0:检测转换电位器模拟信号,控制字命令寄存器值为0x94或者0xB4
datapros(result);
DigDisplay();
}
}
51单片机实现AD转换和PWM。通过AD转换实现将滑动变阻器的值显示在数码管上,使用PWM实现让51单片机上的灯的亮度的改变
需积分: 31 72 浏览量
2018-12-18
19:52:08
上传
评论 13
收藏 2KB RAR 举报
helloworld1808319440
- 粉丝: 5
- 资源: 3
最新资源
- CVE-2019-0708漏洞检测与利用工具
- STM32单片机FPGA毕设电路原理论文报告利用c8051f020系列单片机实现智能仪器开发
- STM32单片机FPGA毕设电路原理论文报告利用8位单片机实现与Internet网络通信应用研究
- STM32单片机FPGA毕设电路原理论文报告利用80C196单片机测量三相异步电动机功率因数
- STM32单片机FPGA毕设电路原理论文报告力学传感器与单片机的接口设计
- p107-u07FLT2.wav
- STM32单片机FPGA毕设电路原理论文报告雷达幅频特性测试仪的智能化研究
- STM32单片机FPGA毕设电路原理论文报告可组网电子温湿度测量仪的设计与实现
- STM32单片机FPGA毕设电路原理论文报告可在单片机上实现的语音混沌保密通信方法
- STM32单片机FPGA毕设电路原理论文报告可实现的基于MCS51单片机的恒温控制系统的设计
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈