📄 main.c
字号:
#include "SPCE061A.h" //IOA0口是电压测试端,ADC的输入电压范围为0-3.3V
#define lcd1602_rs_high 0x0100/*定义lcd端口*/
#define lcd1602_rs_low 0xfeff/**/
#define lcd1602_rw_high 0x0200
#define lcd1602_rw_low 0xfdff
#define lcd1602_e_high 0x0400
#define lcd1602_e_low 0xfbff
unsigned char string[]="Lingyang College";/*定义显示界面*/
unsigned char string1[]="Voltage= . V";
unsigned int i;
float voltage=0.0;
unsigned int zhengshu,zs,xs1,xs2;
void main(void)
{
initial_lcd1602();/*初始化液晶*/
write_lcd1602_string(0x0080,string);/*显示ShaoGuan College*/
write_lcd1602_string(0x00c0,string1);
*P_ADC_MUX_Ctrl=C_ADC_CH1;/* 选择AD的line 1*/
*P_ADC_Ctrl=0x0001;/*设定控制寄存器*/
while (1)
{
*P_Watchdog_Clear=0x0001;
i=ad();/*调用子程序 */
voltage=(float)i*3.3/0x03ff;/*将数字量转换成电压,3.3564V*/
//(float)i:强制把i转化成浮点型;
zhengshu=(int)( voltage*100);/*提取整数和小数的2位*/
zs=zhengshu/100;/*得出电压的整数部分*/
xs1=(zhengshu%100)/10;/*得出电压的小数的第一位*/
xs2=(zhengshu%100)%10;/*得出电压的小数的第二位*/
write_lcd1602_instruction(0x00c8);/*定位,在第二行的第8位显示整数*/
write_lcd1602_data(zs+0x0030);
write_lcd1602_instruction(0x00ca); /*定位,在第二行的第10位显示小数*/
write_lcd1602_data(xs1+48); //48=ASCII(V)
write_lcd1602_data(xs2+48);
}
}
unsigned int ad(void)
{
unsigned int j;
while(!(*P_ADC_MUX_Ctrl&0x8000));/*等待AD转换结束*/
j=*P_ADC_LINEIN_Data;/*读AD转换的数据*/
//P_ADC_LINEIN_Data的作用等效于P_ADC_MUX_Data,
j=j>>6;/*转换存储格式,变成B9-B0存储数据*/
return(j&0x03ff);
}
void checkbusy_lcd1602(void)
{
*P_IOB_Dir=0xff7f;
*P_IOB_Attrib=0xffff;
*P_IOB_Data=0xffff;
*P_IOB_Buffer=*P_IOB_Buffer|0x00ff;
*P_IOB_Buffer=*P_IOB_Buffer&lcd1602_rs_low;
*P_IOB_Buffer=*P_IOB_Buffer&lcd1602_e_low;
*P_IOB_Buffer=*P_IOB_Buffer|lcd1602_rw_high;
*P_IOB_Buffer=*P_IOB_Buffer|lcd1602_e_high;
delay(10);
while(*P_IOB_Data&0x0080)
{
*P_Watchdog_Clear=0x0001;
}
*P_IOB_Buffer=*P_IOB_Buffer&lcd1602_e_low;
*P_IOB_Dir=0xffff;
}
void write_lcd1602_instruction(unsigned int i)
{
checkbusy_lcd1602();
*P_Watchdog_Clear=0x0001;
*P_IOB_Buffer=*P_IOB_Buffer&lcd1602_e_low;
*P_IOB_Buffer=*P_IOB_Buffer&lcd1602_rw_low;
*P_IOB_Buffer=*P_IOB_Buffer&lcd1602_rs_low;
*P_IOB_Buffer=*P_IOB_Buffer|lcd1602_e_high;
*P_IOB_Buffer=(*P_IOB_Buffer&0xff00)|i;
*P_IOB_Buffer=*P_IOB_Buffer&lcd1602_e_low;
}
void write_lcd1602_data(unsigned int i)
{
checkbusy_lcd1602();
*P_Watchdog_Clear=0x0001;
*P_IOB_Buffer=*P_IOB_Buffer&lcd1602_e_low;
*P_IOB_Buffer=*P_IOB_Buffer&lcd1602_rw_low;
*P_IOB_Buffer=*P_IOB_Buffer|lcd1602_rs_high;
*P_IOB_Buffer=*P_IOB_Buffer|lcd1602_e_high;
*P_IOB_Buffer=(*P_IOB_Buffer&0xff00)|i;
*P_IOB_Buffer=*P_IOB_Buffer&lcd1602_e_low;
}
void write_lcd1602_string(unsigned int x,unsigned *p)
{
write_lcd1602_instruction(x);
while(*p!=0x0000)
{
*P_Watchdog_Clear=0x0001;
write_lcd1602_data(*p);
p++;
if(x++==0x008f)
{
write_lcd1602_instruction(0x00c0);
}
}
}
void cls(void)
{
write_lcd1602_instruction(0x0001);
}
void initial_lcd1602(void)
{
write_lcd1602_instruction(0x0038);
delay(100);
write_lcd1602_instruction(0x000c);
delay(100);
write_lcd1602_instruction(0x0006);
write_lcd1602_instruction(0x0001);
}
void delay(unsigned int i)
{
*P_Watchdog_Clear=0x0001;
while(i--!=0x0000);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -