#include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12xdp512" #define Ledcs DDRK #define LedNum PORTK #define SCI_Enable 0x0c #define Baud9600 0x009c /////////////////////////////////////////////////////////////// //向显示缓冲区写入一个字节 /////////////////////////////////////////////////////////////// void MCUInit(void)//芯片初始化(了解更多请阅读S12在线开发相关章节介绍) { asm sei //asm CLR $0011 REFDV=0x01; // initiate PLL clock SYNR =0x02; // system clock 24M while (!(CRGFLG & 0x08)){} //CRGFLG的D3=1则稳定,并且可做为系统时钟 CLKSEL=0x80; // 选定所相环时钟 //FCLKDIV=0x49; //使FLASH 和 EEPROM // 的擦除操作工作频率在200HZ左右 //ECLKDIV=0x49; //PPAGE=0x20; asm cli } void put_char(unsigned char c)//发送一个字符 { while ((SCI0SR1 & 0X80) == 0);//D7=1时说明要发送的数据已经移入移位寄存器 //可以发送新的数据 SCI0DRL=c; } unsigned char htoa(unsigned char ch)//字符转换成ASCII { if(ch<=9) { return(ch+0x30); //0~9 } else { return(ch+0x37); //A~F } } void Write_byte(unsigned char value){ PORTB=~value; //模拟时钟 } unsigned char outhexb(unsigned char result)//输出 { put_char(htoa(result/10)); put_char('.'); put_char(htoa(result%10)); put_char(' '); } ///////////////////////////////////////////////////////////// // 向数码管上显所需要的数字 // 功能: CS表示要在第几位上显 // num表示要显示的数字几 // h表示小数点0不显/1显示(两个0和1之间选择) ///////////////////////////////////////////////////////////// //显示码表 const unsigned char Table[]={ 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xFF }; void LEDshow(unsigned char cs,unsigned char num,unsigned char h) { if(cs==1)LedNum=0xfe; if(cs==2)LedNum=0xfd; if(cs==3)LedNum=0xfb; if(cs==4)LedNum=0xf7; if(cs==5)LedNum=0xef; if(cs==6)LedNum=0xdf; if(h==0) Write_byte(~Table[num]); else Write_byte(~Table[num]|0x80); } void main(void) { unsigned int volt; unsigned char ch; MCUInit(); Ledcs=0xff; //DDRB=0XFF; //设置B口输出 ATD0CTL2=0XC0; //启动A/D转换,快速清零,无等待模式,禁止外部触发,中断禁止 ATD0CTL3=0x08; //转换序列长度为1 ATD0CTL4=0XE3; //8位精度,PRS设为3,ATD时钟(总线时钟/2)/(PRS+1) ATD0DIEN=0X00; //禁止数字输入 ATD0CTL5=0XA0; //右对齐无符号,单通道采样,通道0 //PORTB=0xFF; //输出清零 DDRH=0xff; PTH_PTH2=1; PTH_PTH3=0; PTH_PTH4=0; PTH_PTH1=0; DDRB=0xff; SCI0CR2=SCI_Enable;//初始化串口0 SCI0BD=Baud9600; while(1) { unsigned int i,k; while(ATD0STAT1_CCF0==0);//等待转换完成 ch=ATD0DR0L; put_char(' '); //取值 put_char(htoa((ch&0xf0)>>4)); put_char(htoa((ch&0x0f))); put_char(' '); LEDshow(6,ch&0x0f,0); for(i=0;i<0x03FF;i++); LEDshow(5,(ch&0xf0)>>4,0); k=ch*5 ; k=k*10; ch=k/256; // ch=59; outhexb(ch); for(i=0;i<0x03FF;i++); LEDshow(1,ch/10,1); for(i=0;i<0x03FF;i++); LEDshow(2,ch%10,0); for(i=0;i<0x03FF;i++); } }