单片机交流
直播中

李晨灵

8年用户 1530经验值
私信 关注
[问答]

有什么方法可以把VFD时钟的51源码改成AVR的呢

有什么方法可以把VFD时钟的51源码改成AVR的呢?求大神指教

回帖(1)

刘莉

2021-9-23 15:27:36
  原来是有点问题想发上来问的,自己解决了,顺便发上来吧,有需要的可以看看。代码是精简过的,只保留点亮的部分,51和AVR都是测试过的。
  51用的是原版的STC15W408AS,AVR用的是ATmega128,内部1M晶振
  51的源码:
  main.c
  #include《STC1T.h》
  #define uint unsigned int
  #define uchar unsigned char
  #include“PT6311.H”
  void main()
  {
  P3M0=0xcc;
  PT6311_4();
  while(1)
  {
  delay(10);
  }
  }
  main.h
  ***it DATA = P3^3;
  ***it CLK = P3^6;
  ***it STB = P3^7;
  void write_PT6311(uchar dat)
  {
  uchar i;
  for(i=0;i《8;i++)
  {
  dat=dat》》1;
  DATA=CY;
  CLK=1;
  CLK=0;
  }
  }
  void PT6311_4()
  {
  STB=0;
  STB=1;
  write_PT6311(0x8f);
  }
  AVR的代码
  main.c
  #include “main.h”
  int main(void)
  {
  DDRD=0Xff;
  PORTD=0X00;
  CPORT|=(1《《BOOSTER);
  PT6311_4(); while (1) { _delay_ms(100); } }
  main.h
  #define F_CPU 1000000UL
  #include 《avr/io.h》
  #include 《util/delay.h》
  #define CPORT PORTD
  #define DIN PD1
  #define SCLK PD2
  #define STB PD3
  #define BOOSTER PD4
  #ifndef MAIN_H_
  #define MAIN_H_
  void write_PT6311(unsigned char dat)
  {
  unsigned char i;
  for(i=0;i《8;i++)
  {
  if((dat》》i)%2)
  CPORT&=~(1《《DIN);
  else
  CPORT|=(1《《DIN);
  CPORT|=(1《《SCLK);
  CPORT&=~(1《《SCLK);
  }
  }
  void PT6311_4()
  {
  CPORT&=~(1《《STB);
  CPORT|=(1《《STB);
  write_PT6311(0x8f);
  }
  #endif /* MAIN_H_ */
举报

更多回帖

发帖
×
20
完善资料,
赚取积分