📄 project2.c
字号:
#include <p18f8680.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LF 0x0A // Line feed
#define CR 0x0D // Carriage return
// Prototypes //
int atoi(const char *s);
char *ltoa(long value, char *string);
char *strpbrk(const char *str1, const char *str2);
char *strtok(char *str, const char *delim);
char AnsStr[10], Operator[40], Num_Str[81];
void SerialCharSend(char ptr)
{
while(!PIR1bits.TXIF);
TXREG = ptr;
}
void SerialStrSend(char *ptr)
{
while(*ptr)
{
SerialCharSend(*ptr);
ptr++;
}
}
char SerialCharReceive(void)
{
while (!PIR1bits.RCIF);
PORTD = RCREG;
return RCREG;
}
void SerialStrReceive(char *ptr)
{
char x;
while (1)
{
x = SerialCharReceive();
if (x == CR)
{
*ptr = 0;
return;
}
*(ptr++) = x;
}
}
void Initialize(void)
{
const char Baud4800[] = "Connection established at 4800 baud!";
const char Baud9600[] = "Connection established at 9600 baud!";
TRISB = 0xFF; // All bits input (Push Buttons)
TRISD = 0x00; // LED port output
TRISF = 0xFF; // DIP switch port input
PORTD = 0xFF; // Turn off all LED's
////////// Set up USART //////////
TXSTA = 0x20; // enable 8-bit transmission, low baud rate
TRISCbits.TRISC7 = 1; // RC7 pin input
TRISCbits.TRISC6 = 0; // RC6 pin output
RCSTAbits.SPEN = 1; // Enable USART
RCSTAbits.CREN = 1; // Enable USART receive
while(PORTBbits.RB0); // Wait until ready to transmit
////////// Set and display baud rate //////////
switch (PORTFbits.RF7) // Check baud rate DIP switch
{
case 0: // Dip switch down
SPBRG = 51; // Baud rate is 9600 assumming 32MHz crystal
SerialCharSend(LF);
SerialCharSend(CR);
SerialStrSend(Baud9600); // Send 9600 baud message
SerialCharSend(LF);
SerialCharSend(CR);
break;
case 1: // Dip switch up
SPBRG = 103; // Baud rate is 4800 assumming 32MHz crystal
SerialCharSend(LF);
SerialCharSend(CR);
SerialStrSend(Baud4800); // Send 4800 baud message
SerialCharSend(LF);
SerialCharSend(CR);
break;
}
}
int Calculate(void)
{
const char Operator_Str[] = "+-";
char i, Found, *Temp;
long int Result;
int Num[41];
////////// Find + and - characters //////////
Temp = strpbrk (Num_Str, Operator_Str);
for (Found=0; Temp!=NULL; Found++)
{
Operator[Found] = *Temp;
Temp = strpbrk (Temp + 1, Operator_Str);
}
////////// Break string up into tokens and convert to integers //////////
Temp = strtok (Num_Str, Operator_Str);
Num[0] = atoi(Temp);
for (i=1 ; Temp!=NULL; i++)
{
Temp = strtok (NULL, Operator_Str);
Num[i] = atoi(Temp);
}
///////// Calculate and display the result ////////
Result = Num[0];
for(i=0; i<Found; i++)
{
if (Operator[i] == '+')
Result += Num[i+1];
if (Operator[i] == '-')
Result -= Num[i+1];
}
return Result;
}
void main (void)
{
const char EnterEqu[] = "Enter an equation: ";
long int Answer;
Initialize(); // Set up ports, USART, etc
while(1)
{
SerialCharSend(LF);
SerialCharSend(CR);
SerialStrSend(EnterEqu); // Prompt user to enter equation
SerialStrReceive(Num_Str); // Receive raw function as a string
Answer = Calculate(); // Process and calulate function to get the result
ltoa(Answer, AnsStr); // Convert long integer answer to a string
SerialCharSend(LF);
SerialCharSend(CR);
SerialStrSend(AnsStr); // Display the answer
SerialCharSend(LF);
SerialCharSend(CR);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -