标题:
单片机LCD1602随机模拟显示乘法口诀的proteus仿真与源程序
[打印本页]
作者:
526719912
时间:
2018-8-16 19:13
标题:
单片机LCD1602随机模拟显示乘法口诀的proteus仿真与源程序
lcd1602随机显示乘法口诀的仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(18.81 KB, 下载次数: 30)
下载附件
2018-8-16 19:39 上传
0.png
(57.88 KB, 下载次数: 34)
下载附件
2018-8-16 19:39 上传
单片机源程序如下:
#include <REGX52.H>
#include <INTRINS.H>
unsigned int x,y,z;
unsigned int sj_x_cnt = 0,sj_y_cnt = 0;//随机
unsigned int sd_x_cnt = 0,sd_y_cnt = 0;//顺到序
unsigned char cheng[46][2] =
{
{0,0},
{1,1},
{1,2},{2,2},
{1,3},{2,3},{3,3},
{1,4},{2,4},{3,4},{4,4},
{1,5},{2,5},{3,5},{4,5},{5,5},
{1,6},{2,6},{3,6},{4,6},{5,6},{6,6},
{1,7},{2,7},{3,7},{4,7},{5,7},{6,7},{7,7},
{1,8},{2,8},{3,8},{4,8},{5,8},{6,8},{7,8},{8,8},
{1,9},{2,9},{3,9},{4,9},{5,9},{6,9},{7,9},{8,9},{9,9},
};
void delay1ms(unsigned char xms)
{
unsigned char i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
/***************液晶显示模块*****************/
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit key=P1^4;
sbit key2=P1^5;
sbit key3=P1^6;
//sbit BF=P0^7;
/*液晶忙检测
bit BusyTest(void)
{
bit result;
RS=0;
RW=1;
E=1;
_nop_();
_nop_();
_nop_();
result=BF;
_nop_();
_nop_();
_nop_();
E=0;
return result;
}*/
/*写指令*/
void Write_com(unsigned char command)
{
// while(BusyTest()!=0);
RS=0;
RW=0;
E=0;
_nop_();
_nop_();
_nop_();
P0=command;
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
E=0;
}
/*写地址*/
void Write_Address(unsigned char address)
{
Write_com(address);
delay1ms(1);
}
/*写数据*/
void Write_Date(unsigned char date)
{
RS=1;
RW=0;
E=0;
_nop_();
_nop_();
_nop_();
P0=date;
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
E=0;
delay1ms(1);
}
/*初始化*/
void Lcd_Int(void)
{
Write_com(0x38);
delay1ms(1);
Write_com(0x38);
Write_com(0x38);
delay1ms(1);
delay1ms(1);
Write_com(0x06);
delay1ms(1);
Write_com(0x0c);
delay1ms(1);
Write_com(0x01);
}
void writelcd(unsigned char a,b,dat)
{
if(b==1)
{
Write_Address(0x80+a);
Write_Date(dat);
}
else
{
Write_Address(0xc0+a);
Write_Date(dat);
}
}
void main()
{
unsigned char mode = 0;
int k_cnt = 0;
TMOD = 0x01;
TH0 = 0x0EC;
TL0 = 0x78;
EA = 1;
ET0 = 1;
TR0 = 0;
Lcd_Int();
mode = 1;//默认为随机的
while(1)
{
if(key==0)
{
delay1ms(10);
if(key==0)
{
TR0=1;
}
while(!key);
TR0=0;
mode = 1; //随机
}
else if(key2==0)
{
delay1ms(10);
if(key2==0)
{
while(!key2);
mode = 2;//顺序
k_cnt ++;
if(k_cnt >=46)
k_cnt = 0;
}
}
else if(key3==0)
{
delay1ms(10);
if(key3==0)
{
while(!key3);
mode = 3;//倒序
k_cnt --;
if(k_cnt <= 0)
k_cnt = 45;
}
}
if(mode == 1)
{
x = sj_x_cnt;
y = sj_y_cnt;
}
else
{
x = cheng[k_cnt][0];
y = cheng[k_cnt][1];
}
z=x*y;
Write_Address(0x80);
if(x/10!=0)
Write_Date(0x30+x/10);
Write_Date(0x30+x%10);
Write_Date('*');
if(y/10!=0)
Write_Date(0x30+y/10);
Write_Date(0x30+y%10);
Write_Date('=');
if(z/1000!=0)
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
1602LCD随机模拟显示乘法口诀.rar
(54.06 KB, 下载次数: 52)
2018-8-16 19:12 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
yan_m
时间:
2018-8-16 21:11
看到這麼完整的PCB封裝庫,心理非場想要,但我得努力賺黑幣才行~
作者:
yan_m
时间:
2018-8-16 21:12
心理非場想要,但我得努力賺黑幣才行~
作者:
admin
时间:
2018-8-17 00:05
注意,此程序存在重复内容:详见
http://www.51hei.com/bbs/dpj-84794-1.html
以后不要发这种重复的
作者:
售卖美年达
时间:
2020-9-13 14:37
非常有用,看完恍然大悟
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1