欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
Prteus秒表設計LCD實現
[打印本頁]
作者:
ohhh
時間:
2020-6-24 16:04
標題:
Prteus秒表設計LCD實現
(JZLXOW$K@$JI4[7TXF)C@H.png
(117.23 KB, 下載次數: 33)
下載附件
2020-6-24 16:02 上傳
/*txt1.c*/
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define DelayNOP(){_nop_();_nop_();_nop_();_nop_();}
uchar Time_Buffer[]={0,0,0,0};
uchar LCD_Display_Buffer[] = {"00:00:00:00"};
void LCD_Initialize();
void LCD_Set_POS(uchar);
void LCD_Write_Data(uchar);
void Display_String(uchar *,uchar);
void Beep();
sbit K1=P1^0;
sbit K2=P1^1;
sbit BEEP=P3^0;
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;
char KeyCount=0;
uchar code msg1[]= {"Second Watch 0 "};
uchar code msg2[]= {"#### "};
uchar code Prompts[][16]=
{{"##1--> "},{"##1-->##2 "},{"##3--> "},{"##3-->4 "}};
void Beep()
{
uchar i,j=70;
for(i=0;i<180;i++)
{while(--j);BEEP=~BEEP;}
BEEP=0;}
void DelayX(uint MS)
{
uchar i;
while(MS--) for(i=0;i<120;i++);}
void Show_Second()
{
uchar i;
LCD_Set_POS(0X45); //設置 LCD顯示起點
for (i=3;i!=0xff;i--)
{
//將兩位整數的1、100s, 秒,分,時轉換為8位數字字符
LCD_Display_Buffer[2*i+1]=Time_Buffer[i]/10+'0';
LCD_Display_Buffer[2*i]=Time_Buffer[i]%10+'0';
//在i=3,2,1,0時分別顯示時,分,秒,1/100s
LCD_Write_Data(LCD_Display_Buffer[2*i+1]);
LCD_Write_Data(LCD_Display_Buffer[2*i]);
LCD_Write_Data(':');
}}
//Time0中斷
void Time0() interrupt 1 using 0
{
TH0=-10000/256;
TL0=-10000%256;
Time_Buffer[0]++;
if(Time_Buffer[0]==100)
{
Time_Buffer[0]=0; Time_Buffer[1]++;
}
if(Time_Buffer[1]==60)//秒
{
Time_Buffer[1]=0; Time_Buffer[2]++;
}
if(Time_Buffer[2]==60) //分
{
Time_Buffer[2]=0; Time_Buffer[3]++;
}
if(Time_Buffer[3]==24) //時
Time_Buffer[3]=0;
}
void main()
{
uchar i;
IE=0x82;
TMOD=0x01;
TH0=-10000/256;
TL0=-10000%256;
LCD_Initialize();
Display_String(msg1,0x00);
Display_String(msg2,0x40);
while(1)
{
if(K1==0)
{
DelayX(100);
i=++KeyCount;
switch(i)
{
case 1:
case 3: TR0=1;
Display_String(Prompts[i-1],0);
break;
case 2:
case 4: TR0=0;
Display_String(Prompts[i-1],0);
break;
default:TR0=0;
break;
}
while (K1==0);
Beep();
}
else
if(K2==0)
{
TR0=0;
KeyCount=0;
for(i=0;i<4;i++)
Time_Buffer[i]=0;
Display_String(msg1,0);
Beep();
DelayX(100);
while(K2==0);
}
Show_Second();
}
}
/*txt2.c*/
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define DelayNOP(){_nop_();_nop_();_nop_();_nop_();}
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;
bit LCD_Busy_Check();
void LCD_Initialize();
void LCD_Write_Data(uchar);
void LCD_Write_Command(uchar);
void DelayMS(unit);
void DelayMS(uint MS)
{
uchar t;
while(MS--) for(t=0;t<120;t++);
}
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);
DelayMS(5);LCD_Write_Command(0x0c);
DelayMS(5);LCD_Write_Command(0x06);
DelayMS(5);LCD_Write_Command(0x01);
DelayMS(5);
}
void LCD_Set_POS(uchar Position)
{
LCD_Write_Command(Position|0x80);
}
void Display_String(uchar*str,uchar LineNo)
{
uchar k;
LCD_Set_POS(LineNo);
for(k=0;k<16;k++)
LCD_Write_Data(str[k]);
}
復制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1