標(biāo)題:
電話撥號盤模擬 單片機程序+Proteus仿真
[打印本頁]
作者:
天青牛
時間:
2019-12-31 21:11
標(biāo)題:
電話撥號盤模擬 單片機程序+Proteus仿真
pic.jpg
(184.03 KB, 下載次數(shù): 59)
下載附件
2019-12-31 21:08 上傳
單片機源程序如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar keycode,DDram_value=0xc0;
sbit rs=P2^0;
sbit rw=P2^1;
sbit e =P2^2;
sbit speaker=P2^3;
uchar code table[]={0x30,0x31,0x32,0x33,0x34,
0x35,0x36,0x37,0x38,0x39,0x20};
uchar code table_designer[]=" HIT ZYG Design";
void lcd_delay();
void delay(uint n);
void lcd_init(void);
void lcd_busy(void);
void lcd_wr_con(uchar c);
void lcd_wr_data(uchar d);
uchar checkkey(void);
uchar keyscan(void);
void main()
{
uchar num;
lcd_init();
lcd_wr_con(0x80);
for(num=0;num<=14;num++)
{
lcd_wr_data(table_designer[num]);
}
while(1)
{
keycode=keyscan();
if((keycode>=0)&&(keycode<=9))
{
lcd_wr_con(0x06);
lcd_wr_con(DDram_value);
lcd_wr_data(table[keycode]);
DDram_value++;
}
else if(keycode==0x0a)
{
lcd_wr_con(0x04);
DDram_value--;
if(DDram_value<=0xc0)
{
DDram_value=0xc0;
}
else if(DDram_value>=0xcf)
{
DDram_value=0xcf;
}
lcd_wr_con(DDram_value);
lcd_wr_data(table[10]);
}
else if(keycode==0x0b)
{
uchar i,j;
j=0xc0;
for(i=0;i<=15;i++)
{
lcd_wr_con(j);
lcd_wr_data(table[10]);
j++;
}
DDram_value=0xc0;
}
}
}
//液晶工作時的延時函數(shù)
void lcd_delay()
{
uchar y;
for(y=0;y<0xff;y++)
{
;
}
}
//液晶初始化
void lcd_init(void)
{
lcd_wr_con(0x01);
lcd_wr_con(0x38);
lcd_wr_con(0x0c);
lcd_wr_con(0x06);
}
// 判斷液晶忙或閑的程序
void lcd_busy(void)
{
P0=0xff;
rs=0;
rw=1;
e=1;
e=0;
while(P0&0x80)
{
e=0;
e=1;
}
lcd_delay();
}
//向液晶控制口輸入命令的調(diào)用函數(shù)
void lcd_wr_con(uchar c)
{
lcd_busy();
e=0;
rs=0;
rw=0;
e=1;
P0=c;
e=0;
lcd_delay();
}
//向液晶寫數(shù)據(jù)的調(diào)用函數(shù)
void lcd_wr_data(uchar d)
{
lcd_busy();
e=0;
rs=1;
rw=0;
e=1;
P0=d;
e=0;
lcd_delay();
}
void delay(uint n)
{
uchar i;
uint j;
for(i=50;i>0;i--)
for(j=n;j>0;j--);
}
//檢測鍵有無按下函數(shù)
uchar checkkey(void)
{
uchar temp;
P1=0xf0;
temp=P1;
temp=temp&0xf0;
if(temp==0xf0)
{
return(0);
}
else
{
return(1);
}
}
//鍵盤掃描函數(shù),返回所按下的鍵盤號
uchar keyscan(void)
{
uchar hanghao,liehao,keyvalue,buff;
if(checkkey()==0)
{
return(0xff);//無鍵按下,返回0xff
}
else
{
uchar sound;
for(sound=50;sound>0;sound--)
{
speaker=0;
delay(1);
speaker=1;
delay(1);
}
P1=0x0f;
buff=P1;
if(buff==0x0e)
{
hanghao=0;
}
else if(buff==0x0d)
{
hanghao=3;
}
else if(buff==0x0b)
{
hanghao=6;
}
else if(buff==0x07)
{
hanghao=9;
}
P1=0xf0;
buff=P1;
if(buff==0xe0)
{
liehao=2;
}
else if(buff==0xd0)
{
liehao=1;
}
else if(buff==0xb0)
{
liehao=0;
}
keyvalue=hanghao+liehao;
while(P1!=0xf0);
return(keyvalue);
}
}
復(fù)制代碼
全部資料51hei下載地址:
電話撥盤模擬.zip
(58.61 KB, 下載次數(shù): 91)
2019-12-31 21:09 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
HOU9914
時間:
2020-6-20 10:39
感謝樓主,很有幫助!
作者:
FunFun12
時間:
2021-1-4 14:51
樓主,問一下在軟件上能成功,然后 我把你的程序端口修改了一下然后放在開發(fā)板上,為什么就不行了??
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1