for(COUNTW=0;COUNTW<4;COUNTW++) {
data=s[COUNTW];
if(COUNTW==1) data=table0[data];//第二位需要显示小数点
else data=table[data];
SPILED(data); //发送显示段码
}
for(COUNTW=0;COUNTW<4;COUNTW++){
data=0xFF;
SPILED(data); //连续发送4个DARK,使显示看起来好看一些
}
RA5=1; //最后给一个锁存信号,代表显示任务完成
}
//I2C总线输出数据子程序
void i2cout()
{
i2cint(); //因为SPI输出和I2C输出不能同时工作,则需要
//不断在两种方式见切换
SEN=1; //产生I2C启动信号
for(i=0x02;--i;) continue; //给予一定的延时,保证启动
do {
RSEN=1; //产生I2C启动信号
}while(SSPIF==0); //如果没能启动,则反复启动,直到启动为止
SSPIF=0; //SSPIF标志清0
SSPBUF=0X58; //I2C总线发送地址字节
do {
;
}while(SSPIF==0); //等待地址发送完毕
SSPIF=0; //SSPIF标志清0
SSPBUF=0X01; //I2C总线发送命令字节
do {
;
}while(SSPIF==0); //等待命令发送完毕
SSPIF=0; //SSPIF标志清0
SSPBUF=TXDATA; //I2C总线发送数据字节
do {
;
}while(SSPIF==0); //等待数据发送完毕
SSPIF=0; //SSPIF标志清0
PEN=1; //产生停止条件
do {
;
}while(SSPIF==0); //等待停止条件产生
SSPIF=0; //SSPIF标志清0
}
//步进加子程序
void BJADD()
{
R1++;
TXDATA=TXDATA+2;
if(R1>9) {
R1=0;
R2++;
if(R2>9) {
R2=0;
R3++;
}
}
if((R3==1)&&(R2==2)&&(R1==1)){
R3=0;
R2=0;
R1=0; //若R3,R2,R1超过120,则又从0计起
TXDATA=0;
}
sfz(); //把需要显示的数字装入显示缓冲数组
}
//步进减子程序
void BJSUB()
{
R1--;
TXDATA=TXDATA-2;
if(R1==0XFF) {
R1=9;
R2--;
if(R2==0XFF) {
R2=9;
R3--;
if(R3==0XFF) {
R3=1;
R2=2;
R1=0;//若R3,R2,R1小于0,则又从120计起
TXDATA=0XF0;
}
}
}
sfz(); //把需要显示的数字装入显示缓冲数组
}
//主程序
main()
{
initial(); //系统各寄存器初始化
display(); //调用一次显示子程序
while(1) {
i2cout(); //调用I2C子程序,启动D/A转换
KEYSCAN(); //键盘扫描
keyserve() ; //若确实有键按下,则调用键服务程序
if(BJF==0X01) BJADD();//若步进加标志为1,则调用步进加子程序
else BJSUB(); //若步进加标志为0,则调用步进减子程序
display(); //调用一次显示子程序
}
上一页 [1] [2]
本文关键字:稳压电源 数控 c程序 课程 自动控制-单片机,电子制作 - 自动控制-单片机