欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
基于51單片機(jī)的智能搶答器程序
[打印本頁]
作者:
傻子57
時(shí)間:
2018-6-15 11:35
標(biāo)題:
基于51單片機(jī)的智能搶答器程序
搶答器
#include<reg52.h>
#include<intrins.h>
sbit RS = P2^0; //定義端口
sbit RW = P2^1;
sbit EN = P2^2;
sbit s = P2^7;
sbit s0 = P1^0;
sbit s1 = P1^1;
sbit s2 = P1^2;
sbit s3 = P1^3;
sbit s4 = P1^4;
sbit s5 = P1^5;
sbit s6 = P1^6;
sbit s7 = P1^7;
sbit beep = P3^7;
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P0
unsigned char table[10] ={'0','1','2','3','4','5','6','7','8','9'};
unsigned char shu,key,count=0;
unsigned char flag=0;
unsigned char DATA,num;
//uS 延時(shí)函數(shù)
void DelayUs2x(unsigned char t)
{
while(--t);
}
//mS 延時(shí)函數(shù)
void DelayMs(unsigned int t)
{
while(t--)
{
//延時(shí) 1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
//判忙函數(shù)
bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit)(DataPort & 0x80);
}
//寫入命令函數(shù)
void LCD_Write_Com(unsigned char com)
{
while(LCD_Check_Busy()); // 忙則等待
RS_CLR;
RW_CLR;
EN_SET;
DataPort= com;
_nop_();
EN_CLR;
}
// 寫入數(shù)據(jù)函數(shù)
void LCD_Write_Data(unsigned char Data)
{
while(LCD_Check_Busy()); // 忙則等待
RS_SET;
RW_CLR;
EN_SET;
DataPort= Data;
_nop_();
EN_CLR;
}
//清屏函數(shù)
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
//寫入字符串函數(shù)
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_Write_Data( *s);
s ++;
}
}
//寫入字符函數(shù)
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data);
}
//初始化函數(shù)
void LCD_Init(void)
{
LCD_Write_Com(0x38); //顯示模式設(shè)置
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); //顯示關(guān)閉
LCD_Write_Com(0x01); //顯示清屏
LCD_Write_Com(0x06); //顯示光標(biāo)移動(dòng)設(shè)置
DelayMs(5);
LCD_Write_Com(0x0C); //顯示開及光標(biāo)設(shè)置
}
//定時(shí)器中斷子程序
void Timer0_isr(void)interrupt 1
{
unsigned char temp,temp1,i,j=2;
TH0=(65536-50000)/256;// 重新賦值 50ms
TL0=(65536-50000)%256;
// beep=~beep;
// DelayMs(100);
i++;
if(i==20)
{
i=0;
DATA--;
if(DATA>0)
{
DelayMs(50);
temp=DATA/10;
temp1=DATA%10;
LCD_Write_Char(7,1,table[temp]);
LCD_Write_Char(8,1,table[temp1]);
}
else if(DATA==0)
{
P1=0xFF;
ET0=0;
DelayMs(50);
LCD_Write_Char(7,1,'0');
LCD_Write_Char(8,1,'0');
for(;j--;j>0)
{
beep=0;
DelayMs(500);
beep=1;
}
}
}
}
void beepon(void)
{
unsigned char i;
for(i=0;i<10;i++)
{
beep=0;
DelayMs(50);
beep=1;
}
}
unsigned char keyscan(void)
{
unsigned char scan1;
scan1=P1;
if(scan1!=0xff)
{
DelayMs(30);
if(scan1==P1)
{
switch(scan1)
{
case 0xff:
scan1 = 0;
break;
case 0xfe:
scan1 = 1;
break;
case 0xfd:
scan1 = 2;
break;
case 0xfb:
scan1 = 3;
break;
case 0xf7:
scan1 = 4;
break;
case 0xef:
scan1 = 5;
break;
case 0xdf:
scan1 = 6;
break;
case 0xbf:
scan1 = 7;
break;
case 0x7f:
scan1 = 8;
break;
}
}
}
else
scan1=0;
return(scan1);
}
void display(void)
{
unsigned char a,b;
key=keyscan();
if(key!=0 & flag==0 )
{
ET0=0;
count++;
DelayMs(200);
LCD_Write_Char(10,0,table[key]);
flag=1;
a=(shu-DATA)/10;
b=(shu-DATA)%10;
LCD_Write_Char(7,1,table[a]);
LCD_Write_Char(8,1,table[b]);
}
}
void main(void)
{
unsigned char k;
unsigned a,b;
LCD_Init(); //初始化液晶
DelayMs(20); //延時(shí)有助于穩(wěn)定
LCD_Clear(); //清屏
LCD_Write_String(0,1,"time");
LCD_Write_String(0,0,"xuanshou");
//Init_Timer0(); //定時(shí)器 0 初始化
while(count==0)
{
if(s0==0)
{
DelayMs(10);
if(s0==0)
{
count++;
while(count==1)
{
if(s==0)
{
DelayMs(10);
if(s==0)
{
while(!s);
count++;
}
}
if(s1==0)
{
DelayMs(10);
if(s1==0)
{
while(!s1);
{
DATA++;
shu=DATA;
if (DATA==31) {DATA=0;count=0;}
a=DATA/10;
b=DATA%10;
LCD_Write_Char(7,1,table[a]);
LCD_Write_Char(8,1,table[b]);
}
}
}
}
while(count==2)
{
TMOD |= 0x01; //使用模式 1,16 位定時(shí)器,使用 "|"符號(hào)可以在 使用多個(gè)定時(shí)器時(shí)不受影響
TH0=(65536-50000)/256;// 重新賦值 50ms
TL0=(65536-50000)%256;
EA=1; //總中斷打開
ET0=1; //定時(shí)器中斷打開
TR0=1; //定時(shí)器開關(guān)
}
}
}
}
}
復(fù)制代碼
作者:
電子專業(yè)新人
時(shí)間:
2021-10-26 20:56
大佬,有proteus原理圖嗎?
作者:
heicad
時(shí)間:
2021-10-26 23:12
電子專業(yè)新人 發(fā)表于 2021-10-26 20:56
大佬,有proteus原理圖嗎?
仿真可以參考這個(gè):
http://m.raoushi.com/bbs/dpj-123579-1.html
或者找其他的 論壇里面有上百個(gè)
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1