1、功能描述
单片机连接12864(st7920)液晶显示器和1个按键接INT0,模拟一个抽奖机。
液晶初始显示“祝你好运!”;
按一下按键,液晶显示“开始抽奖”,然后显示“3-2-1”倒计时后,产生20个(0-4之间的)随机数;
液晶屏幕根据随机数显示“特等奖”、“1等奖”、“2等奖”、“3等奖”、“谢谢参与";
最后液晶屏显示抽奖结果:“恭喜你获得:XXX”。
再按一下按键,重新开始抽奖,液晶又显示“开始抽奖”。。。。。。如此循环。
2、PROTEUS中设计的电路图
3、源代码
#include <config.h>
#include <stdlib.h>
#include <12864.h>
sbit p=P2^0;
void delay_ms(u16 x)//毫秒延时函数
{
u16 i,j;
for(i=0;i<x;i++)
for(j=0;j<115;j++);
}
void main()
{
u16 m,n;
p=0;
EA=1;
IT0=1;
EX0=1;
//初始化
lcd12864_init();
lcd12864_pos(1,2);
LCD12864disp("祝你好运!");
while(1){
if(p==1)
{
m=rand();
srand(m);
lcd12864_clear();
//倒计时
lcd12864_pos(0,2);
LCD12864disp("开始抽奖");
lcd12864_pos(2,3);
LCD12864disp("3");
delay_ms(1000);
lcd12864_clear();
lcd12864_pos(0,2);
LCD12864disp("开始抽奖");
lcd12864_pos(2,3);
LCD12864disp("2");
delay_ms(1000);
lcd12864_clear();
lcd12864_pos(0,2);
LCD12864disp("开始抽奖");
lcd12864_pos(2,3);
LCD12864disp("1");
delay_ms(1000);
lcd12864_clear();
//随机产生20个显示奖项
for(m=0;m<20;m++)
{
n=rand()%5;
lcd12864_pos(2,2);
switch(n)
{
case 0:LCD12864disp("特等奖!");break;
case 1:LCD12864disp("1等奖!");break;
case 2:LCD12864disp("2等奖!");break;
case 3:LCD12864disp("3等奖!");break;
case 4:LCD12864disp("谢谢参与");break;
}
delay_ms(200);
}
lcd12864_pos(0,1);
LCD12864disp("恭喜你获得:");
}
p=0;
delay_ms(20);
}
}
void intr0() interrupt 0 //
{
p=~p;
}