久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
求助,幫忙完善程序 缺少使用矩陣鍵盤控制單價,然后計算物品金額并累加
[打印本頁]
作者:
路人君
時間:
2018-8-22 17:37
標題:
求助,幫忙完善程序 缺少使用矩陣鍵盤控制單價,然后計算物品金額并累加
因為剛才有亂碼,所以我重發(fā)一下,還是剛才的問題,缺少一個通過矩陣鍵盤控制單價,以及計算物品金額并實現(xiàn)金額累加并顯示......
#include <reg52.h>
#include <stdio.h>
#include <math.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define DataPort P0
#define KeyPort P1
unsigned char KeyScan(void);//鍵盤掃描
unsigned char KeyPro(void);
sbit ADDO = P3^6;
sbit ADSK = P3^7;
sbit rest = P3^5;
unsigned int num;
unsigned int poi;
unsigned int dnf;
unsigned int i;
//////////////////////////
/*-----------------------------------------------
LCD12864引腳接口
------------------------------------------------*/
sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;
sbit RES = P2^3;
sbit PSB = P2^1;
sbit PAUSE = P3^0;
#define KeyPort P1
unsigned char temp[16];
unsigned char lol[16];
void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
檢測忙位
------------------------------------------------*/
void Check_Busy()
{
RS=0;
RW=1;
E=1;
DataPort=0xff;
while((DataPort&0x80)==0x80);//忙則等待
E=0;
}
/*------------------------------------------------
寫命令
------------------------------------------------*/
void Write_Cmd(unsigned char Cmd)
{
Check_Busy();
RS=0;
RW=0;
E=1;
DataPort=Cmd;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
/*------------------------------------------------
寫數(shù)據(jù)
------------------------------------------------*/
void Write_Data(unsigned char Data)
{
Check_Busy();
RS=1;
RW=0;
E=1;
DataPort=Data;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
/*------------------------------------------------
液晶屏初始化
------------------------------------------------*/
void Init_ST7920()
{
DelayMs(40); //大于40MS的延時程序
PSB=1; //設置為8BIT并口工作模式
DelayMs(1); //延時
RES=0; //復位
DelayMs(1); //延時
RES=1; //復位置高
DelayMs(10);
Write_Cmd(0x30); //選擇基本指令集
DelayUs2x(50); //延時大于100us
Write_Cmd(0x30); //選擇8bit數(shù)據(jù)流
DelayUs2x(20); //延時大于37us
Write_Cmd(0x0c); //開顯示(無游標、不反白)
DelayUs2x(50); //延時大于100us
Write_Cmd(0x01); //清除顯示,并且設定地址指針為00H
DelayMs(15); //延時大于10ms
Write_Cmd(0x06); //指定在資料的讀取及寫入時,設定游標的移動方向及指定顯示的移位,光標從右向左加1位移動
DelayUs2x(50); //延時大于100us
}
/*------------------------------------------------
顯示字符串
x:橫坐標值,范圍0~8
y:縱坐標值,范圍1~4
------------------------------------------------*/
void LCD_PutString(unsigned char x,unsigned char y,unsigned char *s)
{
switch(y)
{
case 1: Write_Cmd(0x80+x);break;
case 2: Write_Cmd(0x90+x);break;
case 3: Write_Cmd(0x88+x);break;
case 4: Write_Cmd(0x98+x);break;
default:break;
}
while(*s>0)
{
Write_Data(*s);
s++;
DelayUs2x(50);
}
}
/*------------------------------------------------
清屏
------------------------------------------------*/
void ClrScreen()
{
Write_Cmd(0x01);
DelayMs(15);
}
/*------------------------------------------------
延時函數(shù)
------------------------------------------------*/
void delay(uchar z)
{
uchar x;
for(;z>0;z--)
for(x=22;x>0;x--);
}
unsigned long ReadCount(void)
{
unsigned long Count; unsigned char i;
ADSK=0; //使能AD(PD_SCK 置低)
Count=0;
while(ADDO); //AD轉換未結束則等待,否則開始讀取
for (i=0;i<24;i++)
{
ADSK=1; //PD_SCK 置 高 ( 發(fā) 送 脈 沖 )
Count=Count<<1; //下降沿來時變量Count左移一位,右側補零
ADSK=0; //PD_SCK 置低
if(ADDO) Count++;
}
ADSK=1;
Count=Count^0x800000;//第25個脈沖下降沿來時,轉換數(shù)據(jù)
ADSK=0;
return(Count);
}
///////////////////////////////////////////////////////////////// //////////////////////
//jjjjjjjjj
unsigned char KeyScan(void) //鍵盤掃描函數(shù),使用行列反轉掃描法
{
unsigned char cord_h,cord_l;//行列值中間變量
KeyPort=0x0f; //行線輸出全為0
cord_h=KeyPort&0x0f; //讀入列線值
if(cord_h!=0x0f) //先檢測有無按鍵按下
{
DelayMs(10); //去抖
if((KeyPort&0x0f)!=0x0f)
{
cord_h=KeyPort&0x0f; //讀入列線值
KeyPort=cord_h|0xf0; //輸出當前列線值
cord_l=KeyPort&0xf0; //讀入行線值
while((KeyPort&0xf0)!=0xf0);//等待松開并輸出
return(cord_h+cord_l);//鍵盤最后組合碼值
}
}return(0xff); //返回該值
}
/*------------------------------------------------
按鍵值處理函數(shù),返回掃鍵值
------------------------------------------------*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:return 0;break;//0 按下相應的鍵顯示相對應的碼值
case 0x7d:return 1;break;//1
case 0x7b:return 2;break;//2
case 0x77:return 3;break;//3
case 0xbe:return 4;break;//4
case 0xbd:return 5;break;//5
case 0xbb:return 6;break;//6
case 0xb7:return 7;break;//7
case 0xde:return 8;break;//8
case 0xdd:return 9;break;//9
case 0xdb:return 10;break;//a
case 0xd7:return 11;break;//b
case 0xee:return 12;break;//c
case 0xed:return 13;break;//d
case 0xeb:return 14;break;//e
case 0xe7:return 15;break;//f
default:return 0xff;break;
}
}
/*------------------------------------------------
主程序
------------------------------------------------*/
main()
{
char v=0;
unsigned long weight ;
unsigned long heavy ;
float heavy1 ;
int d1,d2;
ClrScreen();
Init_ST7920(); //初始化
heavy= ReadCount(); DelayMs(100);
heavy= ReadCount(); DelayMs(100);
heavy= ReadCount(); DelayMs(100);
while (1)
{
for( v=0;v<2;v++)
{ weight += ReadCount(); }
weight =weight/3;
heavy1= weight-heavy ;
heavy1= (float)heavy1/2286.3;
DelayMs(150); DelayMs(150);
if(heavy1>10000)heavy1=0;
d1 = weight / 1000; d2 = weight % 1000;
//int num=KeyPro();
dnf=heavy1;
num=1;
poi=num*dnf;
i=poi;
sprintf(temp,"重量:%5.2f g " ,heavy1 );
LCD_PutString(0,1, temp);
sprintf(temp,"單價:%4d 元/g ",num);
LCD_PutString(0,2, temp);
sprintf(lol,"總價:%4d 元/g",poi);
LCD_PutString(0,3, lol);
sprintf(temp," %4d%-d ",d1,d2);
LCD_PutString(0,4, temp);
DelayMs(200);
if(!rest)
{DelayMs(10);
if(!rest)
while(!rest);
{ heavy= ReadCount();} }
}
}
復制代碼
作者:
路人君
時間:
2018-8-22 18:31
想到一個解決方案,我設置兩個按鍵,然后一個負責記錄當前總價,一個負責輸出共計金額,然后這樣的程序應該怎么寫呢
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日本电影韩国电影免费观看
|
国际精品鲁一鲁一区二区小说
|
亚洲一区二区精品视频
|
欧美视频在线播放
|
黄色国产在线播放
|
亚洲一区二区三区在线免费观看
|
欧美国产中文字幕
|
久久成人免费
|
精品国产一区二区三区久久久蜜月
|
精品成人av
|
久久躁日日躁aaaaxxxx
|
a在线观看
|
亚洲欧美另类在线观看
|
国产一区
|
久久精品这里精品
|
精品国产乱码久久久久久老虎
|
av电影一区
|
精品二区
|
国内精品在线视频
|
国产精品不卡视频
|
成年人网站免费视频
|
亚洲精品一区二区三区蜜桃久
|
东京av男人的天堂
|
日本久久网
|
黄色一级毛片免费看
|
91大神在线资源观看无广告
|
一级黄色毛片a
|
在线视频a
|
九九伊人sl水蜜桃色推荐
|
欧美在线a
|
日韩欧美在线免费观看视频
|
欧美成年黄网站色视频
|
日韩一区二区三区在线观看
|
成人高清视频在线观看
|
欧美一级片在线看
|
亚洲精品99
|
午夜一区二区三区在线观看
|
色婷婷av一区二区三区软件
|
成人亚洲
|
在线午夜
|
亚洲国产成人在线视频
|