欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機(jī)開發(fā)板實(shí)現(xiàn)電子琴和數(shù)碼管計(jì)算器程序(超簡單)
[打印本頁]
作者:
Farr_summer
時(shí)間:
2023-3-26 15:56
標(biāo)題:
單片機(jī)開發(fā)板實(shí)現(xiàn)電子琴和數(shù)碼管計(jì)算器程序(超簡單)
程序?qū)崿F(xiàn)內(nèi)容為:
1、通過矩陣鍵盤輸入和數(shù)碼管顯示可以實(shí)現(xiàn)簡易計(jì)算器的功能。
2、計(jì)算器功能有基本的加減乘除外,還實(shí)現(xiàn)了累加累乘的功能。
3、矩陣鍵盤從第一排往右的案件功能分別為1、2、3、+、4、5、6、-、7、8、9、*、0、清零、等于、除
4、在第一二獨(dú)立按鍵按下切換還可以實(shí)現(xiàn)電子琴和計(jì)算器切換的功能5、程序包含數(shù)碼管顯示函數(shù)。
51hei圖片_20230326155432.jpg
(700.53 KB, 下載次數(shù): 39)
下載附件
普中A2開發(fā)板
2023-3-26 15:54 上傳
普中A2單片機(jī)源程序如下:
#include <reg52.h>
#include <string.h>
//strcmp(tempName, names[i]) == 0
#define KEYS P1
typedef signed long u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned int u12;
typedef unsigned char u8;
unsigned char chice = 0;
int find;
long view = 0; //計(jì)算器最終數(shù)字定義
int s = 0; //按鍵次數(shù)
int num = 1;
long temp,temp1; //計(jì)算器用到的數(shù)值
long sum = 0;
long totalsum = 0;
int tect = 0; //測試是否按下等號(hào)
sbit KEY1 = P3^1;
sbit KEY2 = P3^0;
int ZE; //選擇模式
int sound;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit beep=P2^5;
void delay(int t)
{
while(t--); //大概等于十微秒
}
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X40};// 顯 示 0~F 的值
void Display(int i)
{
switch(i) //位選,選擇點(diǎn)亮的數(shù)碼管,
{
case(0): LSA=1;LSB=1;LSC=1; break;//顯示第 0 位
case(1): LSA=0;LSB=1;LSC=1; break;//顯示第 1 位
case(2): LSA=1;LSB=0;LSC=1; break;//顯示第 2 位
case(3): LSA=0;LSB=0;LSC=1; break;//顯示第 3 位
case(4): LSA=1;LSB=1;LSC=0; break;//顯示第 4 位
case(5): LSA=0;LSB=1;LSC=0; break;//顯示第 5 位
case(6): LSA=1;LSB=0;LSC=0; break;//顯示第 6 位
case(7): LSA=0;LSB=0;LSC=0; break;//顯示第 7 位
}
}
void Displaynum(long num)
{
long temp ;
int nums[8];
long i,j;
u16 sum;
int m = 0;
for(sum = 1,j = 0;j < 8;j++)
{
if ( num >= 0 )
{
if(sum <= num && num >= 0 )
{
temp = num / sum;
temp = temp % 10;
nums[j] = temp;
m++;
}
else if(num == 0)
{
nums[j] = 0;
m++;
break;
}
sum *= 10;
}
else if(num < 0)
{
if(num < 0 && sum <= (-num))
{
temp = (-num) / sum;
temp = temp % 10;
nums[j] = temp;
m++;
}
else
{
nums[j] = 16;
m++;
break;
}
sum *= 10;
}
}
for(i = 7;i >= 0;i--)
{
j = nums[i];
if(i < m)
{
Display(7 - i);
P0=smgduan[j];
delay(100); //間隔一段時(shí)間掃描
P0=0x00;//消隱
}
else
{
P0 = 0X00;
}
}
}
void Mkey()
{
int a = 0;
KEYS = 0X0f;
if(KEYS != 0X0f)
{
delay(1000);
if(KEYS != 0Xff)
{
KEYS=0X0F;
switch(KEYS) //判斷列
{
case(0X07): chice=0;break;
case(0X0b): chice=1;break;
case(0X0d): chice=2;break;
case(0X0e): chice=3;break;
}
KEYS=0XF0;
switch(KEYS)
{
case(0X70): chice=chice;break;
case(0Xb0): chice=chice+4;break;
case(0Xd0): chice=chice+8;break;
case(0Xe0): chice=chice+12;break;
}
switch(chice) //對(duì)每個(gè)按鍵進(jìn)行功能定義
{
case(0):find = 1;break; case(1):find = 2;break; case(2):find = 3;break; case(3):find = 10;break; //加
case(4):find = 4;break; case(5):find = 5;break; case(6):find = 6;break; case(7):find = 11;break; //減
case(8):find = 7;break; case(9):find = 8;break; case(10):find = 9;break; case(11):find = 12;break;//乘
case(12):find = 0;break; case(13):find = 14;break; case(14):find = 15;break; case(15):find = 13;break;//除
}
switch(find) //音頻頻率
{
case(1):sound = 70;break;
case(2):sound = 65;break;
case(3):sound = 60;break;
case(4):sound = 55;break;
case(5):sound = 50;break;
case(6):sound = 45;break;
case(7):sound = 40;break;
case(8):sound = 35;break;
}
}
while(KEYS!=0xf0)
{
if(ZE == 2 && sound > 35)
{
beep = ~beep;delay(sound);
}
} //檢測按鍵松手檢測
sound = 0;
if(sum == 0)
{
view = 0;
}
view = (view *= 10) + find; //累加
if(find < 10 && s == 0) //第一次加
{
sum = 1;
temp = view;
}
else if(find >= 10)
{
if(tect == 0 && s > 0) //累算
{
switch(find)
{
case(10):temp = temp + temp1;break;
case(11):temp = temp - temp1;break;
case(12):temp = temp * temp1;break;
case(13):temp = temp / temp1;break;
}
}
view = 0;
switch(find)
{
case(10):s=1;break;
case(11):s=2;break;
case(12):s=3;break;
case(13):s=4;break;
}
}
if(find < 10 && s != 0) //第二次加
{
sum = 1;
temp1 = view;
}
}
}
void Comp()
{
if(find == 15)
{
switch(s)
{
case(1):view = temp + temp1;break;
case(2):view = temp - temp1;break;
case(3):view = temp * temp1;break;
case(4):view = temp / temp1;break;
}
temp = view;
find = 0;
sum = 0;
s = 0;
tect = 1;
}
else if(find == 14)
{
view=0;
temp = 0;
temp1 = 0;
s = 0;
find = 0;
sum = 0;
totalsum = 0;
tect = 0;
}
}
void XUAN()
{
if(KEY1 == 0 || KEY2 == 0)
{
delay(100);
if(KEY1 == 0)
{
ZE = 1;
}
if(KEY2 == 0)
{
ZE = 2;
}
while(!KEY1 || !KEY2);
}
}
void main()
{
while(1)
{
XUAN();
Mkey();
if(ZE != 2)
{
Comp();
Displaynum(view);
}
if(ZE == 2)
{
view = 0;
}
}
}
復(fù)制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1