原打算先调试好UART模块后再进行后续的其它实验,但上次实验(UART)过程中出现了不少问题,主要表现为SC-LINK无法在开启UART0串口后下载程序。开始时在串口助手软件中将串口关闭能够下载,但后面的过程中时好时坏;必须将USB转TTL模块拔下后才能下载,同时SC-LINK上的红色LED会莫名其妙地熄灭,也必须重新拔插后才能工作,更为严重的是还出现过三次蓝屏。不知道是不是我的电脑有什么问题,最后放弃了利用UART进行实验而改为使用手头上的一块由HT1621驱动的6位段式液晶屏进行交互。本实验通过SC92F8003的ADC输入口AIN3对LM35随温度变化的电压值进行采样,并同时出液晶屏时行显示。
一、实验环境
1、Keil MDK51 9.59
2、SC-LINK
3、SC92F8003的DEMO硬件板
4、自制LM35模块
5、6位段式液晶屏(HT1621)
二、实验过程
1、利用SC92F8003的P2.2、P2.3、P2.4分别对HT1621的CS、WR、DATA进行控制,要注意的是将此三个端口设置为输出状态;
- //HT1621控制位(液晶模块接口定义,根据自已的需要更改)
- sbit HT1621_CS = P2^2; //HT1621使能引脚
- sbit HT1621_WR = P2^3; //HT1621时钟引脚
- sbit HT1621_DAT = P2^4; //HT1621数据引脚
- void Ht1621PortInit(void)
- {
- P2CON |= 0X1C;
- }
2、LM35是一只温度传感器,之前买来一直没用上,这次将其固定在一小块洞洞板上并加了一只104的电容在电源脚;
它的输出端接在了芯片的PIN20(AIN3),利用片内的ADC模块对其随温度变化输出的电压值进行采集,程序是在官方DEMO的基础上进行了小调整;
- #include "adc.h"
- unsigned int ADCValue=0x0000;//ADC转换结果全局变量
- bit AdcFlag = 0;
- /*****************************************************
- *函数名称:void GetAdcData(void)
- *函数功能:获取ADC端口采集到的数据
- *入口参数:void
- *出口参数:void
- *****************************************************/
- unsigned int GetAdcData(void)
- {
- ADCCON |= 0X40; //开始ADC转换
- while(!AdcFlag); //等待 ADC转换完成;
- AdcFlag = 0;
- return ADCValue = ((unsigned int)ADCVH<<4)+(ADCVL>>4); //取得 AD转换值
- }
- /*****************************************************
- *函数名称:void AdcInit(void)
- *函数功能:ADC初始化
- *入口参数:void
- *出口参数:void
- *****************************************************/
- void AdcInit(void)
- {
- ADCCON |= 0X83; //开启ADC,选择AIN3为ADC采样口0X9F;//
- ADCCFG0 |= 0x08; //设置Channel作为采样口
- ADCCFG1 = 0x04; //设置ADC时钟频率为Fosc/8
- IE = 0X40; //开启ADC中断
- EA = 1;
- }
- void AdcInterrupt(void) interrupt 6
- {
- ADCCON &= ~(0X20); //清中断标志位
- AdcFlag = 1;
- }
3、在主函数中,将通过AIN3采集由LM35输出的数据并出段式液晶进行显示;
- #include <SC92F8003_C.H>
- #include "adc.h"
- #include "ht1621.h"
- void main(void)
- {
- AdcInit();
- Ht1621_Init();
- DelayMS(1000);
- Ht1621WrAllData(0,Ht1621Tab,16); //清屏
- //LcdDisplay(123456); //测试LCD
- while(1)
- {
- GetAdcData();
- LcdDisplay(GetAdcData());
- DelayMS(3000);
- }
- }
4、实验现象
1、液晶显示测试
2、最终显示
三、总结
本次实验中只是简单地将从LM35采集到的数据直接送显,程序中并没有对数据进行滤波优化,再加之杜帮线连接的原因造成数字跳动较大,这一点是必须要改进的。
|