久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機開發板實現電子琴和數碼管計算器程序(超簡單)
[打印本頁]
作者:
Farr_summer
時間:
2023-3-26 15:56
標題:
單片機開發板實現電子琴和數碼管計算器程序(超簡單)
程序實現內容為:
1、通過矩陣鍵盤輸入和數碼管顯示可以實現簡易計算器的功能。
2、計算器功能有基本的加減乘除外,還實現了累加累乘的功能。
3、矩陣鍵盤從第一排往右的案件功能分別為1、2、3、+、4、5、6、-、7、8、9、*、0、清零、等于、除
4、在第一二獨立按鍵按下切換還可以實現電子琴和計算器切換的功能5、程序包含數碼管顯示函數。
51hei圖片_20230326155432.jpg
(700.53 KB, 下載次數: 39)
下載附件
普中A2開發板
2023-3-26 15:54 上傳
普中A2單片機源程序如下:
#include <reg52.h>
#include <string.h>
//strcmp(tempName, names[i]) == 0
#define KEYS P1
typedef signed long u16; //對數據類型進行聲明定義
typedef unsigned int u12;
typedef unsigned char u8;
unsigned char chice = 0;
int find;
long view = 0; //計算器最終數字定義
int s = 0; //按鍵次數
int num = 1;
long temp,temp1; //計算器用到的數值
long sum = 0;
long totalsum = 0;
int tect = 0; //測試是否按下等號
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) //位選,選擇點亮的數碼管,
{
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); //間隔一段時間掃描
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) //對每個按鍵進行功能定義
{
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;
}
}
}
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
五月激情婷婷六月
|
成人在线免费观看视频
|
麻豆久久久久
|
a在线观看免费
|
亚洲国产一区在线
|
男女又爽又黄视频
|
国产中文字幕在线
|
亚洲一区二区三区在线
|
黄色成人免费在线观看
|
久久久久久久国产精品影院
|
久热精品在线播放
|
久久精品免费一区二区三
|
天天干天天操天天射
|
国产aa
|
久操av在线
|
av色站
|
亚洲一区二区三区四区五区中文
|
欧美精品第三页
|
高清视频一区二区三区
|
粉嫩国产精品一区二区在线观看
|
国产探花在线精品一区二区
|
欧美精品在线播放
|
美女视频一区二区
|
天天操人人干
|
一区二区三区在线观看视频
|
www.亚洲一区
|
日本视频在线播放
|
欧美日韩成人影院
|
色五月激情五月
|
亚洲视频在线一区
|
国产精品视频网址
|
中文精品久久
|
久久新
|
国产日韩欧美一区
|
精品国产乱码一区二区三
|
国产精品国产自产拍高清
|
日韩精品在线网站
|
黄视频网站在线
|
欧美久久久久久
|
精品欧美一区二区在线观看
|
999精品网
|