📄 main.pas
字号:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
ComboBox2: TComboBox;
CheckBox1: TCheckBox;
Memo1: TMemo;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Timer1: TTimer;
ComboBox3: TComboBox;
Label5: TLabel;
BitBtn1: TBitBtn;
Label6: TLabel;
ComboBox4: TComboBox;
CheckBox2: TCheckBox;
GroupBox1: TGroupBox;
CheckBox3: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
CheckBox7: TCheckBox;
CheckBox8: TCheckBox;
CheckBox9: TCheckBox;
CheckBox11: TCheckBox;
BitBtn2: TBitBtn;
GroupBox3: TGroupBox;
LabeledEdit1: TLabeledEdit;
ComboBox5: TComboBox;
Label1: TLabel;
CheckBox4: TCheckBox;
GroupBox2: TGroupBox;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
CheckBox10: TCheckBox;
CheckBox12: TCheckBox;
CheckBox13: TCheckBox;
CheckBox14: TCheckBox;
CheckBox15: TCheckBox;
CheckBox16: TCheckBox;
CheckBox17: TCheckBox;
CheckBox18: TCheckBox;
CheckBox19: TCheckBox;
ComboBox6: TComboBox;
ComboBox7: TComboBox;
LabeledEdit2: TLabeledEdit;
ComboBox8: TComboBox;
CheckBox20: TCheckBox;
CheckBox21: TCheckBox;
CheckBox22: TCheckBox;
procedure FormShow(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Label4MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Label4MouseLeave(Sender: TObject);
procedure Label4Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure ComboBox3Change(Sender: TObject);
procedure BitBtn1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure BitBtn1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ComboBox4Change(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
procedure ComboBox6Change(Sender: TObject);
procedure ComboBox7Change(Sender: TObject);
procedure CheckBox13Click(Sender: TObject);
procedure CheckBox12Click(Sender: TObject);
procedure CheckBox5Click(Sender: TObject);
procedure CheckBox14Click(Sender: TObject);
procedure CheckBox7Click(Sender: TObject);
procedure CheckBox16Click(Sender: TObject);
procedure CheckBox18Click(Sender: TObject);
procedure CheckBox19Click(Sender: TObject);
procedure CheckBox11Click(Sender: TObject);
procedure CheckBox9Click(Sender: TObject);
procedure CheckBox8Click(Sender: TObject);
procedure CheckBox17Click(Sender: TObject);
procedure CheckBox6Click(Sender: TObject);
procedure CheckBox15Click(Sender: TObject);
procedure CheckBox21Click(Sender: TObject);
procedure CheckBox22Click(Sender: TObject);
procedure CheckBox4Click(Sender: TObject);
procedure CheckBox20Click(Sender: TObject);
procedure ComboBox5Change(Sender: TObject);
procedure ComboBox8Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Fosc : Real;
Baud0,Baud1 : integer;
U2X0,U2X1 : integer;
UCSR0A: integer;
UCSR1A: integer;
UCSR0B: integer;
UCSR1B: integer;
UCSR0C: integer;
UCSR1C: integer;
UBRR0 : integer;
UBRR1 : integer;
implementation
uses ShellAPI;
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
Form1.Width :=457;
Memo1.Left :=224;
GroupBox3.Left :=224;
GroupBox2.Left :=528;
BitBtn1.Left :=248;
BitBtn2.Left :=344;
Label4.Left :=72;
Form1.Position :=poDesktopCenter;
ComboBox1.ItemIndex :=5;
ComboBox2.ItemIndex :=10;
ComboBox3.ItemIndex :=1;
ComboBox4.ItemIndex :=3;
ComboBox5.ItemIndex :=0;
ComboBox6.ItemIndex :=5;
ComboBox7.ItemIndex :=3;
ComboBox8.ItemIndex :=0;
CheckBox3.Enabled := true;
CheckBox4.Enabled := false;
CheckBox6.Enabled := true;
//CheckBox8.Enabled := false;
CheckBox15.Enabled := true;
CheckBox20.Enabled := false;
CheckBox1.Checked := false;
CheckBox2.Checked := false;
CheckBox3.Checked := true;
CheckBox4.Checked := false;
CheckBox5.Checked := false;
CheckBox6.Checked := false;
CheckBox7.Checked := false;
CheckBox8.Checked := false;
CheckBox10.Checked := false;
CheckBox15.Checked := false;
CheckBox20.Checked := false;
Memo1.Clear ;
Fosc :=7.3728;
Baud0 :=9600 ;
Baud1 :=9600 ;
U2X0 :=2;
U2X1 :=2;
UBRR0 :=0;
UCSR0A:=0;
UCSR0B:=0;
UCSR0C:=134; // 10000110
UBRR1 :=0;
UCSR1A:=0;
UCSR1B:=0;
UCSR1C:=6; // 10000110
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
UBRR0L,UBRR1L : integer;
UBRR0H,UBRR1H : integer;
ubrr_t0,ubrr_t1: Real;
Baud_c0,Baud_c1 : integer;
Baud_t0,Baud_t1: Real;
ubrr_s0,ubrr_s1 : string;
wucha0,wucha1 : string;
kkk : string;
begin
Memo1.Clear ;
//ICC-AVR application builder : 2006-8-17 15:45:00
Memo1.Lines.Add('/'+'/----------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/程序由AVR串口开发工具V1.0自动生成 ' );
Memo1.Lines.Add('/'+'/MCU系统的处理器为: '+ComboBox3.Text );
Memo1.Lines.Add('/'+'/MCU系统的晶振频率: '+FloatToStr(Fosc)+' Mhz');
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('');
kkk:=ComboBox3.Text ;
if (kkk ='ATMega64') or (kkk ='ATMega128')then
begin
if CheckBox3.Checked =true then
begin
ubrr_t0 :=(Fosc*1000000/8/U2X0/Baud0)-1 ;
ubrr_s0 :=Format('%2.0f',[ubrr_t0]);
UBRR0 :=StrToInt(ubrr_s0) ;
UBRR0L:=UBRR0 mod 256 ;
UBRR0H:=trunc(UBRR0/256) ;
Baud_t0:=Fosc*1000000/8/U2X0/(UBRR0+1) ;
Baud_c0:=trunc(Baud_t0) ;
wucha0 :=Format('%2.3f',[(Baud_c0-Baud0)*100/Baud0]);
LabeledEdit1.Text :=ubrr_s0;
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/串口0初始化子程序');
Memo1.Lines.Add('/'+'/字符长度:'+ComboBox4.Text );
Memo1.Lines.Add('/'+'/奇偶校验:'+ComboBox5.Text );
if CheckBox21.Checked =true then
Memo1.Lines.Add('/'+'/通讯模式:同步' )
else
Memo1.Lines.Add('/'+'/通讯模式:异步' );
if CheckBox6.Checked =true then
Memo1.Lines.Add('/'+'/多处理器通讯模式' );
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('void Uart0_Init(void)');
Memo1.Lines.Add('{');
Memo1.Lines.Add(' UCSR0B = 0x00'+'; '+' /'+'/disable while setting baud rate') ;
Memo1.Lines.Add(' UCSR0A = 0x'+IntToHex(UCSR0A,2)+'; '+' /'+'/Bit1为1则倍速发送') ;
Memo1.Lines.Add(' UCSR0C = 0x'+IntToHex(UCSR0C,2)+'; ') ;
Memo1.Lines.Add(' UBRR0L = 0x'+IntToHex(UBRR0L,2)+'; '+' /'+'/波特率:'+IntToStr(Baud0)+' Bps') ;
Memo1.Lines.Add(' UBRR0H = 0x'+IntToHex(UBRR0H,2)+'; '+' /'+'/误差率:'+wucha0+'%') ;
Memo1.Lines.Add(' UCSR0B = 0x'+IntToHex(UCSR0B,2)+'; ') ;
Memo1.Lines.Add('}');
if CheckBox9.Checked =true then
begin
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/串口0接收中断子程序');
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('#pragma interrupt_handler Uart0_Rx_Isr:iv_USART0_RX');
Memo1.Lines.Add('void Uart0_Rx_Isr(void)');
Memo1.Lines.Add('{');
Memo1.Lines.Add('/'+'/uart has received a character in UDR0');
Memo1.Lines.Add('}');
end;
if CheckBox11.Checked =true then
begin
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/串口0发送中断子程序');
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('#pragma interrupt_handler Uart0_Tx_Isr:iv_USART0_TX');
Memo1.Lines.Add('void Uart0_Tx_Isr(void)');
Memo1.Lines.Add('{');
Memo1.Lines.Add('/'+'/character has been transmitted');
Memo1.Lines.Add('}');
end;
if CheckBox8.Checked =true then
begin
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/串口0数据寄存器空中断子程序');
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('#pragma interrupt_handler Uart0_Udre_Isr:iv_USART0_UDRE');
Memo1.Lines.Add('void Uart0_Udre_Isr(void)');
Memo1.Lines.Add('{');
Memo1.Lines.Add('/'+'/Character transferred to shift register so UDR0 is now empty');
Memo1.Lines.Add('}');
end;
end;
if CheckBox10.Checked =true then
begin
ubrr_t1 :=(Fosc*1000000/8/U2X1/Baud1)-1 ;
ubrr_s1 :=Format('%2.0f',[ubrr_t1]);
UBRR1 :=StrToInt(ubrr_s1) ;
UBRR1L:=UBRR1 mod 256 ;
UBRR1H:=trunc(UBRR1/256) ;
Baud_t1:=Fosc*1000000/8/U2X1/(UBRR1+1) ;
Baud_c1:=trunc(Baud_t1) ;
wucha1 :=Format('%2.3f',[(Baud_c1-Baud1)*100/Baud1]);
LabeledEdit2.Text :=ubrr_s1;
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/串口1初始化子程序');
Memo1.Lines.Add('/'+'/字符长度:'+ComboBox7.Text );
Memo1.Lines.Add('/'+'/奇偶校验:'+ComboBox8.Text );
if CheckBox22.Checked =true then
Memo1.Lines.Add('/'+'/通讯模式:同步' )
else
Memo1.Lines.Add('/'+'/通讯模式:异步' );
if CheckBox15.Checked =true then
Memo1.Lines.Add('/'+'/多处理器通讯模式' );
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('void Uart1_Init(void)');
Memo1.Lines.Add('{');
Memo1.Lines.Add(' UCSR1B = 0x00'+'; '+' /'+'/disable while setting baud rate') ;
Memo1.Lines.Add(' UCSR1A = 0x'+IntToHex(UCSR1A,2)+'; '+' /'+'/Bit1为1则倍速发送') ;
Memo1.Lines.Add(' UCSR1C = 0x'+IntToHex(UCSR1C,2)+'; ') ;
Memo1.Lines.Add(' UBRR1L = 0x'+IntToHex(UBRR1L,2)+'; '+' /'+'/波特率:'+IntToStr(Baud1)+' Bps') ;
Memo1.Lines.Add(' UBRR1H = 0x'+IntToHex(UBRR1H,2)+'; '+' /'+'/误差率:'+wucha1+'%') ;
Memo1.Lines.Add(' UCSR1B = 0x'+IntToHex(UCSR1B,2)+'; ') ;
Memo1.Lines.Add('}');
if CheckBox18.Checked =true then
begin
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/串口1接收中断子程序');
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('#pragma interrupt_handler Uart1_Rx_Isr:iv_USART1_RX');
Memo1.Lines.Add('void Uart1_Rx_Isr(void)');
Memo1.Lines.Add('{');
Memo1.Lines.Add('/'+'/Uart1 has received a character in UDR1');
Memo1.Lines.Add('}');
end;
if CheckBox19.Checked =true then
begin
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/串口1发送中断子程序');
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('#pragma interrupt_handler Uart1_Tx_Isr:iv_USART1_TX');
Memo1.Lines.Add('void Uart1_Tx_Isr(void)');
Memo1.Lines.Add('{');
Memo1.Lines.Add('/'+'/Character has been transmitted');
Memo1.Lines.Add('}');
end;
if CheckBox17.Checked =true then
begin
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/串口1数据寄存器空中断子程序');
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('#pragma interrupt_handler Uart1_Udre_Isr:iv_USART1_UDRE');
Memo1.Lines.Add('void Uart1_Udre_Isr(void)');
Memo1.Lines.Add('{');
Memo1.Lines.Add('/'+'/Character transferred to shift register so UDR1 is now empty');
Memo1.Lines.Add('}');
end;
end;
end
else
begin
ubrr_t0 :=(Fosc*1000000/8/U2X0/Baud0)-1 ;
ubrr_s0 :=Format('%2.0f',[ubrr_t0]);
UBRR0 :=StrToInt(ubrr_s0) ;
UBRR0L:=UBRR0 mod 256 ;
UBRR0H:=trunc(UBRR0/256) ;
Baud_t0:=Fosc*1000000/8/U2X0/(UBRR0+1) ;
Baud_c0:=trunc(Baud_t0) ;
wucha0 :=Format('%2.3f',[(Baud_c0-Baud0)*100/Baud0]);
LabeledEdit1.Text :=ubrr_s0;
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/串口初始化子程序');
Memo1.Lines.Add('/'+'/字符长度:'+ComboBox4.Text );
Memo1.Lines.Add('/'+'/奇偶校验:'+ComboBox5.Text );
if CheckBox21.Checked =true then
Memo1.Lines.Add('/'+'/通讯模式:同步' )
else
Memo1.Lines.Add('/'+'/通讯模式:异步' );
if CheckBox6.Checked =true then
Memo1.Lines.Add('/'+'/多处理器通讯模式' );
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('void Uart_Init(void)');
Memo1.Lines.Add('{');
Memo1.Lines.Add(' UCSRB = 0x00'+'; '+' /'+'/disable while setting baud rate') ;
Memo1.Lines.Add(' UCSRA = 0x'+IntToHex(UCSR0A,2)+'; '+' /'+'/Bit1为1则倍速发送') ;
Memo1.Lines.Add(' UCSRC = 0x'+IntToHex(UCSR0C,2)+'; ') ;
Memo1.Lines.Add(' UBRRL = 0x'+IntToHex(UBRR0L,2)+'; '+' /'+'/波特率:'+IntToStr(Baud0)+' Bps') ;
Memo1.Lines.Add(' UBRRH = 0x'+IntToHex(UBRR0H,2)+'; '+' /'+'/误差率:'+wucha0+'%') ;
Memo1.Lines.Add(' UCSRB = 0x'+IntToHex(UCSR0B,2)+'; ') ;
Memo1.Lines.Add('}');
if CheckBox9.Checked =true then
begin
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/串口接收中断子程序');
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('#pragma interrupt_handler Uart_Rx_Isr:iv_USART_RX');
Memo1.Lines.Add('void Uart_Rx_Isr(void)');
Memo1.Lines.Add('{');
Memo1.Lines.Add('/'+'/uart has received a character in UDR');
Memo1.Lines.Add('}');
end;
if CheckBox11.Checked =true then
begin
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/串口发送中断子程序');
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('#pragma interrupt_handler Uart_Tx_Isr:iv_USART_TX');
Memo1.Lines.Add('void Uart_Tx_Isr(void)');
Memo1.Lines.Add('{');
Memo1.Lines.Add('/'+'/character has been transmitted');
Memo1.Lines.Add('}');
end;
if CheckBox8.Checked =true then
begin
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('/'+'/串口数据寄存器空中断子程序');
Memo1.Lines.Add('/'+'/-------------------------------------------------------------------');
Memo1.Lines.Add('#pragma interrupt_handler Uart_Udre_Isr:iv_USART_UDRE');
Memo1.Lines.Add('void Uart_Udre_Isr(void)');
Memo1.Lines.Add('{');
Memo1.Lines.Add('/'+'/Character transferred to shift register so UDR is now empty');
Memo1.Lines.Add('}');
end;
end;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Baud0 :=StrToInt(ComboBox1.Text);
end;
procedure TForm1.ComboBox2Change(Sender: TObject);
begin
Fosc :=StrToFloat(ComboBox2.Text);
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked =true then
begin
U2X0 :=1;
UCSR0A :=UCSR0A or 2; //倍速
end
else
begin
U2X0 :=2;
UCSR0A :=UCSR0A and 253;
end;
end;
procedure TForm1.Label4MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label4.Font.Style:=Label4.Font.Style+[fsUnderline];
Label4.Font.Color :=clBlue;
Label4.Cursor :=crHandPoint;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -