用picc写了个自动键的控制程序,带点划记忆,请各位指教
//pic16f877a
//晶体震荡频率4mhz,hs震荡模式,关闭看门狗
//ra0设置为adc输入,ra1设置为电键输出
//rb4设置为dot输入,rb5设置为da输入
//加载头文件
#include <pic.h>
//定义变量
unsigned int ratio; //点划比例 1:3=30, 1:3.5=35
unsigned int dot_speed; //点长度
unsigned int da_speed; //划长度
unsigned int delay_count1;
unsigned int delay_count2;
unsigned int delay_count3;
bit dot_in;
bit da_in;
//函数宣告
void initial(void); //初始化子程序
void interrupt irq_int(void); //中断子程序
void delay(void); //延时子程序
void send_dot(void); //点发送子程序
void send_da(void); //划发送子程序
void initial(void) //*** 初始化
{
adcon0=0x41;
adcon1=0x0e;
trisa=0xfd;
trisb=0xff;
trisc=0x00;
rbpu=0; //开启 rb 口弱上拉
portc=0;
ra1=0;
ratio=30;
dot_speed=70;
da_speed=dot_speed/10*ratio;
adgo=1;
dot_in=1;
da_in=1;
}
void delay(void) //***延时
{
while(--delay_count1)
{
delay_count3=delay_count2;
while(--delay_count3) {;}
if(rb4==0) dot_in=0;
if(rb5==0) da_in=0;
}
}
void send_dot(void)
{
ra1=1;
delay_count1=dot_speed;
delay_count2=adresh/2+14;
delay();
ra1=0;
delay_count1=dot_speed;
delay_count2=adresh/2+14;
delay();
dot_in=1;
}
void send_da(void)
{
ra1=1;
delay_count1=da_speed;
delay_count2=adresh/2+14;
adgo=1;
delay();
ra1=0;
delay_count1=dot_speed;
delay_count2=adresh/2+14;
adgo=1;
delay();
da_in=1;
}
void main(void)
{
initial();
while(1)
{
if(adif==1) adgo=1;
if(rb4==0) send_dot();
if(da_in==0) send_da();
if(dot_in==0) send_dot();
if(rb5==0) send_da();
}
}