以下是我的程序,是畢業設計任務,想做一個LCD的24小時時鐘計數器,但是仿真之后并不能計數,希望哪位大神指點指點!!!
#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define DelayNOP() {_nop_();_nop_();_nop_();_nop_();}
//sbit K1=P1^0;
//sbit K2=P1^1;
sbit BEEP=P3^0;
sbit LCD_RS=P3^5;
sbit LCD_RW=P3^6;
sbit LCD_EN=P3^7;
void beep();
bit LCD_Busy_Check();
void LCD_Initialize();
void LCD_Set_POS(uchar);
void LCD_Write_Command(uchar);
void LCD_Write_Data(uchar);
uchar code titlt_text[]={"--- jishiqi ---"}; //標題字符串
uchar data Multiply_str[]={" "}; //乘法口訣表達式 //延時
uchar miao,fen,shi,miao_20;
void chuli();
void DelayMS(uint x)
{
uchar i;
while(x--)
for(i=0;i<120;i++);
}
//顯示函數,在LCD指定的行上顯示字符串
void Display_string(uchar *str,uchar lineno)
{
uchar k;
LCD_Set_POS(lineno);
for(k=0;k<16;k++)
LCD_Write_Data(str[k]);
} void Get_random_Num_A_B()
{
Multiply_str[1]= Multiply_str[2]=Multiply_str[3]=Multiply_str[4]
=' ';
Multiply_str[12]=miao%10+'0';
Multiply_str[11]=miao/10+'0';
Multiply_str[9]=fen%10+'0';
Multiply_str[8]=fen/10+'0';
Multiply_str[6]=shi%10+'0';
Multiply_str[5]=shi/10+'0';
// if(c1==0)
// Multiply_str[9]=' ';//當乘積的十位數(即數組中的第9位)為0時不顯示
}
//1602LCD顯示控制函數
bit LCD_Busy_Check()
{
bit Result;
LCD_RS=0;//寄存選擇
LCD_RW=1;//讀的狀態選擇
LCD_EN=1;//開始讀
DelayNOP();
Result=(bit)(P0&0x80);
LCD_EN=0;
return Result;
}
void LCD_Write_Command(uchar cmd)
{
while(LCD_Busy_Check());//忙等待
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();_nop_();
P0=cmd;
DelayNOP();
LCD_EN=1;
DelayNOP();
LCD_EN=0;
}
void LCD_Write_Data(uchar str)
{
while(LCD_Busy_Check());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=str;
DelayNOP();
LCD_EN=1;
DelayNOP();
LCD_EN=0;
}
void LCD_Initialize()
{
DelayMS(5);
LCD_Write_Command(0x38); //設置8位格式,2行,5x7
DelayMS(5);
LCD_Write_Command(0x0c); //整體顯示,關光標,不閃爍
DelayMS(5);
LCD_Write_Command(0x06); //設定輸入方式,增量不移位
DelayMS(5);
LCD_Write_Command(0x01); //清除屏幕顯示
DelayMS(5);
TMOD=0X01;
TH0=0X3C;
TL0=0XB0;
TR0=1;
EA=1;
ET0=1;
Multiply_str[7]=Multiply_str[10]='-';
}
void LCD_Set_POS(uchar Position)
{
LCD_Write_Command(Position | 0x80);
}
//蜂鳴器
void beep()
{
uchar i,j;
for(i=0;i<180;i++)
{
for(j=0;j<50;j++);
BEEP=!BEEP;
}
DelayMS(300);
BEEP=0;
}
//主程序
void main()
{
P0= P2=0xff;
DelayMS(10);
LCD_Initialize(); //初始化LCD
Display_string(titlt_text,0x00);//在第一行顯示標題
while(1)
{
Get_random_Num_A_B();
Display_string(Multiply_str,0x40);
}
}
void chuli()
{
if(miao_20==20)
{
miao_20=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
}
}
}
}
void t0() interrupt 1
{
TH0=0X3C;
TL0=0XB0;
miao_20++;
}
|