該計算器系統(tǒng)51 系列的單片機進行的數(shù)字計算器系統(tǒng)設(shè)計,可以完成計算器的鍵盤輸入, 進行加、減、乘、除的簡單四則運算,并在 LCD屏幕上相應(yīng)的顯示結(jié)果。選擇內(nèi)部存儲資源豐富的 51 單片機,輸入采用 4×4矩陣鍵盤,顯示采用LCD1602屏幕模塊進行顯示。軟件方面從分析計算器功能、流程圖設(shè)計,再到程序的編寫進行系統(tǒng)設(shè)計。
bit lcden=P2^7;//使能信號
uchar code table[]= " ";
long int data_a,data_b; //第一個數(shù)和第二個數(shù)
long int data_c; //計算結(jié)果
uchar dispaly[10]; //顯示緩沖
sbit MUSIC_REST =P2^2;//語音芯片復(fù)位腳
sbit MUSIC_DATA =P2^1;//語音芯片脈沖識別
sbit bus =P2^0;//語音芯片工作狀態(tài)識別信號
uchar bbh,xm1,xm2,xm0;
void delay_us(unsigned int us)//延時函數(shù)
{
while(us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void Music(unsigned char music_count)
{
MUSIC_REST=1;
delay_us(200);
MUSIC_REST=0;
delay_us(200);
while(music_count>0)
{
MUSIC_DATA=1;
delay_us(100);
MUSIC_DATA=0;
delay_us(100);
music_count--;
}
}
//************************************************************************/
// 描述: 延時t us函數(shù)
//************************************************************************/
void LCD_Delay_us(unsigned int t)
{
while(t--); //t=0,退出
}
//************************************************************************/
// 描述: 延時t ms函數(shù)
//************************************************************************/
void LCD_Delay_ms(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++) //執(zhí)行t次循環(huán)
for(j=0;j<113;j++) //執(zhí)行113次循環(huán)
;
}
//************************************************************************/
// 描述: 1602液晶寫指令
//************************************************************************/
void write_com(uchar com) //1602液晶寫指令
{
rs=0; //寫指令
lcden=0; //使能1602
P0=com; //寫入指令com
LCD_Delay_ms(1); //延時1ms
lcden=1; //使能1602
LCD_Delay_ms(2); //延時2ms
lcden=0; //使能1602
}
//************************************************************************/
// 描述:1602液晶寫數(shù)據(jù)
//************************************************************************/
void write_date(uchar date) //1602液晶寫數(shù)據(jù)
{
rs=1; //寫數(shù)據(jù)
lcden=0; //使能1602
P0=date; //寫入數(shù)據(jù)date
LCD_Delay_ms(1); //延時1ms
lcden=1; //使能1602
LCD_Delay_ms(2); //延時2ms
lcden=0; //使能1602
}
//************************************************************************/
// 描述:指定x,y寫入字符函數(shù)
//************************************************************************/
void W_lcd(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0){write_com(0x80 + x);} //第一行
else{write_com(0xc0 + x);} //第二行
write_date( Data); //寫入數(shù)據(jù)
}
//指定x,y寫入字符串函數(shù)
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0){write_com(0x80 + x);} //第一行
else{write_com(0xC0 + x);} //第二行
while (*s) //
{write_date( *s); s++;} //寫入數(shù)據(jù)
}
//************************************************************************/
// 描述:初始化液晶,及畫面初始化
//************************************************************************/
void init_lcd(void) //初始化液晶,及畫面初始化
{
閱讀全文