四、 实验所用源程序
#include
#define LEDCPU_dir DDRK_DDRK4 unsigned char AD_in1,AD_in0;
/*************************************************************/ /* 初始化AD模块 */ /*************************************************************/ void INIT_AD(void) {
ATD0CTL2 = 0x40; //启动A/D模块,快速清零,禁止中断 ATD0CTL1_SRES=0; //选用8位模数转换 ATD0CTL3 = 0x88; //每次只转换一个通道
ATD0CTL4 = 0x01; //AD模块时钟频率为2MHz }
/*************************************************************/ /* 起动AD转换 */ /*************************************************************/ unsigned char AD_capture(unsigned char s) {
unsigned char AD_data; switch(s) {
case 1:
ATD0CTL5 = 0x01; //转换AD01 while(!ATD0STAT2_CCF0); AD_data = ATD0DR0L; break; case 2:
ATD0CTL5 = 0x00; //转换AD00 while(!ATD0STAT2_CCF0); AD_data = ATD0DR0L; break; }
return(AD_data); }
/*************************************************************/ /* 延时函数 */ /*************************************************************/ /*************************************************************/ /* 主函数 */ /*************************************************************/ void main(void) { DisableInterrupts; LEDCPU_dir = 1; INIT_AD();
EnableInterrupts; LEDCPU = 0; for(;;) {
AD_in1 = AD_capture(1); AD_in0 = AD_capture(2); if(AD_in1 > AD_in0) for(;;) {
LEDCPU = 0; delay(); LEDCPU = 1; delay(); } else
LEDCPU = 1; } }
五、 实验流程图
六、 总结
1) 2)
掌握AD转换的基本原理。将输入电压信号同标定信号作二分式比较,如8位就是进行8 次二分比较 对通道进行选择控制,对转换位数可选,对转换量进行比较,并通过led 的亮灯情况输出比较结果,实现人的观察。
实验三 液晶显示实验
一、实验目的
掌握12864液晶模块的使用。
二、实验内容
1、实验原理
XS128开发板上设计了一个带文字库的12864汉显液晶模块。本开发板上的液晶模块有并口和IIC串口操作两种模式。本实验对12864液晶模块进行了并口和模拟IIC串口的操作。 2、实验步骤
2.1并口操作液晶
(1)将液晶模块插到电路板上的J_LCD1接口上。将BDM下载器连接到开发板上,打开开发板电源。
(2)打开光盘文件中的“演示代码\\并口液晶\\IO_LCD.mcp”。
(3)点击Debug按钮,将源代码下载到单片机中,进入调试窗口,将原程序进行一定的修改。
(4)点击调试窗口的Start按钮,程序开始执行。
(5)观察实验现象,液晶屏上显示出《三字经》部分内容,按下按键“KEY1”文字上翻,按下按键“KEY2”文字下翻。 2.2模拟IIC串口操作液晶
(1)将液晶模块插到电路板上的J_LCD1接口上。将BDM下载器连接到开发板上,打开开发板电源。
(2)打开光盘文件中的“演示代码\\并口液晶\\IIC_LCD.mcp”。
(3)点击Debug按钮,将源代码下载到单片机中,进入调试窗口,将原程序进行一定的修改。
(4)点击调试窗口的Start按钮,程序开始执行。
(5)观察实验现象,液晶屏上显示出《三字经》部分内容,按下按键“KEY1”文字上翻,按下按键“KEY2”文字下翻。
三、实验原理图
四、实验所用源程序(下划线部分为改动部分)
}#include
#define LEDCPU_dir DDRK_DDRK4 #define KEY1 PTIH_PTIH3 #define KEY2 PTIH_PTIH2
#define KEY1_dir DDRH_DDRH3 #define KEY2_dir DDRH_DDRH2 #define BUS_CLOCK 32000000 //总线频率 #define OSC_CLOCK 16000000 //晶振频率 char *poem[11] = { \人之初\\性本善\\性相近\\习相远\\苟不教\\性乃迁\\教之道\\贵以专\\昔孟母\\择邻处\\} ;
unsigned char single = 0; //液晶翻页的标志符
/*************************************************************/ /* 初始化锁相环 */ /*************************************************************/ /************************************************************/ /* 初始化ECT模块 */ /************************************************************/ /*************************************************************/ /* 初始化按键 */ /*************************************************************/ void init_key(void) {
KEY1_dir =0; //设置为输入 KEY2_dir=0; PPSH = 0x00; //极性选择寄存器,选择下降沿; PIFH = 0x0C; //对PIFH的每一位写1来清除标志位; PIEH = 0x0C; //中断使能寄存器; }
/*************************************************************/ /* 按键中断函数 */ /*************************************************************/ #pragma CODE_SEG __NEAR_SEG NON_BANKED interrupt void PTH_inter(void) {
if(PIFH != 0) //判断中断标志 {
PIFH = 0xff; //清除中断标志 if(KEY2 == 0) {
delay1ms(5); if(KEY2 == 0)
{
if(single <= 0) single = 3; else single-=1 } }
if(KEY1 == 0) {
delay1ms(5); if(KEY1 == 0) {
if(single >= 3) single = 0; else single+=1; } }
lcd_clear();
lcd_string(0,7,poem[single]); lcd_string(0,6,poem[single+1]); lcd_string(0,5,poem[single+2]); lcd_string(0,4,poem[single+3]); lcd_string(0,3,poem[single+4]); lcd_string(0,2,poem[single+5]); lcd_string(0,1,poem[single+6]); lcd_string(0,0,poem[single+7]); } }
#pragma CODE_SEG DEFAULT
/*************************************************************/ /* 主函数 */ /*************************************************************/ void main(void) {
DisableInterrupts; INIT_PLL(); initialize_ect(); init_key(); INIT_PORT(); LEDCPU_dir=1; LEDCPU=0;
EnableInterrupts; delay1ms(100); lcd_clear();
lcd_string(0,7,poem[0]);
lcd_string(0,6,poem[1]); lcd_string(0,5,poem[2]); lcd_string(0,4,poem[3]); lcd_string(0,3,poem[4]); lcd_string(0,2,poem[5]); lcd_string(0,1,poem[6]); lcd_string(0,0,poem[7]); for(;;) { } }
LCD.H改动、实现竖屏自右向左显示
/***************************************************************************/ /* 向LCD发送字符串 */ /***************************************************************************/